From 19b730e98bd4a42b4de259a12edc595285b35b93 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Tue, 20 Jun 2023 09:52:45 +0200 Subject: [PATCH 01/80] GUACAMOLE-1085: Remove AngularJS frontend --- guacamole/src/main/frontend/package-lock.json | 10612 ---------------- guacamole/src/main/frontend/package.json | 43 - .../plugins/dependency-list-plugin.js | 157 - .../main/frontend/src/angular-module-shim.js | 56 - .../main/frontend/src/app/auth/authModule.js | 26 - .../app/auth/service/authenticationService.js | 550 - .../app/auth/types/AuthenticationResult.js | 81 - .../frontend/src/app/client/clientModule.js | 34 - .../client/controllers/clientController.js | 879 -- .../src/app/client/directives/guacClient.js | 675 - .../directives/guacClientNotification.js | 409 - .../app/client/directives/guacClientPanel.js | 168 - .../client/directives/guacClientUserCount.js | 237 - .../app/client/directives/guacClientZoom.js | 85 - .../app/client/directives/guacFileBrowser.js | 281 - .../app/client/directives/guacFileTransfer.js | 216 - .../directives/guacFileTransferManager.js | 105 - .../app/client/directives/guacThumbnail.js | 120 - .../app/client/directives/guacTiledClients.js | 184 - .../client/directives/guacTiledThumbnails.js | 77 - .../src/app/client/directives/guacViewport.js | 112 - .../src/app/client/directives/guacZoomCtrl.js | 48 - .../src/app/client/services/guacAudio.js | 39 - .../app/client/services/guacClientManager.js | 328 - .../src/app/client/services/guacImage.js | 135 - .../src/app/client/services/guacTranslate.js | 82 - .../src/app/client/services/guacVideo.js | 37 - .../frontend/src/app/client/styles/client.css | 137 - .../client/styles/connection-select-menu.css | 62 - .../app/client/styles/connection-warning.css | 56 - .../src/app/client/styles/display.css | 66 - .../src/app/client/styles/file-browser.css | 49 - .../client/styles/file-transfer-dialog.css | 118 - .../src/app/client/styles/filesystem-menu.css | 72 - .../src/app/client/styles/guac-menu.css | 170 - .../src/app/client/styles/keyboard.css | 34 - .../frontend/src/app/client/styles/menu.css | 146 - .../src/app/client/styles/notification.css | 95 - .../src/app/client/styles/share-menu.css | 58 - .../app/client/styles/thumbnail-display.css | 30 - .../app/client/styles/tiled-client-grid.css | 277 - .../app/client/styles/transfer-manager.css | 51 - .../src/app/client/styles/transfer.css | 132 - .../src/app/client/styles/viewport.css | 27 - .../frontend/src/app/client/styles/zoom.css | 75 - .../src/app/client/templates/client.html | 228 - .../src/app/client/templates/connection.html | 9 - .../app/client/templates/connectionGroup.html | 10 - .../src/app/client/templates/file.html | 9 - .../src/app/client/templates/guacClient.html | 17 - .../templates/guacClientNotification.html | 5 - .../app/client/templates/guacClientPanel.html | 30 - .../client/templates/guacClientUserCount.html | 11 - .../app/client/templates/guacClientZoom.html | 18 - .../app/client/templates/guacFileBrowser.html | 6 - .../client/templates/guacFileTransfer.html | 22 - .../templates/guacFileTransferManager.html | 22 - .../app/client/templates/guacThumbnail.html | 11 - .../client/templates/guacTiledClients.html | 33 - .../client/templates/guacTiledThumbnails.html | 14 - .../app/client/templates/guacViewport.html | 2 - .../src/app/client/types/ClientProperties.js | 95 - .../src/app/client/types/ManagedArgument.js | 153 - .../src/app/client/types/ManagedClient.js | 1147 -- .../app/client/types/ManagedClientGroup.js | 359 - .../app/client/types/ManagedClientState.js | 185 - .../client/types/ManagedClientThumbnail.js | 58 - .../src/app/client/types/ManagedDisplay.js | 174 - .../client/types/ManagedFileTransferState.js | 133 - .../src/app/client/types/ManagedFileUpload.js | 208 - .../src/app/client/types/ManagedFilesystem.js | 340 - .../src/app/client/types/ManagedShareLink.js | 105 - .../src/app/client/types/TranslationResult.js | 59 - .../src/app/clipboard/clipboardModule.js | 23 - .../app/clipboard/directives/guacClipboard.js | 133 - .../clipboard/services/clipboardService.js | 625 - .../src/app/clipboard/styles/clipboard.css | 107 - .../clipboard/templates/guacClipboard.html | 12 - .../src/app/clipboard/types/ClipboardData.js | 68 - .../src/app/element/directives/guacClick.js | 126 - .../src/app/element/directives/guacDrop.js | 171 - .../src/app/element/directives/guacFocus.js | 63 - .../src/app/element/directives/guacMarker.js | 59 - .../src/app/element/directives/guacResize.js | 114 - .../src/app/element/directives/guacScroll.js | 82 - .../src/app/element/directives/guacUpload.js | 103 - .../frontend/src/app/element/elementModule.js | 24 - .../src/app/element/styles/resize-sensor.css | 30 - .../src/app/element/templates/blank.html | 8 - .../frontend/src/app/element/types/Marker.js | 47 - .../src/app/element/types/ScrollState.js | 60 - .../controllers/checkboxFieldController.js | 37 - .../form/controllers/dateFieldController.js | 89 - .../controllers/languageFieldController.js | 52 - .../form/controllers/numberFieldController.js | 37 - .../controllers/passwordFieldController.js | 72 - .../controllers/redirectFieldController.js | 32 - .../form/controllers/selectFieldController.js | 33 - .../terminalColorSchemeFieldController.js | 142 - .../form/controllers/textFieldController.js | 40 - .../form/controllers/timeFieldController.js | 89 - .../controllers/timeZoneFieldController.js | 708 -- .../frontend/src/app/form/directives/form.js | 307 - .../src/app/form/directives/formField.js | 210 - .../src/app/form/directives/guacInputColor.js | 117 - .../app/form/directives/guacLenientDate.js | 80 - .../app/form/directives/guacLenientTime.js | 100 - .../main/frontend/src/app/form/formModule.js | 26 - .../app/form/services/colorPickerService.js | 270 - .../src/app/form/services/formService.js | 428 - .../src/app/form/styles/form-field.css | 47 - .../frontend/src/app/form/styles/form.css | 24 - .../src/app/form/styles/redirect-field.css | 35 - .../styles/terminal-color-scheme-field.css | 158 - .../src/app/form/templates/checkboxField.html | 10 - .../src/app/form/templates/dateField.html | 13 - .../src/app/form/templates/emailField.html | 12 - .../frontend/src/app/form/templates/form.html | 21 - .../src/app/form/templates/formField.html | 12 - .../app/form/templates/guacInputColor.html | 11 - .../src/app/form/templates/languageField.html | 7 - .../src/app/form/templates/numberField.html | 10 - .../src/app/form/templates/passwordField.html | 12 - .../src/app/form/templates/redirectField.html | 8 - .../src/app/form/templates/selectField.html | 8 - .../templates/terminalColorSchemeField.html | 65 - .../src/app/form/templates/textAreaField.html | 9 - .../src/app/form/templates/textField.html | 15 - .../src/app/form/templates/timeField.html | 13 - .../src/app/form/templates/timeZoneField.html | 18 - .../src/app/form/templates/usernameField.html | 10 - .../src/app/form/types/ColorScheme.js | 949 -- .../frontend/src/app/form/types/FieldType.js | 89 - .../app/groupList/directives/guacGroupList.js | 249 - .../directives/guacGroupListFilter.js | 304 - .../src/app/groupList/groupListModule.js | 28 - .../groupList/templates/guacGroupList.html | 41 - .../templates/guacGroupListFilter.html | 6 - .../src/app/groupList/types/GroupListItem.js | 445 - .../frontend/src/app/history/historyModule.js | 25 - .../src/app/history/services/guacHistory.js | 106 - .../src/app/history/types/HistoryEntry.js | 52 - .../app/home/controllers/homeController.js | 99 - .../home/directives/guacRecentConnections.js | 184 - .../main/frontend/src/app/home/homeModule.js | 20 - .../frontend/src/app/home/styles/home.css | 112 - .../src/app/home/templates/connection.html | 16 - .../app/home/templates/connectionGroup.html | 10 - .../home/templates/guacRecentConnections.html | 25 - .../frontend/src/app/home/templates/home.html | 36 - .../src/app/home/types/ActiveConnection.js | 52 - .../src/app/home/types/RecentConnection.js | 52 - .../importConnectionsController.js | 699 - .../directives/connectionImportErrors.js | 319 - .../frontend/src/app/import/importModule.js | 24 - .../import/services/connectionCSVService.js | 461 - .../import/services/connectionParseService.js | 843 -- .../frontend/src/app/import/styles/help.css | 59 - .../frontend/src/app/import/styles/import.css | 190 - .../import/templates/connectionErrors.html | 49 - .../import/templates/connectionImport.html | 82 - .../templates/connectionImportFileHelp.html | 29 - .../import/types/ConnectionImportConfig.js | 103 - .../src/app/import/types/DisplayErrorList.js | 91 - .../src/app/import/types/ImportConnection.js | 147 - .../app/import/types/ImportConnectionError.js | 86 - .../src/app/import/types/ParseError.js | 75 - .../src/app/import/types/ParseResult.js | 113 - .../src/app/index/config/httpDefaults.js | 36 - .../src/app/index/config/indexRouteConfig.js | 223 - .../index/config/indexTranslationConfig.js | 44 - .../index/config/templateRequestDecorator.js | 364 - .../app/index/controllers/indexController.js | 400 - .../src/app/index/filters/arrayFilter.js | 80 - .../src/app/index/filters/escapeFilter.js | 35 - .../src/app/index/filters/resolveFilter.js | 53 - .../frontend/src/app/index/indexModule.js | 54 - .../src/app/index/services/iconService.js | 148 - .../src/app/index/styles/animation.css | 59 - .../index/styles/automatic-login-rejected.css | 30 - .../frontend/src/app/index/styles/buttons.css | 134 - .../frontend/src/app/index/styles/cloak.css | 27 - .../src/app/index/styles/fatal-page-error.css | 63 - .../src/app/index/styles/font-carlito.css | 47 - .../frontend/src/app/index/styles/headers.css | 111 - .../frontend/src/app/index/styles/input.css | 45 - .../frontend/src/app/index/styles/lists.css | 90 - .../frontend/src/app/index/styles/loading.css | 76 - .../src/app/index/styles/logged-out.css | 29 - .../app/index/styles/other-connections.css | 203 - .../src/app/index/styles/sorted-tables.css | 61 - .../frontend/src/app/index/styles/status.css | 42 - .../main/frontend/src/app/index/styles/ui.css | 283 - .../src/app/list/directives/guacFilter.js | 114 - .../src/app/list/directives/guacPager.js | 300 - .../src/app/list/directives/guacSortOrder.js | 101 - .../src/app/list/directives/guacUserItem.js | 92 - .../main/frontend/src/app/list/listModule.js | 26 - .../frontend/src/app/list/styles/filter.css | 33 - .../frontend/src/app/list/styles/pager.css | 87 - .../src/app/list/styles/user-item.css | 23 - .../src/app/list/templates/guacFilter.html | 6 - .../src/app/list/templates/guacPager.html | 25 - .../src/app/list/templates/guacUserItem.html | 3 - .../src/app/list/types/FilterPattern.js | 263 - .../src/app/list/types/FilterToken.js | 229 - .../src/app/list/types/IPv4Network.js | 126 - .../src/app/list/types/IPv6Network.js | 227 - .../frontend/src/app/list/types/SortOrder.js | 146 - .../frontend/src/app/locale/localeModule.js | 23 - .../app/locale/services/translationLoader.js | 156 - .../services/translationStringService.js | 46 - .../src/app/login/directives/login.js | 269 - .../frontend/src/app/login/loginModule.js | 27 - .../src/app/login/styles/animation.css | 34 - .../frontend/src/app/login/styles/dialog.css | 128 - .../frontend/src/app/login/styles/input.css | 47 - .../frontend/src/app/login/styles/login.css | 86 - .../src/app/login/templates/login.html | 53 - .../controllers/manageConnectionController.js | 355 - .../manageConnectionGroupController.js | 296 - .../manageSharingProfileController.js | 338 - .../controllers/manageUserController.js | 506 - .../controllers/manageUserGroupController.js | 555 - .../directives/connectionPermissionEditor.js | 557 - .../app/manage/directives/dataSourceTabs.js | 114 - .../manage/directives/identifierSetEditor.js | 300 - .../app/manage/directives/locationChooser.js | 169 - .../manage/directives/managementButtons.js | 201 - .../directives/systemPermissionEditor.js | 316 - .../frontend/src/app/manage/manageModule.js | 31 - .../src/app/manage/styles/attributes.css | 63 - .../manage/styles/connection-parameter.css | 51 - .../frontend/src/app/manage/styles/forms.css | 29 - .../src/app/manage/styles/locationChooser.css | 35 - .../app/manage/styles/manage-user-group.css | 71 - .../src/app/manage/styles/manage-user.css | 71 - .../src/app/manage/styles/related-objects.css | 82 - .../templates/connectionGroupPermission.html | 13 - .../templates/connectionPermission.html | 13 - .../templates/connectionPermissionEditor.html | 22 - .../app/manage/templates/dataSourceTabs.html | 3 - .../manage/templates/identifierSetEditor.html | 47 - .../app/manage/templates/locationChooser.html | 17 - .../locationChooserConnectionGroup.html | 4 - .../manage/templates/manageConnection.html | 96 - .../templates/manageConnectionGroup.html | 56 - .../templates/manageSharingProfile.html | 45 - .../src/app/manage/templates/manageUser.html | 93 - .../app/manage/templates/manageUserGroup.html | 105 - .../manage/templates/managementButtons.html | 6 - .../templates/sharingProfilePermission.html | 13 - .../templates/systemPermissionEditor.html | 18 - .../app/manage/types/HistoryEntryWrapper.js | 80 - .../src/app/manage/types/ManageableUser.js | 64 - .../app/manage/types/ManageableUserGroup.js | 53 - .../app/manage/types/ManagementPermissions.js | 182 - .../src/app/navigation/directives/guacMenu.js | 111 - .../app/navigation/directives/guacPageList.js | 246 - .../navigation/directives/guacSectionTabs.js | 143 - .../app/navigation/directives/guacUserMenu.js | 164 - .../src/app/navigation/navigationModule.js | 28 - .../navigation/services/userPageService.js | 488 - .../src/app/navigation/styles/menu.css | 161 - .../src/app/navigation/styles/tabs.css | 63 - .../src/app/navigation/styles/user-menu.css | 99 - .../app/navigation/templates/guacMenu.html | 7 - .../navigation/templates/guacPageList.html | 13 - .../navigation/templates/guacSectionTabs.html | 10 - .../navigation/templates/guacUserMenu.html | 33 - .../app/navigation/types/ClientIdentifier.js | 218 - .../src/app/navigation/types/MenuAction.js | 74 - .../app/navigation/types/PageDefinition.js | 75 - .../app/notification/directives/guacModal.js | 29 - .../directives/guacNotification.js | 86 - .../app/notification/notificationModule.js | 26 - .../notification/services/guacNotification.js | 123 - .../src/app/notification/styles/modal.css | 51 - .../app/notification/styles/notification.css | 144 - .../app/notification/templates/guacModal.html | 3 - .../templates/guacNotification.html | 44 - .../app/notification/types/Notification.js | 123 - .../notification/types/NotificationAction.js | 73 - .../types/NotificationCountdown.js | 76 - .../types/NotificationProgress.js | 84 - .../src/app/osk/directives/guacOsk.js | 125 - .../main/frontend/src/app/osk/oskModule.js | 23 - .../main/frontend/src/app/osk/styles/osk.css | 228 - .../src/app/osk/templates/guacOsk.html | 2 - .../src/app/player/directives/player.js | 576 - .../app/player/directives/playerDisplay.js | 138 - .../player/directives/progressIndicator.js | 101 - .../frontend/src/app/player/playerModule.js | 52 - .../frontend/src/app/player/styles/player.css | 206 - .../src/app/player/styles/playerDisplay.css | 77 - .../app/player/styles/progressIndicator.css | 125 - .../frontend/src/app/player/styles/seek.css | 170 - .../src/app/player/templates/player.html | 83 - .../app/player/templates/playerDisplay.html | 3 - .../player/templates/progressIndicator.html | 12 - .../main/frontend/src/app/rest/restModule.js | 27 - .../rest/services/activeConnectionService.js | 153 - .../src/app/rest/services/cacheService.js | 87 - .../rest/services/connectionGroupService.js | 184 - .../app/rest/services/connectionService.js | 226 - .../app/rest/services/dataSourceService.js | 125 - .../src/app/rest/services/historyService.js | 84 - .../src/app/rest/services/languageService.js | 55 - .../app/rest/services/membershipService.js | 349 - .../src/app/rest/services/patchService.js | 55 - .../app/rest/services/permissionService.js | 345 - .../src/app/rest/services/requestService.js | 168 - .../src/app/rest/services/schemaService.js | 228 - .../rest/services/sharingProfileService.js | 166 - .../src/app/rest/services/tunnelService.js | 410 - .../src/app/rest/services/userGroupService.js | 232 - .../src/app/rest/services/userService.js | 278 - .../src/app/rest/types/ActiveConnection.js | 91 - .../src/app/rest/types/ActivityLog.js | 89 - .../frontend/src/app/rest/types/Connection.js | 120 - .../src/app/rest/types/ConnectionGroup.js | 142 - .../app/rest/types/ConnectionHistoryEntry.js | 230 - .../src/app/rest/types/DirectoryPatch.js | 94 - .../app/rest/types/DirectoryPatchOutcome.js | 79 - .../app/rest/types/DirectoryPatchResponse.js | 50 - .../main/frontend/src/app/rest/types/Error.js | 154 - .../main/frontend/src/app/rest/types/Field.js | 186 - .../main/frontend/src/app/rest/types/Form.js | 58 - .../src/app/rest/types/PermissionFlagSet.js | 246 - .../src/app/rest/types/PermissionPatch.js | 91 - .../src/app/rest/types/PermissionSet.js | 826 -- .../frontend/src/app/rest/types/Protocol.js | 119 - .../src/app/rest/types/RelatedObjectPatch.js | 85 - .../src/app/rest/types/SharingProfile.js | 85 - .../src/app/rest/types/TranslatableMessage.js | 63 - .../main/frontend/src/app/rest/types/User.js | 125 - .../src/app/rest/types/UserCredentials.js | 139 - .../frontend/src/app/rest/types/UserGroup.js | 66 - .../src/app/rest/types/UserPasswordUpdate.js | 58 - .../connectionHistoryPlayerController.js | 50 - .../controllers/settingsController.js | 52 - .../guacSettingsConnectionHistory.js | 270 - .../directives/guacSettingsConnections.js | 443 - .../directives/guacSettingsPreferences.js | 269 - .../directives/guacSettingsSessions.js | 416 - .../directives/guacSettingsUserGroups.js | 272 - .../settings/directives/guacSettingsUsers.js | 291 - .../src/app/settings/services/csvService.js | 106 - .../settings/services/preferenceService.js | 223 - .../src/app/settings/settingsModule.js | 32 - .../src/app/settings/styles/buttons.css | 67 - .../app/settings/styles/connection-list.css | 38 - .../app/settings/styles/history-player.css | 188 - .../src/app/settings/styles/history.css | 89 - .../src/app/settings/styles/input-method.css | 23 - .../src/app/settings/styles/mouse-mode.css | 44 - .../src/app/settings/styles/preferences.css | 39 - .../src/app/settings/styles/sessions.css | 31 - .../src/app/settings/styles/settings.css | 71 - .../app/settings/styles/user-group-list.css | 42 - .../src/app/settings/styles/user-list.css | 47 - .../app/settings/templates/connection.html | 16 - .../settings/templates/connectionGroup.html | 10 - .../app/settings/templates/newConnection.html | 4 - .../templates/newConnectionGroup.html | 4 - .../settings/templates/newSharingProfile.html | 4 - .../src/app/settings/templates/settings.html | 21 - .../templates/settingsConnectionHistory.html | 70 - .../settingsConnectionHistoryPlayer.html | 6 - .../templates/settingsConnections.html | 53 - .../templates/settingsPreferences.html | 119 - .../settings/templates/settingsSessions.html | 58 - .../templates/settingsUserGroups.html | 48 - .../app/settings/templates/settingsUsers.html | 60 - .../settings/templates/sharingProfile.html | 10 - .../settings/types/ActiveConnectionWrapper.js | 77 - .../types/ConnectionHistoryEntryWrapper.js | 149 - .../storage/services/localStorageService.js | 145 - .../storage/services/sessionStorageFactory.js | 142 - .../frontend/src/app/storage/storageModule.js | 25 - .../src/app/textInput/directives/guacKey.js | 119 - .../app/textInput/directives/guacTextInput.js | 341 - .../src/app/textInput/styles/textInput.css | 128 - .../src/app/textInput/templates/guacKey.html | 3 - .../textInput/templates/guacTextInput.html | 6 - .../src/app/textInput/textInputModule.js | 23 - .../src/app/touch/directives/guacTouchDrag.js | 185 - .../app/touch/directives/guacTouchPinch.js | 206 - .../frontend/src/app/touch/touchModule.js | 23 - .../src/fonts/carlito/Carlito-Bold.woff | Bin 281212 -> 0 bytes .../src/fonts/carlito/Carlito-Italic.woff | Bin 283500 -> 0 bytes .../src/fonts/carlito/Carlito-Regular.woff | Bin 269832 -> 0 bytes .../main/frontend/src/fonts/carlito/LICENSE | 95 - .../src/images/action-icons/guac-back.svg | 1 - .../images/action-icons/guac-config-dark.svg | 1 - .../src/images/action-icons/guac-config.svg | 1 - .../images/action-icons/guac-file-import.svg | 1 - .../images/action-icons/guac-first-page.svg | 1 - .../images/action-icons/guac-group-add.svg | 1 - .../images/action-icons/guac-hide-pass.svg | 1 - .../images/action-icons/guac-home-dark.svg | 1 - .../src/images/action-icons/guac-home.svg | 1 - .../src/images/action-icons/guac-key.svg | 1 - .../images/action-icons/guac-last-page.svg | 1 - .../images/action-icons/guac-logout-dark.svg | 1 - .../src/images/action-icons/guac-logout.svg | 1 - .../images/action-icons/guac-monitor-add.svg | 1 - .../images/action-icons/guac-next-page.svg | 1 - .../src/images/action-icons/guac-pause.svg | 1 - .../images/action-icons/guac-play-link.svg | 1 - .../src/images/action-icons/guac-play.svg | 1 - .../images/action-icons/guac-prev-page.svg | 1 - .../images/action-icons/guac-show-pass.svg | 1 - .../src/images/action-icons/guac-user-add.svg | 1 - .../action-icons/guac-user-group-add.svg | 1 - .../main/frontend/src/images/arrows/down.svg | 1 - .../main/frontend/src/images/arrows/left.svg | 1 - .../main/frontend/src/images/arrows/right.svg | 1 - .../main/frontend/src/images/arrows/up.svg | 1 - .../src/main/frontend/src/images/checker.svg | 1 - .../main/frontend/src/images/checkmark.svg | 1 - .../frontend/src/images/circle-arrows.svg | 1 - .../src/main/frontend/src/images/cog.svg | 1 - .../src/main/frontend/src/images/drive.svg | 1 - .../src/main/frontend/src/images/file.svg | 1 - .../frontend/src/images/folder-closed.svg | 1 - .../main/frontend/src/images/folder-open.svg | 1 - .../main/frontend/src/images/folder-up.svg | 1 - .../src/images/group-icons/guac-closed.svg | 1 - .../src/images/group-icons/guac-open.svg | 1 - .../frontend/src/images/guac-tricolor.svg | 1 - .../src/main/frontend/src/images/lock.svg | 1 - .../src/main/frontend/src/images/logo-144.png | Bin 9167 -> 0 bytes .../src/main/frontend/src/images/logo-64.png | Bin 5082 -> 0 bytes .../main/frontend/src/images/magnifier.svg | 1 - .../main/frontend/src/images/mouse/blank.cur | Bin 326 -> 0 bytes .../main/frontend/src/images/mouse/blank.gif | Bin 71 -> 0 bytes .../main/frontend/src/images/mouse/dot.gif | Bin 72 -> 0 bytes .../src/main/frontend/src/images/plus.svg | 1 - .../src/main/frontend/src/images/progress.svg | 1 - .../images/protocol-icons/guac-monitor.svg | 1 - .../src/images/protocol-icons/guac-plug.svg | 1 - .../src/images/protocol-icons/guac-text.svg | 1 - .../src/main/frontend/src/images/question.svg | 1 - .../src/images/settings/tablet-keys.svg | 1 - .../frontend/src/images/settings/touchpad.svg | 1 - .../src/images/settings/touchscreen.svg | 1 - .../frontend/src/images/settings/zoom-in.svg | 1 - .../frontend/src/images/settings/zoom-out.svg | 1 - .../main/frontend/src/images/share-white.svg | 1 - .../src/main/frontend/src/images/share.svg | 1 - .../src/images/user-icons/guac-user-group.svg | 1 - .../src/images/user-icons/guac-user-white.svg | 1 - .../src/images/user-icons/guac-user.svg | 1 - .../frontend/src/images/warning-white.svg | 1 - .../src/main/frontend/src/images/warning.svg | 1 - .../src/main/frontend/src/images/x-red.svg | 1 - guacamole/src/main/frontend/src/images/x.svg | 1 - guacamole/src/main/frontend/src/index.html | 127 - .../frontend/src/layouts/de-de-qwertz.json | 449 - .../frontend/src/layouts/en-us-qwerty.json | 399 - .../frontend/src/layouts/es-es-qwerty.json | 455 - .../frontend/src/layouts/fr-fr-azerty.json | 446 - .../frontend/src/layouts/it-it-qwerty.json | 452 - .../frontend/src/layouts/nl-nl-qwerty.json | 464 - .../frontend/src/layouts/ru-ru-qwerty.json | 546 - .../main/frontend/src/relocateParameters.js | 128 - .../main/frontend/src/translations/ca.json | 989 -- .../main/frontend/src/translations/cs.json | 1142 -- .../main/frontend/src/translations/de.json | 1133 -- .../main/frontend/src/translations/en.json | 1209 -- .../main/frontend/src/translations/es.json | 1022 -- .../main/frontend/src/translations/fr.json | 1180 -- .../main/frontend/src/translations/it.json | 604 - .../main/frontend/src/translations/ja.json | 846 -- .../main/frontend/src/translations/ko.json | 997 -- .../main/frontend/src/translations/nl.json | 692 - .../main/frontend/src/translations/no.json | 673 - .../main/frontend/src/translations/pl.json | 1058 -- .../main/frontend/src/translations/pt.json | 1017 -- .../main/frontend/src/translations/ru.json | 844 -- .../main/frontend/src/translations/zh.json | 1139 -- .../main/frontend/src/verifyCachedVersion.js | 85 - guacamole/src/main/frontend/webpack.config.js | 194 - 484 files changed, 77570 deletions(-) delete mode 100644 guacamole/src/main/frontend/package-lock.json delete mode 100644 guacamole/src/main/frontend/package.json delete mode 100644 guacamole/src/main/frontend/plugins/dependency-list-plugin.js delete mode 100644 guacamole/src/main/frontend/src/angular-module-shim.js delete mode 100644 guacamole/src/main/frontend/src/app/auth/authModule.js delete mode 100644 guacamole/src/main/frontend/src/app/auth/service/authenticationService.js delete mode 100644 guacamole/src/main/frontend/src/app/auth/types/AuthenticationResult.js delete mode 100644 guacamole/src/main/frontend/src/app/client/clientModule.js delete mode 100644 guacamole/src/main/frontend/src/app/client/controllers/clientController.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacClient.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacClientNotification.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacClientPanel.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacClientUserCount.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacClientZoom.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacFileBrowser.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacFileTransfer.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacFileTransferManager.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacThumbnail.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacTiledClients.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacTiledThumbnails.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacViewport.js delete mode 100644 guacamole/src/main/frontend/src/app/client/directives/guacZoomCtrl.js delete mode 100644 guacamole/src/main/frontend/src/app/client/services/guacAudio.js delete mode 100644 guacamole/src/main/frontend/src/app/client/services/guacClientManager.js delete mode 100644 guacamole/src/main/frontend/src/app/client/services/guacImage.js delete mode 100644 guacamole/src/main/frontend/src/app/client/services/guacTranslate.js delete mode 100644 guacamole/src/main/frontend/src/app/client/services/guacVideo.js delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/client.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/connection-select-menu.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/connection-warning.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/display.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/file-browser.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/file-transfer-dialog.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/filesystem-menu.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/guac-menu.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/keyboard.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/menu.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/notification.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/share-menu.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/thumbnail-display.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/tiled-client-grid.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/transfer-manager.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/transfer.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/viewport.css delete mode 100644 guacamole/src/main/frontend/src/app/client/styles/zoom.css delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/client.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/connection.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/connectionGroup.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/file.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacClient.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacClientNotification.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacClientPanel.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacClientUserCount.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacClientZoom.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacFileBrowser.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacFileTransfer.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacFileTransferManager.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacThumbnail.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacTiledClients.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacTiledThumbnails.html delete mode 100644 guacamole/src/main/frontend/src/app/client/templates/guacViewport.html delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ClientProperties.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedArgument.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedClient.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedClientGroup.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedClientState.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedClientThumbnail.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedDisplay.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedFileTransferState.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedFileUpload.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedFilesystem.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/ManagedShareLink.js delete mode 100644 guacamole/src/main/frontend/src/app/client/types/TranslationResult.js delete mode 100644 guacamole/src/main/frontend/src/app/clipboard/clipboardModule.js delete mode 100644 guacamole/src/main/frontend/src/app/clipboard/directives/guacClipboard.js delete mode 100644 guacamole/src/main/frontend/src/app/clipboard/services/clipboardService.js delete mode 100644 guacamole/src/main/frontend/src/app/clipboard/styles/clipboard.css delete mode 100644 guacamole/src/main/frontend/src/app/clipboard/templates/guacClipboard.html delete mode 100644 guacamole/src/main/frontend/src/app/clipboard/types/ClipboardData.js delete mode 100644 guacamole/src/main/frontend/src/app/element/directives/guacClick.js delete mode 100644 guacamole/src/main/frontend/src/app/element/directives/guacDrop.js delete mode 100644 guacamole/src/main/frontend/src/app/element/directives/guacFocus.js delete mode 100644 guacamole/src/main/frontend/src/app/element/directives/guacMarker.js delete mode 100644 guacamole/src/main/frontend/src/app/element/directives/guacResize.js delete mode 100644 guacamole/src/main/frontend/src/app/element/directives/guacScroll.js delete mode 100644 guacamole/src/main/frontend/src/app/element/directives/guacUpload.js delete mode 100644 guacamole/src/main/frontend/src/app/element/elementModule.js delete mode 100644 guacamole/src/main/frontend/src/app/element/styles/resize-sensor.css delete mode 100644 guacamole/src/main/frontend/src/app/element/templates/blank.html delete mode 100644 guacamole/src/main/frontend/src/app/element/types/Marker.js delete mode 100644 guacamole/src/main/frontend/src/app/element/types/ScrollState.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/checkboxFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/dateFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/languageFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/numberFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/passwordFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/redirectFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/selectFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/terminalColorSchemeFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/textFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/timeFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/controllers/timeZoneFieldController.js delete mode 100644 guacamole/src/main/frontend/src/app/form/directives/form.js delete mode 100644 guacamole/src/main/frontend/src/app/form/directives/formField.js delete mode 100644 guacamole/src/main/frontend/src/app/form/directives/guacInputColor.js delete mode 100644 guacamole/src/main/frontend/src/app/form/directives/guacLenientDate.js delete mode 100644 guacamole/src/main/frontend/src/app/form/directives/guacLenientTime.js delete mode 100644 guacamole/src/main/frontend/src/app/form/formModule.js delete mode 100644 guacamole/src/main/frontend/src/app/form/services/colorPickerService.js delete mode 100644 guacamole/src/main/frontend/src/app/form/services/formService.js delete mode 100644 guacamole/src/main/frontend/src/app/form/styles/form-field.css delete mode 100644 guacamole/src/main/frontend/src/app/form/styles/form.css delete mode 100644 guacamole/src/main/frontend/src/app/form/styles/redirect-field.css delete mode 100644 guacamole/src/main/frontend/src/app/form/styles/terminal-color-scheme-field.css delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/checkboxField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/dateField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/emailField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/form.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/formField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/guacInputColor.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/languageField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/numberField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/passwordField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/redirectField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/selectField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/terminalColorSchemeField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/textAreaField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/textField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/timeField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/timeZoneField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/templates/usernameField.html delete mode 100644 guacamole/src/main/frontend/src/app/form/types/ColorScheme.js delete mode 100644 guacamole/src/main/frontend/src/app/form/types/FieldType.js delete mode 100644 guacamole/src/main/frontend/src/app/groupList/directives/guacGroupList.js delete mode 100644 guacamole/src/main/frontend/src/app/groupList/directives/guacGroupListFilter.js delete mode 100644 guacamole/src/main/frontend/src/app/groupList/groupListModule.js delete mode 100644 guacamole/src/main/frontend/src/app/groupList/templates/guacGroupList.html delete mode 100644 guacamole/src/main/frontend/src/app/groupList/templates/guacGroupListFilter.html delete mode 100644 guacamole/src/main/frontend/src/app/groupList/types/GroupListItem.js delete mode 100644 guacamole/src/main/frontend/src/app/history/historyModule.js delete mode 100644 guacamole/src/main/frontend/src/app/history/services/guacHistory.js delete mode 100644 guacamole/src/main/frontend/src/app/history/types/HistoryEntry.js delete mode 100644 guacamole/src/main/frontend/src/app/home/controllers/homeController.js delete mode 100644 guacamole/src/main/frontend/src/app/home/directives/guacRecentConnections.js delete mode 100644 guacamole/src/main/frontend/src/app/home/homeModule.js delete mode 100644 guacamole/src/main/frontend/src/app/home/styles/home.css delete mode 100644 guacamole/src/main/frontend/src/app/home/templates/connection.html delete mode 100644 guacamole/src/main/frontend/src/app/home/templates/connectionGroup.html delete mode 100644 guacamole/src/main/frontend/src/app/home/templates/guacRecentConnections.html delete mode 100644 guacamole/src/main/frontend/src/app/home/templates/home.html delete mode 100644 guacamole/src/main/frontend/src/app/home/types/ActiveConnection.js delete mode 100644 guacamole/src/main/frontend/src/app/home/types/RecentConnection.js delete mode 100644 guacamole/src/main/frontend/src/app/import/controllers/importConnectionsController.js delete mode 100644 guacamole/src/main/frontend/src/app/import/directives/connectionImportErrors.js delete mode 100644 guacamole/src/main/frontend/src/app/import/importModule.js delete mode 100644 guacamole/src/main/frontend/src/app/import/services/connectionCSVService.js delete mode 100644 guacamole/src/main/frontend/src/app/import/services/connectionParseService.js delete mode 100644 guacamole/src/main/frontend/src/app/import/styles/help.css delete mode 100644 guacamole/src/main/frontend/src/app/import/styles/import.css delete mode 100644 guacamole/src/main/frontend/src/app/import/templates/connectionErrors.html delete mode 100644 guacamole/src/main/frontend/src/app/import/templates/connectionImport.html delete mode 100644 guacamole/src/main/frontend/src/app/import/templates/connectionImportFileHelp.html delete mode 100644 guacamole/src/main/frontend/src/app/import/types/ConnectionImportConfig.js delete mode 100644 guacamole/src/main/frontend/src/app/import/types/DisplayErrorList.js delete mode 100644 guacamole/src/main/frontend/src/app/import/types/ImportConnection.js delete mode 100644 guacamole/src/main/frontend/src/app/import/types/ImportConnectionError.js delete mode 100644 guacamole/src/main/frontend/src/app/import/types/ParseError.js delete mode 100644 guacamole/src/main/frontend/src/app/import/types/ParseResult.js delete mode 100644 guacamole/src/main/frontend/src/app/index/config/httpDefaults.js delete mode 100644 guacamole/src/main/frontend/src/app/index/config/indexRouteConfig.js delete mode 100644 guacamole/src/main/frontend/src/app/index/config/indexTranslationConfig.js delete mode 100644 guacamole/src/main/frontend/src/app/index/config/templateRequestDecorator.js delete mode 100644 guacamole/src/main/frontend/src/app/index/controllers/indexController.js delete mode 100644 guacamole/src/main/frontend/src/app/index/filters/arrayFilter.js delete mode 100644 guacamole/src/main/frontend/src/app/index/filters/escapeFilter.js delete mode 100644 guacamole/src/main/frontend/src/app/index/filters/resolveFilter.js delete mode 100644 guacamole/src/main/frontend/src/app/index/indexModule.js delete mode 100644 guacamole/src/main/frontend/src/app/index/services/iconService.js delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/animation.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/automatic-login-rejected.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/buttons.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/cloak.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/fatal-page-error.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/font-carlito.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/headers.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/input.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/lists.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/loading.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/logged-out.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/other-connections.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/sorted-tables.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/status.css delete mode 100644 guacamole/src/main/frontend/src/app/index/styles/ui.css delete mode 100644 guacamole/src/main/frontend/src/app/list/directives/guacFilter.js delete mode 100644 guacamole/src/main/frontend/src/app/list/directives/guacPager.js delete mode 100644 guacamole/src/main/frontend/src/app/list/directives/guacSortOrder.js delete mode 100644 guacamole/src/main/frontend/src/app/list/directives/guacUserItem.js delete mode 100644 guacamole/src/main/frontend/src/app/list/listModule.js delete mode 100644 guacamole/src/main/frontend/src/app/list/styles/filter.css delete mode 100644 guacamole/src/main/frontend/src/app/list/styles/pager.css delete mode 100644 guacamole/src/main/frontend/src/app/list/styles/user-item.css delete mode 100644 guacamole/src/main/frontend/src/app/list/templates/guacFilter.html delete mode 100644 guacamole/src/main/frontend/src/app/list/templates/guacPager.html delete mode 100644 guacamole/src/main/frontend/src/app/list/templates/guacUserItem.html delete mode 100644 guacamole/src/main/frontend/src/app/list/types/FilterPattern.js delete mode 100644 guacamole/src/main/frontend/src/app/list/types/FilterToken.js delete mode 100644 guacamole/src/main/frontend/src/app/list/types/IPv4Network.js delete mode 100644 guacamole/src/main/frontend/src/app/list/types/IPv6Network.js delete mode 100644 guacamole/src/main/frontend/src/app/list/types/SortOrder.js delete mode 100644 guacamole/src/main/frontend/src/app/locale/localeModule.js delete mode 100644 guacamole/src/main/frontend/src/app/locale/services/translationLoader.js delete mode 100644 guacamole/src/main/frontend/src/app/locale/services/translationStringService.js delete mode 100644 guacamole/src/main/frontend/src/app/login/directives/login.js delete mode 100644 guacamole/src/main/frontend/src/app/login/loginModule.js delete mode 100644 guacamole/src/main/frontend/src/app/login/styles/animation.css delete mode 100644 guacamole/src/main/frontend/src/app/login/styles/dialog.css delete mode 100644 guacamole/src/main/frontend/src/app/login/styles/input.css delete mode 100644 guacamole/src/main/frontend/src/app/login/styles/login.css delete mode 100644 guacamole/src/main/frontend/src/app/login/templates/login.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionController.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionGroupController.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/controllers/manageSharingProfileController.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/controllers/manageUserController.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/controllers/manageUserGroupController.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/directives/connectionPermissionEditor.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/directives/dataSourceTabs.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/directives/identifierSetEditor.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/directives/locationChooser.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/directives/managementButtons.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/directives/systemPermissionEditor.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/manageModule.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/styles/attributes.css delete mode 100644 guacamole/src/main/frontend/src/app/manage/styles/connection-parameter.css delete mode 100644 guacamole/src/main/frontend/src/app/manage/styles/forms.css delete mode 100644 guacamole/src/main/frontend/src/app/manage/styles/locationChooser.css delete mode 100644 guacamole/src/main/frontend/src/app/manage/styles/manage-user-group.css delete mode 100644 guacamole/src/main/frontend/src/app/manage/styles/manage-user.css delete mode 100644 guacamole/src/main/frontend/src/app/manage/styles/related-objects.css delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/connectionGroupPermission.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/connectionPermission.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/connectionPermissionEditor.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/dataSourceTabs.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/identifierSetEditor.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/locationChooser.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/locationChooserConnectionGroup.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/manageConnection.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/manageConnectionGroup.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/manageSharingProfile.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/manageUser.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/manageUserGroup.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/managementButtons.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/sharingProfilePermission.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/templates/systemPermissionEditor.html delete mode 100644 guacamole/src/main/frontend/src/app/manage/types/HistoryEntryWrapper.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/types/ManageableUser.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/types/ManageableUserGroup.js delete mode 100644 guacamole/src/main/frontend/src/app/manage/types/ManagementPermissions.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/directives/guacMenu.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/directives/guacPageList.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/directives/guacSectionTabs.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/directives/guacUserMenu.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/navigationModule.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/services/userPageService.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/styles/menu.css delete mode 100644 guacamole/src/main/frontend/src/app/navigation/styles/tabs.css delete mode 100644 guacamole/src/main/frontend/src/app/navigation/styles/user-menu.css delete mode 100644 guacamole/src/main/frontend/src/app/navigation/templates/guacMenu.html delete mode 100644 guacamole/src/main/frontend/src/app/navigation/templates/guacPageList.html delete mode 100644 guacamole/src/main/frontend/src/app/navigation/templates/guacSectionTabs.html delete mode 100644 guacamole/src/main/frontend/src/app/navigation/templates/guacUserMenu.html delete mode 100644 guacamole/src/main/frontend/src/app/navigation/types/ClientIdentifier.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/types/MenuAction.js delete mode 100644 guacamole/src/main/frontend/src/app/navigation/types/PageDefinition.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/directives/guacModal.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/directives/guacNotification.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/notificationModule.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/services/guacNotification.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/styles/modal.css delete mode 100644 guacamole/src/main/frontend/src/app/notification/styles/notification.css delete mode 100644 guacamole/src/main/frontend/src/app/notification/templates/guacModal.html delete mode 100644 guacamole/src/main/frontend/src/app/notification/templates/guacNotification.html delete mode 100644 guacamole/src/main/frontend/src/app/notification/types/Notification.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/types/NotificationAction.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/types/NotificationCountdown.js delete mode 100644 guacamole/src/main/frontend/src/app/notification/types/NotificationProgress.js delete mode 100644 guacamole/src/main/frontend/src/app/osk/directives/guacOsk.js delete mode 100644 guacamole/src/main/frontend/src/app/osk/oskModule.js delete mode 100644 guacamole/src/main/frontend/src/app/osk/styles/osk.css delete mode 100644 guacamole/src/main/frontend/src/app/osk/templates/guacOsk.html delete mode 100644 guacamole/src/main/frontend/src/app/player/directives/player.js delete mode 100644 guacamole/src/main/frontend/src/app/player/directives/playerDisplay.js delete mode 100644 guacamole/src/main/frontend/src/app/player/directives/progressIndicator.js delete mode 100644 guacamole/src/main/frontend/src/app/player/playerModule.js delete mode 100644 guacamole/src/main/frontend/src/app/player/styles/player.css delete mode 100644 guacamole/src/main/frontend/src/app/player/styles/playerDisplay.css delete mode 100644 guacamole/src/main/frontend/src/app/player/styles/progressIndicator.css delete mode 100644 guacamole/src/main/frontend/src/app/player/styles/seek.css delete mode 100644 guacamole/src/main/frontend/src/app/player/templates/player.html delete mode 100644 guacamole/src/main/frontend/src/app/player/templates/playerDisplay.html delete mode 100644 guacamole/src/main/frontend/src/app/player/templates/progressIndicator.html delete mode 100644 guacamole/src/main/frontend/src/app/rest/restModule.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/activeConnectionService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/cacheService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/connectionGroupService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/connectionService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/dataSourceService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/historyService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/languageService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/membershipService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/patchService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/permissionService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/requestService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/schemaService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/sharingProfileService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/tunnelService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/userGroupService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/services/userService.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/ActiveConnection.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/ActivityLog.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/Connection.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/ConnectionGroup.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/ConnectionHistoryEntry.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/DirectoryPatch.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchOutcome.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchResponse.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/Error.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/Field.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/Form.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/PermissionFlagSet.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/PermissionPatch.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/PermissionSet.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/Protocol.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/RelatedObjectPatch.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/SharingProfile.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/TranslatableMessage.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/User.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/UserCredentials.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/UserGroup.js delete mode 100644 guacamole/src/main/frontend/src/app/rest/types/UserPasswordUpdate.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/controllers/connectionHistoryPlayerController.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/controllers/settingsController.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnectionHistory.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnections.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/directives/guacSettingsPreferences.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/directives/guacSettingsSessions.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUserGroups.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUsers.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/services/csvService.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/services/preferenceService.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/settingsModule.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/buttons.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/connection-list.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/history-player.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/history.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/input-method.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/mouse-mode.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/preferences.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/sessions.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/settings.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/user-group-list.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/styles/user-list.css delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/connection.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/connectionGroup.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/newConnection.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/newConnectionGroup.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/newSharingProfile.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settings.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistory.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistoryPlayer.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settingsConnections.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settingsPreferences.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settingsSessions.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settingsUserGroups.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/settingsUsers.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/templates/sharingProfile.html delete mode 100644 guacamole/src/main/frontend/src/app/settings/types/ActiveConnectionWrapper.js delete mode 100644 guacamole/src/main/frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.js delete mode 100644 guacamole/src/main/frontend/src/app/storage/services/localStorageService.js delete mode 100644 guacamole/src/main/frontend/src/app/storage/services/sessionStorageFactory.js delete mode 100644 guacamole/src/main/frontend/src/app/storage/storageModule.js delete mode 100644 guacamole/src/main/frontend/src/app/textInput/directives/guacKey.js delete mode 100644 guacamole/src/main/frontend/src/app/textInput/directives/guacTextInput.js delete mode 100644 guacamole/src/main/frontend/src/app/textInput/styles/textInput.css delete mode 100644 guacamole/src/main/frontend/src/app/textInput/templates/guacKey.html delete mode 100644 guacamole/src/main/frontend/src/app/textInput/templates/guacTextInput.html delete mode 100644 guacamole/src/main/frontend/src/app/textInput/textInputModule.js delete mode 100644 guacamole/src/main/frontend/src/app/touch/directives/guacTouchDrag.js delete mode 100644 guacamole/src/main/frontend/src/app/touch/directives/guacTouchPinch.js delete mode 100644 guacamole/src/main/frontend/src/app/touch/touchModule.js delete mode 100644 guacamole/src/main/frontend/src/fonts/carlito/Carlito-Bold.woff delete mode 100644 guacamole/src/main/frontend/src/fonts/carlito/Carlito-Italic.woff delete mode 100644 guacamole/src/main/frontend/src/fonts/carlito/Carlito-Regular.woff delete mode 100644 guacamole/src/main/frontend/src/fonts/carlito/LICENSE delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-back.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-config-dark.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-config.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-file-import.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-first-page.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-group-add.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-hide-pass.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-home-dark.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-home.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-key.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-last-page.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-logout-dark.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-logout.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-monitor-add.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-next-page.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-pause.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-play-link.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-play.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-prev-page.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-show-pass.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-user-add.svg delete mode 100644 guacamole/src/main/frontend/src/images/action-icons/guac-user-group-add.svg delete mode 100644 guacamole/src/main/frontend/src/images/arrows/down.svg delete mode 100644 guacamole/src/main/frontend/src/images/arrows/left.svg delete mode 100644 guacamole/src/main/frontend/src/images/arrows/right.svg delete mode 100644 guacamole/src/main/frontend/src/images/arrows/up.svg delete mode 100644 guacamole/src/main/frontend/src/images/checker.svg delete mode 100644 guacamole/src/main/frontend/src/images/checkmark.svg delete mode 100644 guacamole/src/main/frontend/src/images/circle-arrows.svg delete mode 100644 guacamole/src/main/frontend/src/images/cog.svg delete mode 100644 guacamole/src/main/frontend/src/images/drive.svg delete mode 100644 guacamole/src/main/frontend/src/images/file.svg delete mode 100644 guacamole/src/main/frontend/src/images/folder-closed.svg delete mode 100644 guacamole/src/main/frontend/src/images/folder-open.svg delete mode 100644 guacamole/src/main/frontend/src/images/folder-up.svg delete mode 100644 guacamole/src/main/frontend/src/images/group-icons/guac-closed.svg delete mode 100644 guacamole/src/main/frontend/src/images/group-icons/guac-open.svg delete mode 100644 guacamole/src/main/frontend/src/images/guac-tricolor.svg delete mode 100644 guacamole/src/main/frontend/src/images/lock.svg delete mode 100644 guacamole/src/main/frontend/src/images/logo-144.png delete mode 100644 guacamole/src/main/frontend/src/images/logo-64.png delete mode 100644 guacamole/src/main/frontend/src/images/magnifier.svg delete mode 100644 guacamole/src/main/frontend/src/images/mouse/blank.cur delete mode 100644 guacamole/src/main/frontend/src/images/mouse/blank.gif delete mode 100644 guacamole/src/main/frontend/src/images/mouse/dot.gif delete mode 100644 guacamole/src/main/frontend/src/images/plus.svg delete mode 100644 guacamole/src/main/frontend/src/images/progress.svg delete mode 100644 guacamole/src/main/frontend/src/images/protocol-icons/guac-monitor.svg delete mode 100644 guacamole/src/main/frontend/src/images/protocol-icons/guac-plug.svg delete mode 100644 guacamole/src/main/frontend/src/images/protocol-icons/guac-text.svg delete mode 100644 guacamole/src/main/frontend/src/images/question.svg delete mode 100644 guacamole/src/main/frontend/src/images/settings/tablet-keys.svg delete mode 100644 guacamole/src/main/frontend/src/images/settings/touchpad.svg delete mode 100644 guacamole/src/main/frontend/src/images/settings/touchscreen.svg delete mode 100644 guacamole/src/main/frontend/src/images/settings/zoom-in.svg delete mode 100644 guacamole/src/main/frontend/src/images/settings/zoom-out.svg delete mode 100644 guacamole/src/main/frontend/src/images/share-white.svg delete mode 100644 guacamole/src/main/frontend/src/images/share.svg delete mode 100644 guacamole/src/main/frontend/src/images/user-icons/guac-user-group.svg delete mode 100644 guacamole/src/main/frontend/src/images/user-icons/guac-user-white.svg delete mode 100644 guacamole/src/main/frontend/src/images/user-icons/guac-user.svg delete mode 100644 guacamole/src/main/frontend/src/images/warning-white.svg delete mode 100644 guacamole/src/main/frontend/src/images/warning.svg delete mode 100644 guacamole/src/main/frontend/src/images/x-red.svg delete mode 100644 guacamole/src/main/frontend/src/images/x.svg delete mode 100644 guacamole/src/main/frontend/src/index.html delete mode 100644 guacamole/src/main/frontend/src/layouts/de-de-qwertz.json delete mode 100644 guacamole/src/main/frontend/src/layouts/en-us-qwerty.json delete mode 100644 guacamole/src/main/frontend/src/layouts/es-es-qwerty.json delete mode 100644 guacamole/src/main/frontend/src/layouts/fr-fr-azerty.json delete mode 100644 guacamole/src/main/frontend/src/layouts/it-it-qwerty.json delete mode 100644 guacamole/src/main/frontend/src/layouts/nl-nl-qwerty.json delete mode 100644 guacamole/src/main/frontend/src/layouts/ru-ru-qwerty.json delete mode 100644 guacamole/src/main/frontend/src/relocateParameters.js delete mode 100644 guacamole/src/main/frontend/src/translations/ca.json delete mode 100644 guacamole/src/main/frontend/src/translations/cs.json delete mode 100644 guacamole/src/main/frontend/src/translations/de.json delete mode 100644 guacamole/src/main/frontend/src/translations/en.json delete mode 100644 guacamole/src/main/frontend/src/translations/es.json delete mode 100644 guacamole/src/main/frontend/src/translations/fr.json delete mode 100644 guacamole/src/main/frontend/src/translations/it.json delete mode 100644 guacamole/src/main/frontend/src/translations/ja.json delete mode 100644 guacamole/src/main/frontend/src/translations/ko.json delete mode 100644 guacamole/src/main/frontend/src/translations/nl.json delete mode 100644 guacamole/src/main/frontend/src/translations/no.json delete mode 100644 guacamole/src/main/frontend/src/translations/pl.json delete mode 100644 guacamole/src/main/frontend/src/translations/pt.json delete mode 100644 guacamole/src/main/frontend/src/translations/ru.json delete mode 100644 guacamole/src/main/frontend/src/translations/zh.json delete mode 100644 guacamole/src/main/frontend/src/verifyCachedVersion.js delete mode 100644 guacamole/src/main/frontend/webpack.config.js diff --git a/guacamole/src/main/frontend/package-lock.json b/guacamole/src/main/frontend/package-lock.json deleted file mode 100644 index 7ad1e32ce7..0000000000 --- a/guacamole/src/main/frontend/package-lock.json +++ /dev/null @@ -1,10612 +0,0 @@ -{ - "name": "frontend", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "frontend", - "dependencies": { - "@simonwep/pickr": "^1.8.2", - "angular": "^1.8.3", - "angular-route": "^1.8.3", - "angular-templatecache-webpack-plugin": "^1.0.1", - "angular-translate": "^2.19.1", - "angular-translate-interpolation-messageformat": "^2.19.1", - "angular-translate-loader-static-files": "^2.19.1", - "blob-polyfill": "^9.0.20240710", - "csv": "^6.3.9", - "d3-path": "^3.1.0", - "d3-shape": "^3.2.0", - "datalist-polyfill": "^1.25.1", - "file-saver": "^2.0.5", - "fuzzysort": "^3.0.2", - "jquery": "^3.7.1", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "yaml": "^2.5.0" - }, - "devDependencies": { - "@babel/core": "^7.24.7", - "@babel/preset-env": "^7.24.7", - "babel-loader": "^8.3.0", - "clean-webpack-plugin": "^4.0.0", - "closure-webpack-plugin": "^2.6.1", - "copy-webpack-plugin": "^5.1.2", - "css-loader": "^5.2.7", - "css-minimizer-webpack-plugin": "^1.3.0", - "exports-loader": "^1.1.1", - "find-package-json": "^1.2.0", - "google-closure-compiler": "20240317.0.0", - "html-webpack-plugin": "^4.5.2", - "mini-css-extract-plugin": "^1.6.2", - "webpack": "^4.47.0", - "webpack-cli": "^4.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/generator/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-wrap-function": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "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.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@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-transform-for-of": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@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-transform-member-expression-literals": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@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-transform-numeric-separator": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@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-transform-optional-chaining": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.24.7", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/types": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@simonwep/pickr": { - "version": "1.8.2", - "license": "MIT", - "dependencies": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.15.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tapable": { - "version": "1.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uglify-js": { - "version": "3.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/@types/webpack": { - "version": "4.41.33", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-sources": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "license": "ISC" - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "license": "Apache-2.0" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/acorn": { - "version": "8.8.2", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "license": "MIT", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/angular": { - "version": "1.8.3", - "license": "MIT" - }, - "node_modules/angular-route": { - "version": "1.8.3", - "license": "MIT" - }, - "node_modules/angular-templatecache-webpack-plugin": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "fs": "0.0.1-security", - "glob": "^7.1.6", - "glob-parent": "^5.1.1", - "jsesc": "^3.0.2", - "lodash.template": "^4.5.0", - "path": "^0.12.7", - "schema-utils": "^1.0.0" - }, - "peerDependencies": { - "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" - } - }, - "node_modules/angular-translate": { - "version": "2.19.1", - "license": "MIT", - "dependencies": { - "angular": "^1.8.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/angular-translate-interpolation-messageformat": { - "version": "2.19.1", - "license": "MIT", - "dependencies": { - "angular-translate": "~2.19.1", - "messageformat": "~1.0.2" - } - }, - "node_modules/angular-translate-loader-static-files": { - "version": "2.19.1", - "license": "MIT", - "dependencies": { - "angular-translate": "~2.19.1" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/anymatch": { - "version": "3.1.3", - "devOptional": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "license": "MIT" - }, - "node_modules/assert": { - "version": "1.5.0", - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "license": "ISC" - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "license": "MIT", - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "optional": true - }, - "node_modules/atob": { - "version": "2.1.2", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-loader/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base": { - "version": "0.11.2", - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "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/big.js": { - "version": "5.2.2", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "license": "MIT", - "optional": 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==", - "license": "MIT", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/blob-polyfill": { - "version": "9.0.20240710", - "resolved": "https://registry.npmjs.org/blob-polyfill/-/blob-polyfill-9.0.20240710.tgz", - "integrity": "sha512-DPUO/EjNANCgSVg0geTy1vmUpu5hhp9tV2F7xUSTUd1jwe4XpwupGB+lt5PhVUqpqAk+zK1etqp6Pl/HVf71Ug==" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "license": "MIT" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", - "license": "ISC", - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/browserify-sign/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "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", - "license": "MIT", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.23.1", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/cacache": { - "version": "12.0.4", - "license": "ISC", - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001632", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "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/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "optional": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/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==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/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==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "license": "ISC" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "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", - "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", - "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", - "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", - "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", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css": { - "version": "4.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/clean-webpack-plugin": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "del": "^4.1.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": ">=4.0.0 <6.0.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/closure-webpack-plugin": { - "version": "2.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "8.x", - "acorn-walk": "^8.2.0", - "schema-utils": "1.x", - "unquoted-property-validator": "^1.0.2", - "webpack-sources": "1.x" - }, - "engines": { - "node": ">= 6.9.0 || >= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "google-closure-compiler": ">=20200830.0.0", - "webpack": "4.x" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "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/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.19", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cacache": "^12.0.3", - "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "normalize-path": "^3.0.0", - "p-limit": "^2.2.1", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "3.30.0", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.37.1", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "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", - "license": "MIT", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - }, - "engines": { - "node": ">4" - } - }, - "node_modules/css-declaration-sorter/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/css-declaration-sorter/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-loader": { - "version": "5.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "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": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-loader/node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/css-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cacache": "^15.0.5", - "cssnano": "^4.1.10", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.3.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/cacache": { - "version": "15.3.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-minimizer-webpack-plugin/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/css-minimizer-webpack-plugin/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/p-locate/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/css-minimizer-webpack-plugin/node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/serialize-javascript": { - "version": "5.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ssri": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/css-select": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "4.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/cssnano-preset-default/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/cssnano-util-raw-cache/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/cssnano/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/csv": { - "version": "6.3.9", - "license": "MIT", - "dependencies": { - "csv-generate": "^4.4.1", - "csv-parse": "^5.5.6", - "csv-stringify": "^6.5.0", - "stream-transform": "^3.3.2" - }, - "engines": { - "node": ">= 0.1.90" - } - }, - "node_modules/csv-generate": { - "version": "4.4.1", - "license": "MIT" - }, - "node_modules/csv-parse": { - "version": "5.5.6", - "license": "MIT" - }, - "node_modules/csv-stringify": { - "version": "6.5.0", - "license": "MIT" - }, - "node_modules/cyclist": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/d3-path": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "license": "ISC", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/datalist-polyfill": { - "version": "1.25.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "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", - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "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/domain-browser": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "4.3.1", - "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/domutils": { - "version": "2.8.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/dot-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexify": { - "version": "3.7.1", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.798", - "dev": true, - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "license": "MIT", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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/escalade": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "4.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "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", - "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", - "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", - "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", - "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", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exports-loader": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/exports-loader/node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/exports-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/exports-loader/node_modules/schema-utils": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "license": "ISC" - }, - "node_modules/file-saver": { - "version": "2.0.5", - "license": "MIT" - }, - "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==", - "license": "MIT", - "optional": true - }, - "node_modules/fill-range": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-package-json": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs": { - "version": "0.0.1-security", - "license": "ISC" - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fuzzysort": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.0.2.tgz", - "integrity": "sha512-ZyahVgxvckB1Qosn7YGWLDJJp2XlyaQ2WmZeI+d0AzW0AMqVYnz5N89G6KAKa6m/LOtv+kzJn4lhDF/yVg11Cg==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/google-closure-compiler": { - "version": "20240317.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "chalk": "4.x", - "google-closure-compiler-java": "^20240317.0.0", - "minimist": "1.x", - "vinyl": "2.x", - "vinyl-sourcemaps-apply": "^0.2.0" - }, - "bin": { - "google-closure-compiler": "cli.js" - }, - "engines": { - "node": ">=10" - }, - "optionalDependencies": { - "google-closure-compiler-linux": "^20240317.0.0", - "google-closure-compiler-osx": "^20240317.0.0", - "google-closure-compiler-windows": "^20240317.0.0" - } - }, - "node_modules/google-closure-compiler-java": { - "version": "20240317.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/google-closure-compiler-linux": { - "version": "20240317.0.0", - "cpu": [ - "x32", - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/gopd": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "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", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-webpack-plugin": { - "version": "4.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "engines": { - "node": ">=6.9" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "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": "BSD-3-Clause" - }, - "node_modules/iferr": { - "version": "0.1.5", - "license": "MIT" - }, - "node_modules/ignore": { - "version": "3.3.10", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "license": "MIT", - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "license": "MIT", - "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/is-directory": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jquery": { - "version": "3.7.1", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/json5": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jstz": { - "version": "2.1.1", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "license": "MIT", - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "1.4.2", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "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/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "license": "MIT", - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "license": "MIT", - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lower-case": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/make-plural": { - "version": "3.0.6", - "license": "ISC", - "bin": { - "make-plural": "bin/make-plural" - }, - "optionalDependencies": { - "minimist": "^1.2.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/messageformat": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "glob": "~7.0.6", - "make-plural": "~3.0.6", - "messageformat-parser": "^1.0.0", - "nopt": "~3.0.6", - "reserved-words": "^0.1.1" - }, - "bin": { - "messageformat": "bin/messageformat.js" - } - }, - "node_modules/messageformat-parser": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/messageformat/node_modules/glob": { - "version": "7.0.6", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/mississippi": { - "version": "3.0.0", - "license": "BSD-2-Clause", - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/nan": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", - "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", - "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanopop": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "license": "MIT", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/inherits": { - "version": "2.0.3", - "license": "ISC" - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "license": "MIT" - }, - "node_modules/node-libs-browser/node_modules/util": { - "version": "0.11.1", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/node-releases": { - "version": "2.0.14", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "3.0.6", - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "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", - "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", - "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", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "license": "MIT" - }, - "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/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "license": "(MIT AND Zlib)" - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", - "license": "ISC", - "dependencies": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-asn1/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-asn1/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" - } - ], - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path": { - "version": "0.12.7", - "license": "MIT", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "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-type": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "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/picocolors": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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": "3.0.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/postcss-calc/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-calc/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "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/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-colormin/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-convert-values/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-convert-values/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-comments/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-discard-comments/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-discard-duplicates/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-empty/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-discard-empty/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-overridden/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-discard-overridden/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-merge-longhand/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-merge-rules/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-minify-font-values/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-minify-gradients/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "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", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-params/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-minify-params/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-minify-selectors/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-charset/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-charset/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-display-values/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-display-values/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-positions/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-positions/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-repeat-style/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-string/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-string/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-timing-functions/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-unicode/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-url/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-whitespace/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-ordered-values/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-initial/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-reduce-initial/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-reduce-transforms/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-svgo/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-svgo/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-unique-selectors/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/postcss-unique-selectors/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pretty-error": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "node_modules/process": { - "version": "0.11.10", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/prr": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "license": "MIT", - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "devOptional": true, - "license": "ISC" - }, - "node_modules/renderkid": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/reserved-words": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/ret": { - "version": "0.1.15", - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "2.7.1", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC" - }, - "node_modules/schema-utils": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "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", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "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", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "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/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/split-string": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "6.0.2", - "license": "ISC", - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/static-extend": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "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", - "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", - "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", - "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", - "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", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "license": "MIT", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/stream-transform": { - "version": "3.3.2", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylehacks": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/picocolors": { - "version": "0.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/stylehacks/node_modules/postcss": { - "version": "7.0.39", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "1.3.2", - "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" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/terser": { - "version": "4.8.1", - "license": "BSD-2-Clause", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.6.tgz", - "integrity": "sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==", - "license": "MIT", - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "license": "MIT", - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/timsort": { - "version": "0.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "dev": true, - "license": "0BSD" - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "license": "MIT" - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "license": "MIT" - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/uniqs": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "license": "ISC", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/unquoted-property-validator": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.16", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "license": "MIT" - }, - "node_modules/url": { - "version": "0.11.0", - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "license": "MIT" - }, - "node_modules/use": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.10.4", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/util.promisify": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "license": "ISC" - }, - "node_modules/utila": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/vinyl": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemaps-apply": { - "version": "0.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "source-map": "^0.5.1" - } - }, - "node_modules/vinyl-sourcemaps-apply/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/watchpack": { - "version": "1.7.5", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "license": "ISC", - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "license": "MIT", - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "license": "MIT", - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "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": "Upgrade to fsevents v2 to mitigate potential security issues", - "hasInstallScript": true, - "license": "MIT", - "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", - "license": "ISC", - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "license": "MIT", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "license": "MIT", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack": { - "version": "4.47.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "license": "MIT", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "license": "ISC" - }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/guacamole/src/main/frontend/package.json b/guacamole/src/main/frontend/package.json deleted file mode 100644 index 5d63c88b90..0000000000 --- a/guacamole/src/main/frontend/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "private": true, - "scripts": { - "build": "webpack --progress" - }, - "dependencies": { - "@simonwep/pickr": "^1.8.2", - "angular": "^1.8.3", - "angular-route": "^1.8.3", - "angular-templatecache-webpack-plugin": "^1.0.1", - "angular-translate": "^2.19.1", - "angular-translate-interpolation-messageformat": "^2.19.1", - "angular-translate-loader-static-files": "^2.19.1", - "blob-polyfill": "^9.0.20240710", - "csv": "^6.3.9", - "d3-path": "^3.1.0", - "d3-shape": "^3.2.0", - "datalist-polyfill": "^1.25.1", - "file-saver": "^2.0.5", - "fuzzysort": "^3.0.2", - "jquery": "^3.7.1", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "yaml": "^2.5.0" - }, - "devDependencies": { - "@babel/core": "^7.24.7", - "@babel/preset-env": "^7.24.7", - "babel-loader": "^8.3.0", - "clean-webpack-plugin": "^4.0.0", - "closure-webpack-plugin": "^2.6.1", - "copy-webpack-plugin": "^5.1.2", - "css-loader": "^5.2.7", - "css-minimizer-webpack-plugin": "^1.3.0", - "exports-loader": "^1.1.1", - "find-package-json": "^1.2.0", - "google-closure-compiler": "20240317.0.0", - "html-webpack-plugin": "^4.5.2", - "mini-css-extract-plugin": "^1.6.2", - "webpack": "^4.47.0", - "webpack-cli": "^4.10.0" - } -} diff --git a/guacamole/src/main/frontend/plugins/dependency-list-plugin.js b/guacamole/src/main/frontend/plugins/dependency-list-plugin.js deleted file mode 100644 index 2dfaa00613..0000000000 --- a/guacamole/src/main/frontend/plugins/dependency-list-plugin.js +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -const finder = require('find-package-json'); -const fs = require('fs'); -const path = require('path'); -const validateOptions = require('schema-utils'); - -/** - * The name of this plugin. - * - * @type {string} - */ -const PLUGIN_NAME = 'dependency-list-plugin'; - -/** - * The schema of the configuration options object accepted by the constructor - * of DependencyListPlugin. - * - * @see https://github.com/webpack/schema-utils/blob/v1.0.0/README.md#usage - */ -const PLUGIN_OPTIONS_SCHEMA = { - type: 'object', - properties: { - - /** - * The name of the file that should contain the dependency list. By - * default, this will be "npm-dependencies.txt". - */ - filename: { type: 'string' }, - - /** - * The path in which the dependency list file should be saved. By - * default, this will be the output path of the Webpack compiler. - */ - path: { type: 'string' } - - }, - additionalProperties: false -}; - -/** - * Webpack plugin that automatically lists each of the NPM dependencies - * included within any bundles produced by the compile process. - */ -class DependencyListPlugin { - - /** - * Creates a new DependencyListPlugin configured with the given options. - * The options given must conform to the options schema. - * - * @see PLUGIN_OPTIONS_SCHEMA - * - * @param {*} options - * The configuration options to apply to the plugin. - */ - constructor(options = {}) { - validateOptions(PLUGIN_OPTIONS_SCHEMA, options, 'DependencyListPlugin'); - this.options = options; - } - - /** - * Entrypoint for all Webpack plugins. This function will be invoked when - * the plugin is being associated with the compile process. - * - * @param {Compiler} compiler - * A reference to the Webpack compiler. - */ - apply(compiler) { - - /** - * Logger for this plugin. - * - * @type {Logger} - */ - const logger = compiler.getInfrastructureLogger(PLUGIN_NAME); - - /** - * The directory receiving the dependency list file. - * - * @type {string} - */ - const outputPath = this.options.path || compiler.options.output.path; - - /** - * The full path to the output file that should contain the list of - * discovered NPM module dependencies. - * - * @type {string} - */ - const outputFile = path.join( - outputPath, - this.options.filename || 'npm-dependencies.txt' - ); - - // Wait for compilation to fully complete - compiler.hooks.done.tap(PLUGIN_NAME, (stats) => { - - const moduleCoords = {}; - - // Map each file used within any bundle built by the compiler to - // its corresponding NPM package, ignoring files that have no such - // package - stats.compilation.fileDependencies.forEach(file => { - - // Locate NPM package corresponding to file dependency (there - // may not be one) - const moduleFinder = finder(file); - const npmPackage = moduleFinder.next().value; - - // Translate absolute path into more readable path relative to - // root of compilation process - const relativePath = path.relative(compiler.options.context, file); - - if (npmPackage.name) { - moduleCoords[npmPackage.name + ':' + npmPackage.version] = true; - logger.info('File dependency "%s" mapped to NPM package "%s" (v%s)', - relativePath, npmPackage.name, npmPackage.version); - } - else - logger.info('Skipping file dependency "%s" (no NPM package)', - relativePath); - - }); - - // Create output path if it doesn't yet exist - if (!fs.existsSync(outputPath)) - fs.mkdirSync(outputPath, { recursive: true, mode: 0o755 }); - - // Write all discovered NPM packages to configured output file - const sortedCoords = Object.keys(moduleCoords).sort(); - fs.writeFileSync(outputFile, sortedCoords.join('\n') + '\n'); - - }); - - } - -} - -module.exports = DependencyListPlugin; - diff --git a/guacamole/src/main/frontend/src/angular-module-shim.js b/guacamole/src/main/frontend/src/angular-module-shim.js deleted file mode 100644 index 3e6e6d315c..0000000000 --- a/guacamole/src/main/frontend/src/angular-module-shim.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2014 Jed Richards - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -(function(angular) { - - 'use strict'; - - if ( !angular ) { - throw new Error('angular-module-shim: Missing Angular'); - } - - var origFn = angular.module; - var hash = {}; - - angular.module = function(name,requires,configFn) { - - var requires = requires || []; - var registered = hash[name]; - var module; - - if ( registered ) { - module = origFn(name); - module.requires.push.apply(module.requires,requires); - // Register the config function if it exists. - if (configFn) { - module.config(configFn); - } - } else { - hash[name] = true; - module = origFn(name,requires,configFn); - } - - return module; - }; -})(window.angular); diff --git a/guacamole/src/main/frontend/src/app/auth/authModule.js b/guacamole/src/main/frontend/src/app/auth/authModule.js deleted file mode 100644 index 84c3e33175..0000000000 --- a/guacamole/src/main/frontend/src/app/auth/authModule.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for authentication and management of tokens. - */ -angular.module('auth', [ - 'rest', - 'storage' -]); diff --git a/guacamole/src/main/frontend/src/app/auth/service/authenticationService.js b/guacamole/src/main/frontend/src/app/auth/service/authenticationService.js deleted file mode 100644 index af5a9ab6c3..0000000000 --- a/guacamole/src/main/frontend/src/app/auth/service/authenticationService.js +++ /dev/null @@ -1,550 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for authenticating a user against the REST API. Invoking the - * authenticate() or login() functions of this service will automatically - * affect the login dialog, if visible. - * - * This service broadcasts events on $rootScope depending on the status and - * result of authentication operations: - * - * "guacLoginPending" - * An authentication request is being submitted and we are awaiting the - * result. The request may not yet have been submitted if the parameters - * for that request are not ready. This event receives a promise that - * resolves with the HTTP parameters that were ultimately submitted as its - * sole parameter. - * - * "guacLogin" - * Authentication was successful and a new token was created. This event - * receives the authentication token as its sole parameter. - * - * "guacLogout" - * An existing token is being destroyed. This event receives the - * authentication token as its sole parameter. If the existing token for - * the current session is being replaced without destroying that session, - * this event is not fired. - * - * "guacLoginFailed" - * An authentication request has failed for any reason. This event is - * broadcast before any other events that are specific to the nature of - * the failure, and may be used to detect login failures in lieu of those - * events. This event receives two parameters: the HTTP parameters - * submitted and the Error object received from the REST endpoint. - * - * "guacInsufficientCredentials" - * An authentication request failed because additional credentials are - * needed before the request can be processed. This event receives two - * parameters: the HTTP parameters submitted and the Error object received - * from the REST endpoint. - * - * "guacInvalidCredentials" - * An authentication request failed because the credentials provided are - * invalid. This event receives two parameters: the HTTP parameters - * submitted and the Error object received from the REST endpoint. - */ -angular.module('auth').factory('authenticationService', ['$injector', - function authenticationService($injector) { - - // Required types - var AuthenticationResult = $injector.get('AuthenticationResult'); - var Error = $injector.get('Error'); - - // Required services - var $q = $injector.get('$q'); - var $rootScope = $injector.get('$rootScope'); - var localStorageService = $injector.get('localStorageService'); - var requestService = $injector.get('requestService'); - - var service = {}; - - /** - * The most recent authentication result, or null if no authentication - * result is cached. - * - * @type AuthenticationResult - */ - var cachedResult = null; - - /** - * The unique identifier of the local storage key which stores the latest - * authentication token. - * - * @type String - */ - var AUTH_TOKEN_STORAGE_KEY = 'GUAC_AUTH_TOKEN'; - - /** - * Retrieves the authentication result cached in memory. If the user has not - * yet authenticated, the user has logged out, or the last authentication - * attempt failed, null is returned. - * - * NOTE: setAuthenticationResult() will be called upon page load, so the - * cache should always be populated after the page has successfully loaded. - * - * @returns {AuthenticationResult} - * The last successful authentication result, or null if the user is not - * currently authenticated. - */ - var getAuthenticationResult = function getAuthenticationResult() { - - // Use cached result, if any - if (cachedResult) - return cachedResult; - - // Return explicit null if no auth data is currently stored - return null; - - }; - - /** - * Stores the given authentication result for future retrieval. The given - * result MUST be the result of the most recent authentication attempt. - * - * @param {AuthenticationResult} data - * The last successful authentication result, or null if the last - * authentication attempt failed. - */ - var setAuthenticationResult = function setAuthenticationResult(data) { - - // Clear the currently-stored result and auth token if the last - // attempt failed - if (!data) { - cachedResult = null; - localStorageService.removeItem(AUTH_TOKEN_STORAGE_KEY); - } - - // Otherwise, store the authentication attempt directly. - // Note that only the auth token is stored in persistent local storage. - // To re-obtain an autentication result upon a fresh page load, - // reauthenticate with the persistent token, which can be obtained by - // calling getCurrentToken(). - else { - - // Always store in cache - cachedResult = data; - - // Persist only the auth token past tab/window closure, and only - // if not anonymous - if (data.username !== AuthenticationResult.ANONYMOUS_USERNAME) - localStorageService.setItem( - AUTH_TOKEN_STORAGE_KEY, data.authToken); - - } - - }; - - /** - * Clears the stored authentication result, if any. If no authentication - * result is currently stored, this function has no effect. - */ - var clearAuthenticationResult = function clearAuthenticationResult() { - setAuthenticationResult(null); - }; - - /** - * Makes a request to authenticate a user using the token REST API endpoint - * and given arbitrary parameters, returning a promise that succeeds only - * if the authentication operation was successful. The resulting - * authentication data can be retrieved later via getCurrentToken() or - * getCurrentUsername(). Invoking this function will affect the UI, - * including the login screen if visible. - * - * The provided parameters can be virtually any object, as each property - * will be sent as an HTTP parameter in the authentication request. - * Standard parameters include "username" for the user's username, - * "password" for the user's associated password, and "token" for the - * auth token to check/update. - * - * If a token is provided, it will be reused if possible. - * - * @param {Object|Promise} parameters - * Arbitrary parameters to authenticate with. If a Promise is provided, - * that Promise must resolve with the parameters to be submitted when - * those parameters are available, and any error will be handled as if - * from the authentication endpoint of the REST API itself. - * - * @returns {Promise} - * A promise which succeeds only if the login operation was successful. - */ - service.authenticate = function authenticate(parameters) { - - // Coerce received parameters object into a Promise, if it isn't - // already a Promise - parameters = $q.resolve(parameters); - - // Notify that a fresh authentication request is underway - $rootScope.$broadcast('guacLoginPending', parameters); - - // Attempt authentication after auth parameters are available ... - return parameters.then(function requestParametersReady(requestParams) { - - // Strip any properties that are from AngularJS core, such as the - // '$$state' property added by $q. Properties added by AngularJS - // core will have a '$' prefix. The '$$state' property is - // particularly problematic, as it is self-referential and explodes - // the stack when fed to $.param(). - requestParams = _.omitBy(requestParams, (value, key) => key.startsWith('$')); - - return requestService({ - method: 'POST', - url: 'api/tokens', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - data: $.param(requestParams) - }) - - // ... if authentication succeeds, handle received auth data ... - .then(function authenticationSuccessful(data) { - - var currentToken = service.getCurrentToken(); - - // If a new token was received, ensure the old token is invalidated, - // if any, and notify listeners of the new token - if (data.authToken !== currentToken) { - - // If an old token existed, request that the token be revoked - if (currentToken) { - service.revokeToken(currentToken).catch(angular.noop); - } - - // Notify of login and new token - setAuthenticationResult(new AuthenticationResult(data)); - $rootScope.$broadcast('guacLogin', data.authToken); - - } - - // Update cached authentication result, even if the token remains - // the same - else - setAuthenticationResult(new AuthenticationResult(data)); - - // Authentication was successful - return data; - - }); - - }) - - // ... if authentication fails, propogate failure to returned promise - ['catch'](requestService.createErrorCallback(function authenticationFailed(error) { - - // Notify of generic login failure, for any event consumers that - // wish to handle all types of failures at once - $rootScope.$broadcast('guacLoginFailed', parameters, error); - - // Request credentials if provided credentials were invalid - if (error.type === Error.Type.INVALID_CREDENTIALS) { - $rootScope.$broadcast('guacInvalidCredentials', parameters, error); - clearAuthenticationResult(); - } - - // Request more credentials if provided credentials were not enough - else if (error.type === Error.Type.INSUFFICIENT_CREDENTIALS) { - $rootScope.$broadcast('guacInsufficientCredentials', parameters, error); - clearAuthenticationResult(); - } - - // Abort rendering of page if an internal error occurs - else if (error.type === Error.Type.INTERNAL_ERROR) - $rootScope.$broadcast('guacFatalPageError', error); - - // Authentication failed - throw error; - - })); - - }; - - /** - * Makes a request to update the current auth token, if any, using the - * token REST API endpoint. If the optional parameters object is provided, - * its properties will be included as parameters in the update request. - * This function returns a promise that succeeds only if the authentication - * operation was successful. The resulting authentication data can be - * retrieved later via getCurrentToken() or getCurrentUsername(). - * - * If there is no current auth token, this function behaves identically to - * authenticate(), and makes a general authentication request. - * - * @param {Object} [parameters] - * Arbitrary parameters to authenticate with, if any. - * - * @returns {Promise} - * A promise which succeeds only if the login operation was successful. - */ - service.updateCurrentToken = function updateCurrentToken(parameters) { - - // HTTP parameters for the authentication request - var httpParameters = {}; - - // Add token parameter if current token is known - var token = service.getCurrentToken(); - if (token) - httpParameters.token = service.getCurrentToken(); - - // Add any additional parameters - if (parameters) - angular.extend(httpParameters, parameters); - - // Make the request - return service.authenticate(httpParameters); - - }; - - /** - * Determines whether the session associated with a particular token is - * still valid, without performing an operation that would result in that - * session being marked as active. If no token is provided, the session of - * the current user is checked. - * - * @param {string} [token] - * The authentication token to pass with the "Guacamole-Token" header. - * If omitted, and the user is logged in, the user's current - * authentication token will be used. - * - * @returns {Promise.} - * A promise that resolves with the boolean value "true" if the session - * is valid, and resolves with the boolean value "false" otherwise, - * including if an error prevents session validity from being - * determined. The promise is never rejected. - */ - service.getValidity = function getValidity(token) { - - // NOTE: Because this is a HEAD request, we will not receive a JSON - // response body. We will only have a simple yes/no regarding whether - // the auth token can be expected to be usable. - return service.request({ - method: 'HEAD', - url: 'api/session' - }, token) - - .then(function sessionIsValid() { - return true; - }) - - ['catch'](function sessionIsNotValid() { - return false; - }); - - }; - - /** - * Makes a request to revoke an authentication token using the token REST - * API endpoint, returning a promise that succeeds only if the token was - * successfully revoked. - * - * @param {string} token - * The authentication token to revoke. - * - * @returns {Promise} - * A promise which succeeds only if the token was successfully revoked. - */ - service.revokeToken = function revokeToken(token) { - return service.request({ - method: 'DELETE', - url: 'api/session' - }, token); - }; - - /** - * Makes a request to authenticate a user using the token REST API endpoint - * with a username and password, ignoring any currently-stored token, - * returning a promise that succeeds only if the login operation was - * successful. The resulting authentication data can be retrieved later - * via getCurrentToken() or getCurrentUsername(). Invoking this function - * will affect the UI, including the login screen if visible. - * - * @param {String} username - * The username to log in with. - * - * @param {String} password - * The password to log in with. - * - * @returns {Promise} - * A promise which succeeds only if the login operation was successful. - */ - service.login = function login(username, password) { - return service.authenticate({ - username: username, - password: password - }); - }; - - /** - * Makes a request to logout a user using the token REST API endpoint, - * returning a promise that succeeds only if the logout operation was - * successful. Invoking this function will affect the UI, causing the - * visible components of the application to be replaced with a status - * message noting that the user has been logged out. - * - * @returns {Promise} - * A promise which succeeds only if the logout operation was - * successful. - */ - service.logout = function logout() { - - // Clear authentication data - var token = service.getCurrentToken(); - clearAuthenticationResult(); - - // Notify listeners that a token is being destroyed - $rootScope.$broadcast('guacLogout', token); - - // Delete old token - return service.revokeToken(token); - - }; - - /** - * Returns whether the current user has authenticated anonymously. An - * anonymous user is denoted by the identifier reserved by the Guacamole - * extension API for anonymous users (the empty string). - * - * @returns {Boolean} - * true if the current user has authenticated anonymously, false - * otherwise. - */ - service.isAnonymous = function isAnonymous() { - return service.getCurrentUsername() === ''; - }; - - /** - * Returns the username of the current user. If the current user is not - * logged in, this value may not be valid. - * - * @returns {String} - * The username of the current user, or null if no authentication data - * is present. - */ - service.getCurrentUsername = function getCurrentUsername() { - - // Return username, if available - var authData = getAuthenticationResult(); - if (authData) - return authData.username; - - // No auth data present - return null; - - }; - - /** - * Returns the auth token associated with the current user. If the current - * user is not logged in, this token may not be valid. - * - * @returns {String} - * The auth token associated with the current user, or null if no - * authentication data is present. - */ - service.getCurrentToken = function getCurrentToken() { - - // Return cached auth token, if available - var authData = getAuthenticationResult(); - if (authData) - return authData.authToken; - - // Fall back to the value from local storage if not found in cache - return localStorageService.getItem(AUTH_TOKEN_STORAGE_KEY); - - }; - - /** - * Returns the identifier of the data source that authenticated the current - * user. If the current user is not logged in, this value may not be valid. - * - * @returns {String} - * The identifier of the data source that authenticated the current - * user, or null if no authentication data is present. - */ - service.getDataSource = function getDataSource() { - - // Return data source, if available - var authData = getAuthenticationResult(); - if (authData) - return authData.dataSource; - - // No auth data present - return null; - - }; - - /** - * Returns the identifiers of all data sources available to the current - * user. If the current user is not logged in, this value may not be valid. - * - * @returns {String[]} - * The identifiers of all data sources availble to the current user, - * or an empty array if no authentication data is present. - */ - service.getAvailableDataSources = function getAvailableDataSources() { - - // Return data sources, if available - var authData = getAuthenticationResult(); - if (authData) - return authData.availableDataSources; - - // No auth data present - return []; - - }; - - /** - * Makes an HTTP request leveraging the requestService(), automatically - * including the given authentication token using the "Guacamole-Token" - * header. If no token is provided, the user's current authentication token - * is used instead. If the user is not logged in, the "Guacamole-Token" - * header is simply omitted. The provided configuration object is not - * modified by this function. - * - * @param {Object} object - * A configuration object describing the HTTP request to be made by - * requestService(). As described by requestService(), this object must - * be a configuration object accepted by AngularJS' $http service. - * - * @param {string} [token] - * The authentication token to pass with the "Guacamole-Token" header. - * If omitted, and the user is logged in, the user's current - * authentication token will be used. - * - * @returns {Promise.} - * A promise that will resolve with the data from the HTTP response for - * the underlying requestService() call if successful, or reject with - * an @link{Error} describing the failure. - */ - service.request = function request(object, token) { - - // Attempt to use current token if none is provided - token = token || service.getCurrentToken(); - - // Add "Guacamole-Token" header if an authentication token is available - if (token) { - object = _.merge({ - headers : { 'Guacamole-Token' : token } - }, object); - } - - return requestService(object); - - }; - - return service; -}]); diff --git a/guacamole/src/main/frontend/src/app/auth/types/AuthenticationResult.js b/guacamole/src/main/frontend/src/app/auth/types/AuthenticationResult.js deleted file mode 100644 index e2774619f3..0000000000 --- a/guacamole/src/main/frontend/src/app/auth/types/AuthenticationResult.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the AuthenticationResult class. - */ -angular.module('auth').factory('AuthenticationResult', [function defineAuthenticationResult() { - - /** - * The object returned by REST API calls when representing the successful - * result of an authentication attempt. - * - * @constructor - * @param {AuthenticationResult|Object} [template={}] - * The object whose properties should be copied within the new - * AuthenticationResult. - */ - var AuthenticationResult = function AuthenticationResult(template) { - - // Use empty object by default - template = template || {}; - - /** - * The unique token generated for the user that authenticated. - * - * @type String - */ - this.authToken = template.authToken; - - /** - * The name which uniquely identifies the user that authenticated. - * - * @type String - */ - this.username = template.username; - - /** - * The unique identifier of the data source which authenticated the - * user. - * - * @type String - */ - this.dataSource = template.dataSource; - - /** - * The identifiers of all data sources available to the user that - * authenticated. - * - * @type String[] - */ - this.availableDataSources = template.availableDataSources; - - }; - - /** - * The username reserved by the Guacamole extension API for users which have - * authenticated anonymously. - * - * @type String - */ - AuthenticationResult.ANONYMOUS_USERNAME = ''; - - return AuthenticationResult; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/clientModule.js b/guacamole/src/main/frontend/src/app/client/clientModule.js deleted file mode 100644 index 73d3220212..0000000000 --- a/guacamole/src/main/frontend/src/app/client/clientModule.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for code used to connect to a connection or balancing group. - */ -angular.module('client', [ - 'auth', - 'clipboard', - 'element', - 'history', - 'navigation', - 'notification', - 'osk', - 'rest', - 'textInput', - 'touch' -]); diff --git a/guacamole/src/main/frontend/src/app/client/controllers/clientController.js b/guacamole/src/main/frontend/src/app/client/controllers/clientController.js deleted file mode 100644 index 6a486fe9a2..0000000000 --- a/guacamole/src/main/frontend/src/app/client/controllers/clientController.js +++ /dev/null @@ -1,879 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for the page used to connect to a connection or balancing group. - */ -angular.module('client').controller('clientController', ['$scope', '$routeParams', '$injector', - function clientController($scope, $routeParams, $injector) { - - // Required types - const ConnectionGroup = $injector.get('ConnectionGroup'); - const ManagedClient = $injector.get('ManagedClient'); - const ManagedClientGroup = $injector.get('ManagedClientGroup'); - const ManagedClientState = $injector.get('ManagedClientState'); - const ManagedFilesystem = $injector.get('ManagedFilesystem'); - const Protocol = $injector.get('Protocol'); - const ScrollState = $injector.get('ScrollState'); - - // Required services - const $location = $injector.get('$location'); - const authenticationService = $injector.get('authenticationService'); - const connectionGroupService = $injector.get('connectionGroupService'); - const clipboardService = $injector.get('clipboardService'); - const dataSourceService = $injector.get('dataSourceService'); - const guacClientManager = $injector.get('guacClientManager'); - const guacFullscreen = $injector.get('guacFullscreen'); - const iconService = $injector.get('iconService'); - const preferenceService = $injector.get('preferenceService'); - const requestService = $injector.get('requestService'); - const tunnelService = $injector.get('tunnelService'); - const userPageService = $injector.get('userPageService'); - - /** - * The minimum number of pixels a drag gesture must move to result in the - * menu being shown or hidden. - * - * @type Number - */ - var MENU_DRAG_DELTA = 64; - - /** - * The maximum X location of the start of a drag gesture for that gesture - * to potentially show the menu. - * - * @type Number - */ - var MENU_DRAG_MARGIN = 64; - - /** - * When showing or hiding the menu via a drag gesture, the maximum number - * of pixels the touch can move vertically and still affect the menu. - * - * @type Number - */ - var MENU_DRAG_VERTICAL_TOLERANCE = 10; - - /** - * In order to open the guacamole menu, we need to hit ctrl-alt-shift. There are - * several possible keysysms for each key. - */ - var SHIFT_KEYS = {0xFFE1 : true, 0xFFE2 : true}, - ALT_KEYS = {0xFFE9 : true, 0xFFEA : true, 0xFE03 : true, - 0xFFE7 : true, 0xFFE8 : true}, - CTRL_KEYS = {0xFFE3 : true, 0xFFE4 : true}, - MENU_KEYS = angular.extend({}, SHIFT_KEYS, ALT_KEYS, CTRL_KEYS); - - /** - * Keysym for detecting any END key presses, for the purpose of passing through - * the Ctrl-Alt-Del sequence to a remote system. - */ - var END_KEYS = {0xFF57 : true, 0xFFB1 : true}; - - /** - * Keysym for sending the DELETE key when the Ctrl-Alt-End hotkey - * combo is pressed. - * - * @type Number - */ - var DEL_KEY = 0xFFFF; - - /** - * Menu-specific properties. - */ - $scope.menu = { - - /** - * Whether the menu is currently shown. - * - * @type Boolean - */ - shown : false, - - /** - * The currently selected input method. This may be any of the values - * defined within preferenceService.inputMethods. - * - * @type String - */ - inputMethod : preferenceService.preferences.inputMethod, - - /** - * Whether translation of touch to mouse events should emulate an - * absolute pointer device, or a relative pointer device. - * - * @type Boolean - */ - emulateAbsoluteMouse : preferenceService.preferences.emulateAbsoluteMouse, - - /** - * The current scroll state of the menu. - * - * @type ScrollState - */ - scrollState : new ScrollState(), - - /** - * The current desired values of all editable connection parameters as - * a set of name/value pairs, including any changes made by the user. - * - * @type {Object.} - */ - connectionParameters : {} - - }; - - // Convenience method for closing the menu - $scope.closeMenu = function closeMenu() { - $scope.menu.shown = false; - }; - - /** - * Applies any changes to connection parameters made by the user within the - * Guacamole menu to the given ManagedClient. If no client is supplied, - * this function has no effect. - * - * @param {ManagedClient} client - * The client to apply parameter changes to. - */ - $scope.applyParameterChanges = function applyParameterChanges(client) { - angular.forEach($scope.menu.connectionParameters, function sendArgv(value, name) { - if (client) - ManagedClient.setArgument(client, name, value); - }); - }; - - /** - * The currently-focused client within the current ManagedClientGroup. If - * there is no current group, no client is focused, or multiple clients are - * focused, this will be null. - * - * @type ManagedClient - */ - $scope.focusedClient = null; - - /** - * The set of clients that should be attached to the client UI. This will - * be immediately initialized by a call to updateAttachedClients() below. - * - * @type ManagedClientGroup - */ - $scope.clientGroup = null; - - /** - * @borrows ManagedClientGroup.getName - */ - $scope.getName = ManagedClientGroup.getName; - - /** - * @borrows ManagedClientGroup.getTitle - */ - $scope.getTitle = ManagedClientGroup.getTitle; - - /** - * Arbitrary context that should be exposed to the guacGroupList directive - * displaying the dropdown list of available connections within the - * Guacamole menu. - */ - $scope.connectionListContext = { - - /** - * The set of clients desired within the current view. For each client - * that should be present within the current view, that client's ID - * will map to "true" here. - * - * @type {Object.} - */ - attachedClients : {}, - - /** - * Notifies that the client with the given ID has been added or - * removed from the set of clients desired within the current view, - * and the current view should be updated accordingly. - * - * @param {string} id - * The ID of the client that was added or removed from the current - * view. - */ - updateAttachedClients : function updateAttachedClients(id) { - $scope.addRemoveClient(id, !$scope.connectionListContext.attachedClients[id]); - } - - }; - - /** - * Adds or removes the client with the given ID from the set of clients - * within the current view, updating the current URL accordingly. - * - * @param {string} id - * The ID of the client to add or remove from the current view. - * - * @param {boolean} [remove=false] - * Whether the specified client should be added (false) or removed - * (true). - */ - $scope.addRemoveClient = function addRemoveClient(id, remove) { - - // Deconstruct current path into corresponding client IDs - const ids = ManagedClientGroup.getClientIdentifiers($routeParams.id); - - // Add/remove ID as requested - if (remove) - _.pull(ids, id); - else - ids.push(id); - - // Reconstruct path, updating attached clients via change in route - $location.path('/client/' + ManagedClientGroup.getIdentifier(ids)); - - }; - - /** - * Reloads the contents of $scope.clientGroup to reflect the client IDs - * currently listed in the URL. - */ - const reparseRoute = function reparseRoute() { - - const previousClients = $scope.clientGroup ? $scope.clientGroup.clients.slice() : []; - - // Replace existing group with new group - setAttachedGroup(guacClientManager.getManagedClientGroup($routeParams.id)); - - // Store current set of attached clients for later use within the - // Guacamole menu - $scope.connectionListContext.attachedClients = {}; - $scope.clientGroup.clients.forEach((client) => { - $scope.connectionListContext.attachedClients[client.id] = true; - }); - - // Ensure menu is closed if updated view is not a modification of the - // current view (has no clients in common). The menu should remain open - // only while the current view is being modified, not when navigating - // to an entirely different view. - if (_.isEmpty(_.intersection(previousClients, $scope.clientGroup.clients))) - $scope.menu.shown = false; - - // Update newly-attached clients with current contents of clipboard - clipboardService.resyncClipboard(); - - }; - - /** - * Replaces the ManagedClientGroup currently attached to the client - * interface via $scope.clientGroup with the given ManagedClientGroup, - * safely cleaning up after the previous group. If no ManagedClientGroup is - * provided, the existing group is simply removed. - * - * @param {ManagedClientGroup} [managedClientGroup] - * The ManagedClientGroup to attach to the interface, if any. - */ - const setAttachedGroup = function setAttachedGroup(managedClientGroup) { - - // Do nothing if group is not actually changing - if ($scope.clientGroup === managedClientGroup) - return; - - if ($scope.clientGroup) { - - // Remove all disconnected clients from management (the user has - // seen their status) - _.filter($scope.clientGroup.clients, client => { - - const connectionState = client.clientState.connectionState; - return connectionState === ManagedClientState.ConnectionState.DISCONNECTED - || connectionState === ManagedClientState.ConnectionState.TUNNEL_ERROR - || connectionState === ManagedClientState.ConnectionState.CLIENT_ERROR; - - }).forEach(client => { - guacClientManager.removeManagedClient(client.id); - }); - - // Flag group as detached - $scope.clientGroup.attached = false; - - } - - if (managedClientGroup) { - $scope.clientGroup = managedClientGroup; - $scope.clientGroup.attached = true; - $scope.clientGroup.lastUsed = new Date().getTime(); - } - - }; - - // Init sets of clients based on current URL ... - reparseRoute(); - - // ... and re-initialize those sets if the URL has changed without - // reloading the route - $scope.$on('$routeUpdate', reparseRoute); - - /** - * The root connection groups of the connection hierarchy that should be - * presented to the user for selecting a different connection, as a map of - * data source identifier to the root connection group of that data - * source. This will be null if the connection group hierarchy has not yet - * been loaded or if the hierarchy is inapplicable due to only one - * connection or balancing group being available. - * - * @type Object. - */ - $scope.rootConnectionGroups = null; - - /** - * Array of all connection properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionProperties = [ - 'name' - ]; - - /** - * Array of all connection group properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionGroupProperties = [ - 'name' - ]; - - // Retrieve root groups and all descendants - dataSourceService.apply( - connectionGroupService.getConnectionGroupTree, - authenticationService.getAvailableDataSources(), - ConnectionGroup.ROOT_IDENTIFIER - ) - .then(function rootGroupsRetrieved(rootConnectionGroups) { - - // Store retrieved groups only if there are multiple connections or - // balancing groups available - var clientPages = userPageService.getClientPages(rootConnectionGroups); - if (clientPages.length > 1) - $scope.rootConnectionGroups = rootConnectionGroups; - - }, requestService.WARN); - - /** - * Map of all available sharing profiles for the current connection by - * their identifiers. If this information is not yet available, or no such - * sharing profiles exist, this will be an empty object. - * - * @type Object. - */ - $scope.sharingProfiles = {}; - - /** - * Map of all substituted key presses. If one key is pressed in place of another - * the value of the substituted key is stored in an object with the keysym of - * the original key. - * - * @type Object. - */ - var substituteKeysPressed = {}; - - /** - * Returns whether the shortcut for showing/hiding the Guacamole menu - * (Ctrl+Alt+Shift) has been pressed. - * - * @param {Guacamole.Keyboard} keyboard - * The Guacamole.Keyboard object tracking the local keyboard state. - * - * @returns {boolean} - * true if Ctrl+Alt+Shift has been pressed, false otherwise. - */ - const isMenuShortcutPressed = function isMenuShortcutPressed(keyboard) { - - // Ctrl+Alt+Shift has NOT been pressed if any key is currently held - // down that isn't Ctrl, Alt, or Shift - if (_.findKey(keyboard.pressed, (val, keysym) => !MENU_KEYS[keysym])) - return false; - - // Verify that one of each required key is held, regardless of - // left/right location on the keyboard - return !!( - _.findKey(SHIFT_KEYS, (val, keysym) => keyboard.pressed[keysym]) - && _.findKey(ALT_KEYS, (val, keysym) => keyboard.pressed[keysym]) - && _.findKey(CTRL_KEYS, (val, keysym) => keyboard.pressed[keysym]) - ); - - }; - - // Show menu if the user swipes from the left, hide menu when the user - // swipes from the right, scroll menu while visible - $scope.menuDrag = function menuDrag(inProgress, startX, startY, currentX, currentY, deltaX, deltaY) { - - if ($scope.menu.shown) { - - // Hide menu if swipe-from-right gesture is detected - if (Math.abs(currentY - startY) < MENU_DRAG_VERTICAL_TOLERANCE - && startX - currentX >= MENU_DRAG_DELTA) - $scope.menu.shown = false; - - // Scroll menu by default - else { - $scope.menu.scrollState.left -= deltaX; - $scope.menu.scrollState.top -= deltaY; - } - - } - - // Show menu if swipe-from-left gesture is detected - else if (startX <= MENU_DRAG_MARGIN) { - if (Math.abs(currentY - startY) < MENU_DRAG_VERTICAL_TOLERANCE - && currentX - startX >= MENU_DRAG_DELTA) - $scope.menu.shown = true; - } - - return false; - - }; - - // Show/hide UI elements depending on input method - $scope.$watch('menu.inputMethod', function setInputMethod(inputMethod) { - - // Show input methods only if selected - $scope.showOSK = (inputMethod === 'osk'); - $scope.showTextInput = (inputMethod === 'text'); - - }); - - // Update client state/behavior as visibility of the Guacamole menu changes - $scope.$watch('menu.shown', function menuVisibilityChanged(menuShown, menuShownPreviousState) { - - // Re-update available connection parameters, if there is a focused - // client (parameter information may not have been available at the - // time focus changed) - if (menuShown) - $scope.menu.connectionParameters = $scope.focusedClient ? - ManagedClient.getArgumentModel($scope.focusedClient) : {}; - - // Send any argument value data once menu is hidden - else if (menuShownPreviousState) - $scope.applyParameterChanges($scope.focusedClient); - - /* Broadcast changes to the menu display state */ - $scope.$broadcast('guacMenuShown', menuShown); - - }); - - // Toggle the menu when the guacClientToggleMenu event is received - $scope.$on('guacToggleMenu', - () => $scope.menu.shown = !$scope.menu.shown); - - // Show the menu when the guacClientShowMenu event is received - $scope.$on('guacShowMenu', () => $scope.menu.shown = true); - - // Hide the menu when the guacClientHideMenu event is received - $scope.$on('guacHideMenu', () => $scope.menu.shown = false); - - // Automatically track and cache the currently-focused client - $scope.$on('guacClientFocused', function focusedClientChanged(event, newFocusedClient) { - - const oldFocusedClient = $scope.focusedClient; - $scope.focusedClient = newFocusedClient; - - // Apply any parameter changes when focus is changing - if (oldFocusedClient) - $scope.applyParameterChanges(oldFocusedClient); - - // Update available connection parameters, if there is a focused - // client - $scope.menu.connectionParameters = newFocusedClient ? - ManagedClient.getArgumentModel(newFocusedClient) : {}; - - }); - - // Automatically update connection parameters that have been modified - // for the current focused client - $scope.$on('guacClientArgumentsUpdated', function argumentsChanged(event, focusedClient) { - - // Ignore any updated arguments not for the current focused client - if ($scope.focusedClient && $scope.focusedClient === focusedClient) - $scope.menu.connectionParameters = ManagedClient.getArgumentModel(focusedClient); - - }); - - // Update page icon when thumbnail changes - $scope.$watch('focusedClient.thumbnail.canvas', function thumbnailChanged(canvas) { - iconService.setIcons(canvas); - }); - - // Pull sharing profiles once the tunnel UUID is known - $scope.$watch('focusedClient.tunnel.uuid', function retrieveSharingProfiles(uuid) { - - // Only pull sharing profiles if tunnel UUID is actually available - if (!uuid) { - $scope.sharingProfiles = {}; - return; - } - - // Pull sharing profiles for the current connection - tunnelService.getSharingProfiles(uuid) - .then(function sharingProfilesRetrieved(sharingProfiles) { - $scope.sharingProfiles = sharingProfiles; - }, requestService.WARN); - - }); - - /** - * Produces a sharing link for the current connection using the given - * sharing profile. The resulting sharing link, and any required login - * information, will be displayed to the user within the Guacamole menu. - * - * @param {SharingProfile} sharingProfile - * The sharing profile to use to generate the sharing link. - */ - $scope.share = function share(sharingProfile) { - if ($scope.focusedClient) - ManagedClient.createShareLink($scope.focusedClient, sharingProfile); - }; - - /** - * Returns whether the current connection has any associated share links. - * - * @returns {Boolean} - * true if the current connection has at least one associated share - * link, false otherwise. - */ - $scope.isShared = function isShared() { - return !!$scope.focusedClient && ManagedClient.isShared($scope.focusedClient); - }; - - /** - * Returns the total number of share links associated with the current - * connection. - * - * @returns {Number} - * The total number of share links associated with the current - * connection. - */ - $scope.getShareLinkCount = function getShareLinkCount() { - - if (!$scope.focusedClient) - return 0; - - // Count total number of links within the ManagedClient's share link map - var linkCount = 0; - for (const dummy in $scope.focusedClient.shareLinks) - linkCount++; - - return linkCount; - - }; - - // Opening the Guacamole menu after Ctrl+Alt+Shift, preventing those - // keypresses from reaching any Guacamole client - $scope.$on('guacBeforeKeydown', function incomingKeydown(event, keysym, keyboard) { - - // Toggle menu if menu shortcut (Ctrl+Alt+Shift) is pressed - if (isMenuShortcutPressed(keyboard)) { - - // Don't send this key event through to the client, and release - // all other keys involved in performing this shortcut - event.preventDefault(); - keyboard.reset(); - - // Toggle the menu - $scope.$apply(function() { - $scope.menu.shown = !$scope.menu.shown; - }); - - } - - // Prevent all keydown events while menu is open - else if ($scope.menu.shown) - event.preventDefault(); - - }); - - // Prevent all keyup events while menu is open - $scope.$on('guacBeforeKeyup', function incomingKeyup(event, keysym, keyboard) { - if ($scope.menu.shown) - event.preventDefault(); - }); - - // Send Ctrl-Alt-Delete when Ctrl-Alt-End is pressed. - $scope.$on('guacKeydown', function keydownListener(event, keysym, keyboard) { - - // If one of the End keys is pressed, and we have a one keysym from each - // of Ctrl and Alt groups, send Ctrl-Alt-Delete. - if (END_KEYS[keysym] - && _.findKey(ALT_KEYS, (val, keysym) => keyboard.pressed[keysym]) - && _.findKey(CTRL_KEYS, (val, keysym) => keyboard.pressed[keysym]) - ) { - - // Don't send this event through to the client. - event.preventDefault(); - - // Record the substituted key press so that it can be - // properly dealt with later. - substituteKeysPressed[keysym] = DEL_KEY; - - // Send through the delete key. - $scope.$broadcast('guacSyntheticKeydown', DEL_KEY); - } - - }); - - // Update pressed keys as they are released - $scope.$on('guacKeyup', function keyupListener(event, keysym, keyboard) { - - // Deal with substitute key presses - if (substituteKeysPressed[keysym]) { - event.preventDefault(); - $scope.$broadcast('guacSyntheticKeyup', substituteKeysPressed[keysym]); - delete substituteKeysPressed[keysym]; - } - - }); - - // Update page title when client title changes - $scope.$watch('getTitle(clientGroup)', function clientTitleChanged(title) { - $scope.page.title = title; - }); - - /** - * Returns whether the current connection has been flagged as unstable due - * to an apparent network disruption. - * - * @returns {Boolean} - * true if the current connection has been flagged as unstable, false - * otherwise. - */ - $scope.isConnectionUnstable = function isConnectionUnstable() { - return _.findIndex($scope.clientGroup.clients, client => client.clientState.tunnelUnstable) !== -1; - }; - - /** - * Immediately disconnects all currently-focused clients, if any. - */ - $scope.disconnect = function disconnect() { - - // Disconnect if client is available - if ($scope.clientGroup) { - $scope.clientGroup.clients.forEach(client => { - if (client.clientProperties.focused) - client.client.disconnect(); - }); - } - - // Hide menu - $scope.menu.shown = false; - - }; - - /** - * Disconnects the given ManagedClient, removing it from the current - * view. - * - * @param {ManagedClient} client - * The client to disconnect. - */ - $scope.closeClientTile = function closeClientTile(client) { - - $scope.addRemoveClient(client.id, true); - guacClientManager.removeManagedClient(client.id); - - // Ensure at least one client has focus (the only client with - // focus may just have been removed) - ManagedClientGroup.verifyFocus($scope.clientGroup); - - }; - - /** - * Action which immediately disconnects the currently-connected client, if - * any. - */ - var DISCONNECT_MENU_ACTION = { - name : 'CLIENT.ACTION_DISCONNECT', - className : 'danger disconnect', - callback : $scope.disconnect - }; - - /** - * Action that toggles fullscreen mode within the - * currently-connected client and then closes the menu. - */ - var FULLSCREEN_MENU_ACTION = { - name : 'CLIENT.ACTION_FULLSCREEN', - classname : 'fullscreen action', - callback : function fullscreen() { - - guacFullscreen.toggleFullscreenMode(); - $scope.menu.shown = false; - } - }; - - // Set client-specific menu actions - $scope.clientMenuActions = [ DISCONNECT_MENU_ACTION,FULLSCREEN_MENU_ACTION ]; - - /** - * @borrows Protocol.getNamespace - */ - $scope.getProtocolNamespace = Protocol.getNamespace; - - /** - * The currently-visible filesystem within the filesystem menu, if the - * filesystem menu is open. If no filesystem is currently visible, this - * will be null. - * - * @type ManagedFilesystem - */ - $scope.filesystemMenuContents = null; - - /** - * Hides the filesystem menu. - */ - $scope.hideFilesystemMenu = function hideFilesystemMenu() { - $scope.filesystemMenuContents = null; - }; - - /** - * Shows the filesystem menu, displaying the contents of the given - * filesystem within it. - * - * @param {ManagedFilesystem} filesystem - * The filesystem to show within the filesystem menu. - */ - $scope.showFilesystemMenu = function showFilesystemMenu(filesystem) { - $scope.filesystemMenuContents = filesystem; - }; - - /** - * Returns whether the filesystem menu should be visible. - * - * @returns {Boolean} - * true if the filesystem menu is shown, false otherwise. - */ - $scope.isFilesystemMenuShown = function isFilesystemMenuShown() { - return !!$scope.filesystemMenuContents && $scope.menu.shown; - }; - - // Automatically refresh display when filesystem menu is shown - $scope.$watch('isFilesystemMenuShown()', function refreshFilesystem() { - - // Refresh filesystem, if defined - var filesystem = $scope.filesystemMenuContents; - if (filesystem) - ManagedFilesystem.refresh(filesystem, filesystem.currentDirectory); - - }); - - /** - * Returns the full path to the given file as an ordered array of parent - * directories. - * - * @param {ManagedFilesystem.File} file - * The file whose full path should be retrieved. - * - * @returns {ManagedFilesystem.File[]} - * An array of directories which make up the hierarchy containing the - * given file, in order of increasing depth. - */ - $scope.getPath = function getPath(file) { - - var path = []; - - // Add all files to path in ascending order of depth - while (file && file.parent) { - path.unshift(file); - file = file.parent; - } - - return path; - - }; - - /** - * Changes the current directory of the given filesystem to the given - * directory. - * - * @param {ManagedFilesystem} filesystem - * The filesystem whose current directory should be changed. - * - * @param {ManagedFilesystem.File} file - * The directory to change to. - */ - $scope.changeDirectory = function changeDirectory(filesystem, file) { - ManagedFilesystem.changeDirectory(filesystem, file); - }; - - /** - * Begins a file upload through the attached Guacamole client for - * each file in the given FileList. - * - * @param {FileList} files - * The files to upload. - */ - $scope.uploadFiles = function uploadFiles(files) { - - // Upload each file - for (var i = 0; i < files.length; i++) - ManagedClient.uploadFile($scope.filesystemMenuContents.client, files[i], $scope.filesystemMenuContents); - - }; - - /** - * Determines whether the attached client group has any associated file - * transfers, regardless of those file transfers' state. - * - * @returns {Boolean} - * true if there are any file transfers associated with the - * attached client group, false otherise. - */ - $scope.hasTransfers = function hasTransfers() { - - // There are no file transfers if there is no client group - if (!$scope.clientGroup) - return false; - - return _.findIndex($scope.clientGroup.clients, ManagedClient.hasTransfers) !== -1; - - }; - - /** - * Returns whether the current user can share the current connection with - * other users. A connection can be shared if and only if there is at least - * one associated sharing profile. - * - * @returns {Boolean} - * true if the current user can share the current connection with other - * users, false otherwise. - */ - $scope.canShareConnection = function canShareConnection() { - - // If there is at least one sharing profile, the connection can be shared - for (var dummy in $scope.sharingProfiles) - return true; - - // Otherwise, sharing is not possible - return false; - - }; - - // Clean up when view destroyed - $scope.$on('$destroy', function clientViewDestroyed() { - setAttachedGroup(null); - - // always unset fullscreen mode to not confuse user - guacFullscreen.setFullscreenMode(false); - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacClient.js b/guacamole/src/main/frontend/src/app/client/directives/guacClient.js deleted file mode 100644 index 18a1b080c5..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacClient.js +++ /dev/null @@ -1,675 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for the guacamole client. - */ -angular.module('client').directive('guacClient', [function guacClient() { - - const directive = { - restrict: 'E', - replace: true, - templateUrl: 'app/client/templates/guacClient.html' - }; - - directive.scope = { - - /** - * The client to display within this guacClient directive. - * - * @type ManagedClient - */ - client : '=', - - /** - * Whether translation of touch to mouse events should emulate an - * absolute pointer device, or a relative pointer device. - * - * @type boolean - */ - emulateAbsoluteMouse : '=' - - }; - - directive.controller = ['$scope', '$injector', '$element', - function guacClientController($scope, $injector, $element) { - - // Required types - const ManagedClient = $injector.get('ManagedClient'); - - // Required services - const $rootScope = $injector.get('$rootScope'); - const $window = $injector.get('$window'); - - /** - * Whether the local, hardware mouse cursor is in use. - * - * @type Boolean - */ - let localCursor = false; - - /** - * The current Guacamole client instance. - * - * @type Guacamole.Client - */ - let client = null; - - /** - * The display of the current Guacamole client instance. - * - * @type Guacamole.Display - */ - let display = null; - - /** - * The element associated with the display of the current - * Guacamole client instance. - * - * @type Element - */ - let displayElement = null; - - /** - * The element which must contain the Guacamole display element. - * - * @type Element - */ - const displayContainer = $element.find('.display')[0]; - - /** - * The main containing element for the entire directive. - * - * @type Element - */ - const main = $element[0]; - - /** - * Guacamole mouse event object, wrapped around the main client - * display. - * - * @type Guacamole.Mouse - */ - const mouse = new Guacamole.Mouse(displayContainer); - - /** - * Guacamole absolute mouse emulation object, wrapped around the - * main client display. - * - * @type Guacamole.Mouse.Touchscreen - */ - const touchScreen = new Guacamole.Mouse.Touchscreen(displayContainer); - - /** - * Guacamole relative mouse emulation object, wrapped around the - * main client display. - * - * @type Guacamole.Mouse.Touchpad - */ - const touchPad = new Guacamole.Mouse.Touchpad(displayContainer); - - /** - * Guacamole touch event handling object, wrapped around the main - * client dislay. - * - * @type Guacamole.Touch - */ - const touch = new Guacamole.Touch(displayContainer); - - /** - * Updates the scale of the attached Guacamole.Client based on current window - * size and "auto-fit" setting. - */ - const updateDisplayScale = function updateDisplayScale() { - - if (!display) return; - - // Calculate scale to fit screen - $scope.client.clientProperties.minScale = Math.min( - main.offsetWidth / Math.max(display.getWidth(), 1), - main.offsetHeight / Math.max(display.getHeight(), 1) - ); - - // Calculate appropriate maximum zoom level - $scope.client.clientProperties.maxScale = Math.max($scope.client.clientProperties.minScale, 3); - - // Clamp zoom level, maintain auto-fit - if (display.getScale() < $scope.client.clientProperties.minScale || $scope.client.clientProperties.autoFit) - $scope.client.clientProperties.scale = $scope.client.clientProperties.minScale; - - else if (display.getScale() > $scope.client.clientProperties.maxScale) - $scope.client.clientProperties.scale = $scope.client.clientProperties.maxScale; - - }; - - /** - * Scrolls the client view such that the mouse cursor is visible. - * - * @param {Guacamole.Mouse.State} mouseState The current mouse - * state. - */ - const scrollToMouse = function scrollToMouse(mouseState) { - - // Determine mouse position within view - const mouse_view_x = mouseState.x + displayContainer.offsetLeft - main.scrollLeft; - const mouse_view_y = mouseState.y + displayContainer.offsetTop - main.scrollTop; - - // Determine viewport dimensions - const view_width = main.offsetWidth; - const view_height = main.offsetHeight; - - // Determine scroll amounts based on mouse position relative to document - - let scroll_amount_x; - if (mouse_view_x > view_width) - scroll_amount_x = mouse_view_x - view_width; - else if (mouse_view_x < 0) - scroll_amount_x = mouse_view_x; - else - scroll_amount_x = 0; - - let scroll_amount_y; - if (mouse_view_y > view_height) - scroll_amount_y = mouse_view_y - view_height; - else if (mouse_view_y < 0) - scroll_amount_y = mouse_view_y; - else - scroll_amount_y = 0; - - // Scroll (if necessary) to keep mouse on screen. - main.scrollLeft += scroll_amount_x; - main.scrollTop += scroll_amount_y; - - }; - - /** - * Return the name of the angular event associated with the provided - * mouse event. - * - * @param {Guacamole.Mouse.MouseEvent} event - * The mouse event to determine an angular event name for. - * - * @returns - * The name of the angular event associated with the provided - * mouse event. - */ - const getMouseEventName = event => { - switch (event.type) { - case 'mousedown': - return 'guacClientMouseDown'; - case 'mouseup': - return 'guacClientMouseUp'; - default: - return 'guacClientMouseMove'; - } - }; - - /** - * Handles a mouse event originating from the user's actual mouse. - * This differs from handleEmulatedMouseEvent() in that the - * software mouse cursor must be shown only if the user's browser - * does not support explicitly setting the hardware mouse cursor. - * - * @param {Guacamole.Mouse.MouseEvent} event - * The mouse event to handle. - */ - const handleMouseEvent = function handleMouseEvent(event) { - - // Do not attempt to handle mouse state changes if the client - // or display are not yet available - if (!client || !display) - return; - - event.stopPropagation(); - event.preventDefault(); - - // Send mouse state, show cursor if necessary - display.showCursor(!localCursor); - client.sendMouseState(event.state, true); - - // Broadcast the mouse event - $rootScope.$broadcast(getMouseEventName(event), event, client); - - }; - - /** - * Handles a mouse event originating from one of Guacamole's mouse - * emulation objects. This differs from handleMouseState() in that - * the software mouse cursor must always be shown (as the emulated - * mouse device will not have its own cursor). - * - * @param {Guacamole.Mouse.MouseEvent} event - * The mouse event to handle. - */ - const handleEmulatedMouseEvent = function handleEmulatedMouseEvent(event) { - - // Do not attempt to handle mouse state changes if the client - // or display are not yet available - if (!client || !display) - return; - - event.stopPropagation(); - event.preventDefault(); - - // Ensure software cursor is shown - display.showCursor(true); - - // Send mouse state, ensure cursor is visible - scrollToMouse(event.state); - client.sendMouseState(event.state, true); - - // Broadcast the mouse event - $rootScope.$broadcast(getMouseEventName(event), event, client); - - }; - - /** - * Return the name of the angular event associated with the provided - * touch event. - * - * @param {Guacamole.Touch.TouchEvent} event - * The touch event to determine an angular event name for. - * - * @returns - * The name of the angular event associated with the provided - * touch event. - */ - const getTouchEventName = event => { - switch (event.type) { - case 'touchstart': - return 'guacClientTouchStart'; - case 'touchend': - return 'guacClientTouchEnd'; - default: - return 'guacClientTouchMove'; - } - }; - - /** - * Handles a touch event originating from the user's device. - * - * @param {Guacamole.Touch.Event} touchEvent - * The touch event. - */ - const handleTouchEvent = function handleTouchEvent(event) { - - // Do not attempt to handle touch state changes if the client - // or display are not yet available - if (!client || !display) - return; - - event.preventDefault(); - - // Send touch state, hiding local cursor - display.showCursor(false); - client.sendTouchState(event.state, true); - - // Broadcast the touch event - $rootScope.$broadcast(getTouchEventName(event), event, client); - - }; - - // Attach any given managed client - $scope.$watch('client', function attachManagedClient(managedClient) { - - // Remove any existing display - displayContainer.innerHTML = ""; - - // Only proceed if a client is given - if (!managedClient) - return; - - // Get Guacamole client instance - client = managedClient.client; - - // Attach possibly new display - display = client.getDisplay(); - display.scale($scope.client.clientProperties.scale); - - // Add display element - displayElement = display.getElement(); - displayContainer.appendChild(displayElement); - - // Do nothing when the display element is clicked on - display.getElement().onclick = function(e) { - e.preventDefault(); - return false; - }; - - // Connect and update interface to match required size, deferring - // connecting until a future element resize if the main element - // size (desired display size) is not known and thus can't be sent - // during the handshake - $scope.mainElementResized(); - - }); - - // Update actual view scrollLeft when scroll properties change - $scope.$watch('client.clientProperties.scrollLeft', function scrollLeftChanged(scrollLeft) { - main.scrollLeft = scrollLeft; - $scope.client.clientProperties.scrollLeft = main.scrollLeft; - }); - - // Update actual view scrollTop when scroll properties change - $scope.$watch('client.clientProperties.scrollTop', function scrollTopChanged(scrollTop) { - main.scrollTop = scrollTop; - $scope.client.clientProperties.scrollTop = main.scrollTop; - }); - - // Update scale when display is resized - $scope.$watch('client.managedDisplay.size', function setDisplaySize() { - $scope.$evalAsync(updateDisplayScale); - }); - - // Keep local cursor up-to-date - $scope.$watch('client.managedDisplay.cursor', function setCursor(cursor) { - if (cursor) - localCursor = mouse.setCursor(cursor.canvas, cursor.x, cursor.y); - }); - - // Update touch event handling depending on remote multi-touch - // support and mouse emulation mode - $scope.$watchGroup([ - 'client.multiTouchSupport', - 'emulateAbsoluteMouse' - ], function touchBehaviorChanged() { - - // Clear existing event handling - touch.offEach(['touchstart', 'touchmove', 'touchend'], handleTouchEvent); - touchScreen.offEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); - touchPad.offEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); - - // Directly forward local touch events - if ($scope.client.multiTouchSupport) - touch.onEach(['touchstart', 'touchmove', 'touchend'], handleTouchEvent); - - // Switch to touchscreen if mouse emulation is required and - // absolute mouse emulation is preferred - else if ($scope.emulateAbsoluteMouse) - touchScreen.onEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); - - // Use touchpad for mouse emulation if absolute mouse emulation - // is not preferred - else - touchPad.onEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); - - }); - - // Adjust scale if modified externally - $scope.$watch('client.clientProperties.scale', function changeScale(scale) { - - // Fix scale within limits - scale = Math.max(scale, $scope.client.clientProperties.minScale); - scale = Math.min(scale, $scope.client.clientProperties.maxScale); - - // If at minimum zoom level, hide scroll bars - if (scale === $scope.client.clientProperties.minScale) - main.style.overflow = "hidden"; - - // If not at minimum zoom level, show scroll bars - else - main.style.overflow = "auto"; - - // Apply scale if client attached - if (display) - display.scale(scale); - - if (scale !== $scope.client.clientProperties.scale) - $scope.client.clientProperties.scale = scale; - - }); - - // If autofit is set, the scale should be set to the minimum scale, filling the screen - $scope.$watch('client.clientProperties.autoFit', function changeAutoFit(autoFit) { - if(autoFit) - $scope.client.clientProperties.scale = $scope.client.clientProperties.minScale; - }); - - /** - * Sends the current size of the main element (the display container) - * to the Guacamole server, requesting that the remote display be - * resized. If the Guacamole client is not yet connected, it will be - * connected and the current size will sent through the initial - * handshake. If the size of the main element is not yet known, this - * function may need to be invoked multiple times until the size is - * known and the client may be connected. - */ - $scope.mainElementResized = function mainElementResized() { - - // Send new display size, if changed - if (client && display && main.offsetWidth && main.offsetHeight) { - - // Connect, if not already connected - ManagedClient.connect($scope.client, main.offsetWidth, main.offsetHeight); - - const pixelDensity = $window.devicePixelRatio || 1; - const width = main.offsetWidth * pixelDensity; - const height = main.offsetHeight * pixelDensity; - - if (display.getWidth() !== width || display.getHeight() !== height) - client.sendSize(width, height); - - } - - $scope.$evalAsync(updateDisplayScale); - - }; - - // Scroll client display if absolute mouse is in use (the same drag - // gesture is needed for moving the mouse pointer with relative mouse) - $scope.clientDrag = function clientDrag(inProgress, startX, startY, currentX, currentY, deltaX, deltaY) { - - if ($scope.emulateAbsoluteMouse) { - $scope.client.clientProperties.scrollLeft -= deltaX; - $scope.client.clientProperties.scrollTop -= deltaY; - } - - return false; - - }; - - /** - * If a pinch gesture is in progress, the scale of the client display when - * the pinch gesture began. - * - * @type Number - */ - let initialScale = null; - - /** - * If a pinch gesture is in progress, the X coordinate of the point on the - * client display that was centered within the pinch at the time the - * gesture began. - * - * @type Number - */ - let initialCenterX = 0; - - /** - * If a pinch gesture is in progress, the Y coordinate of the point on the - * client display that was centered within the pinch at the time the - * gesture began. - * - * @type Number - */ - let initialCenterY = 0; - - // Zoom and pan client via pinch gestures - $scope.clientPinch = function clientPinch(inProgress, startLength, currentLength, centerX, centerY) { - - // Do not handle pinch gestures if they would conflict with remote - // handling of similar gestures - if ($scope.client.multiTouchSupport > 1) - return false; - - // Do not handle pinch gestures while relative mouse is in use (2+ - // contact point gestures are used by relative mouse emulation to - // support right click, middle click, and scrolling) - if (!$scope.emulateAbsoluteMouse) - return false; - - // Stop gesture if not in progress - if (!inProgress) { - initialScale = null; - return false; - } - - // Set initial scale if gesture has just started - if (!initialScale) { - initialScale = $scope.client.clientProperties.scale; - initialCenterX = (centerX + $scope.client.clientProperties.scrollLeft) / initialScale; - initialCenterY = (centerY + $scope.client.clientProperties.scrollTop) / initialScale; - } - - // Determine new scale absolutely - let currentScale = initialScale * currentLength / startLength; - - // Fix scale within limits - scroll will be miscalculated otherwise - currentScale = Math.max(currentScale, $scope.client.clientProperties.minScale); - currentScale = Math.min(currentScale, $scope.client.clientProperties.maxScale); - - // Update scale based on pinch distance - $scope.client.clientProperties.autoFit = false; - $scope.client.clientProperties.scale = currentScale; - - // Scroll display to keep original pinch location centered within current pinch - $scope.client.clientProperties.scrollLeft = initialCenterX * currentScale - centerX; - $scope.client.clientProperties.scrollTop = initialCenterY * currentScale - centerY; - - return false; - - }; - - // Ensure focus is regained via mousedown before forwarding event - mouse.on('mousedown', document.body.focus.bind(document.body)); - - // Forward all mouse events - mouse.onEach(['mousedown', 'mousemove', 'mouseup'], handleMouseEvent); - - // Hide software cursor when mouse leaves display - mouse.on('mouseout', function() { - if (!display) return; - display.showCursor(false); - }); - - // Update remote clipboard if local clipboard changes - $scope.$on('guacClipboard', function onClipboard(event, data) { - ManagedClient.setClipboard($scope.client, data); - }); - - // Translate local keydown events to remote keydown events if keyboard is enabled - $scope.$on('guacKeydown', function keydownListener(event, keysym, keyboard) { - if ($scope.client.clientProperties.focused) { - client.sendKeyEvent(1, keysym); - event.preventDefault(); - } - }); - - // Translate local keyup events to remote keyup events if keyboard is enabled - $scope.$on('guacKeyup', function keyupListener(event, keysym, keyboard) { - if ($scope.client.clientProperties.focused) { - client.sendKeyEvent(0, keysym); - event.preventDefault(); - } - }); - - // Universally handle all synthetic keydown events - $scope.$on('guacSyntheticKeydown', function syntheticKeydownListener(event, keysym) { - if ($scope.client.clientProperties.focused) - client.sendKeyEvent(1, keysym); - }); - - // Universally handle all synthetic keyup events - $scope.$on('guacSyntheticKeyup', function syntheticKeyupListener(event, keysym) { - if ($scope.client.clientProperties.focused) - client.sendKeyEvent(0, keysym); - }); - - /** - * Whether a drag/drop operation is currently in progress (the user has - * dragged a file over the Guacamole connection but has not yet - * dropped it). - * - * @type boolean - */ - $scope.dropPending = false; - - /** - * Displays a visual indication that dropping the file currently - * being dragged is possible. Further propagation and default behavior - * of the given event is automatically prevented. - * - * @param {Event} e - * The event related to the in-progress drag/drop operation. - */ - const notifyDragStart = function notifyDragStart(e) { - - e.preventDefault(); - e.stopPropagation(); - - $scope.$apply(() => { - $scope.dropPending = true; - }); - - }; - - /** - * Removes the visual indication that dropping the file currently - * being dragged is possible. Further propagation and default behavior - * of the given event is automatically prevented. - * - * @param {Event} e - * The event related to the end of the former drag/drop operation. - */ - const notifyDragEnd = function notifyDragEnd(e) { - - e.preventDefault(); - e.stopPropagation(); - - $scope.$apply(() => { - $scope.dropPending = false; - }); - - }; - - main.addEventListener('dragenter', notifyDragStart, false); - main.addEventListener('dragover', notifyDragStart, false); - main.addEventListener('dragleave', notifyDragEnd, false); - - // File drop event handler - main.addEventListener('drop', function(e) { - - notifyDragEnd(e); - - // Ignore file drops if no attached client - if (!$scope.client) - return; - - // Upload each file - const files = e.dataTransfer.files; - for (let i = 0; i < files.length; i++) - ManagedClient.uploadFile($scope.client, files[i]); - - }, false); - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacClientNotification.js b/guacamole/src/main/frontend/src/app/client/directives/guacClientNotification.js deleted file mode 100644 index 03344b627f..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacClientNotification.js +++ /dev/null @@ -1,409 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for displaying a non-global notification describing the status - * of a specific Guacamole client, including prompts for any information - * necessary to continue the connection. - */ -angular.module('client').directive('guacClientNotification', [function guacClientNotification() { - - const directive = { - restrict: 'E', - replace: true, - templateUrl: 'app/client/templates/guacClientNotification.html' - }; - - directive.scope = { - - /** - * The client whose status should be displayed. - * - * @type ManagedClient - */ - client : '=' - - }; - - directive.controller = ['$scope', '$injector', '$element', - function guacClientNotificationController($scope, $injector, $element) { - - // Required types - const ManagedClient = $injector.get('ManagedClient'); - const ManagedClientState = $injector.get('ManagedClientState'); - const Protocol = $injector.get('Protocol'); - - // Required services - const $location = $injector.get('$location'); - const authenticationService = $injector.get('authenticationService'); - const guacClientManager = $injector.get('guacClientManager'); - const guacTranslate = $injector.get('guacTranslate'); - const requestService = $injector.get('requestService'); - const userPageService = $injector.get('userPageService'); - - /** - * A Notification object describing the client status to display as a - * dialog or prompt, as would be accepted by guacNotification.showStatus(), - * or false if no status should be shown. - * - * @type {Notification|Object|Boolean} - */ - $scope.status = false; - - /** - * All error codes for which automatic reconnection is appropriate when a - * client error occurs. - */ - const CLIENT_AUTO_RECONNECT = { - 0x0200: true, - 0x0202: true, - 0x0203: true, - 0x0207: true, - 0x0208: true, - 0x0301: true, - 0x0308: true - }; - - /** - * All error codes for which automatic reconnection is appropriate when a - * tunnel error occurs. - */ - const TUNNEL_AUTO_RECONNECT = { - 0x0200: true, - 0x0202: true, - 0x0203: true, - 0x0207: true, - 0x0208: true, - 0x0308: true - }; - - /** - * Action which logs out from Guacamole entirely. - */ - const LOGOUT_ACTION = { - name : "CLIENT.ACTION_LOGOUT", - className : "logout button", - callback : function logoutCallback() { - authenticationService.logout() - ['catch'](requestService.IGNORE); - } - }; - - /** - * Action which returns the user to the home screen. If the home page has - * not yet been determined, this will be null. - */ - let NAVIGATE_HOME_ACTION = null; - - // Assign home page action once user's home page has been determined - userPageService.getHomePage() - .then(function homePageRetrieved(homePage) { - - // Define home action only if different from current location - if ($location.path() !== homePage.url) { - NAVIGATE_HOME_ACTION = { - name : "CLIENT.ACTION_NAVIGATE_HOME", - className : "home button", - callback : function navigateHomeCallback() { - $location.url(homePage.url); - } - }; - } - - }, requestService.WARN); - - /** - * Action which replaces the current client with a newly-connected client. - */ - const RECONNECT_ACTION = { - name : "CLIENT.ACTION_RECONNECT", - className : "reconnect button", - callback : function reconnectCallback() { - $scope.client = guacClientManager.replaceManagedClient($scope.client.id); - $scope.status = false; - } - }; - - /** - * The reconnect countdown to display if an error or status warrants an - * automatic, timed reconnect. - */ - const RECONNECT_COUNTDOWN = { - text: "CLIENT.TEXT_RECONNECT_COUNTDOWN", - callback: RECONNECT_ACTION.callback, - remaining: 15 - }; - - /** - * Displays a notification at the end of a Guacamole connection, whether - * that connection is ending normally or due to an error. As the end of - * a Guacamole connection may be due to changes in authentication status, - * this will also implicitly peform a re-authentication attempt to check - * for such changes, possibly resulting in auth-related events like - * guacInvalidCredentials. - * - * @param {Notification|Boolean|Object} status - * The status notification to show, as would be accepted by - * guacNotification.showStatus(). - */ - const notifyConnectionClosed = function notifyConnectionClosed(status) { - - // Re-authenticate to verify auth status at end of connection - authenticationService.updateCurrentToken($location.search()) - ['catch'](requestService.IGNORE) - - // Show the requested status once the authentication check has finished - ['finally'](function authenticationCheckComplete() { - $scope.status = status; - }); - - }; - - /** - * Notifies the user that the connection state has changed. - * - * @param {String} connectionState - * The current connection state, as defined by - * ManagedClientState.ConnectionState. - */ - const notifyConnectionState = function notifyConnectionState(connectionState) { - - // Hide any existing status - $scope.status = false; - - // Do not display status if status not known - if (!connectionState) - return; - - // Build array of available actions - let actions; - if (NAVIGATE_HOME_ACTION) - actions = [ NAVIGATE_HOME_ACTION, RECONNECT_ACTION, LOGOUT_ACTION ]; - else - actions = [ RECONNECT_ACTION, LOGOUT_ACTION ]; - - // Get any associated status code - const status = $scope.client.clientState.statusCode; - - // Connecting - if (connectionState === ManagedClientState.ConnectionState.CONNECTING - || connectionState === ManagedClientState.ConnectionState.WAITING) { - $scope.status = { - className : "connecting", - title: "CLIENT.DIALOG_HEADER_CONNECTING", - text: { - key : "CLIENT.TEXT_CLIENT_STATUS_" + connectionState.toUpperCase() - } - }; - } - - // Client error - else if (connectionState === ManagedClientState.ConnectionState.CLIENT_ERROR) { - - // Translation IDs for this error code - const errorPrefix = "CLIENT.ERROR_CLIENT_"; - const errorId = errorPrefix + status.toString(16).toUpperCase(); - const defaultErrorId = errorPrefix + "DEFAULT"; - - // Determine whether the reconnect countdown applies - const countdown = (status in CLIENT_AUTO_RECONNECT) ? RECONNECT_COUNTDOWN : null; - - // Use the guacTranslate service to determine if there is a translation for - // this error code; if not, use the default - guacTranslate(errorId, defaultErrorId).then( - - // Show error status - translationResult => notifyConnectionClosed({ - className : "error", - title : "CLIENT.DIALOG_HEADER_CONNECTION_ERROR", - text : { - key : translationResult.id - }, - countdown : countdown, - actions : actions - }) - ); - - } - - // Tunnel error - else if (connectionState === ManagedClientState.ConnectionState.TUNNEL_ERROR) { - - // Translation IDs for this error code - const errorPrefix = "CLIENT.ERROR_TUNNEL_"; - const errorId = errorPrefix + status.toString(16).toUpperCase(); - const defaultErrorId = errorPrefix + "DEFAULT"; - - // Determine whether the reconnect countdown applies - const countdown = (status in TUNNEL_AUTO_RECONNECT) ? RECONNECT_COUNTDOWN : null; - - // Use the guacTranslate service to determine if there is a translation for - // this error code; if not, use the default - guacTranslate(errorId, defaultErrorId).then( - - // Show error status - translationResult => notifyConnectionClosed({ - className : "error", - title : "CLIENT.DIALOG_HEADER_CONNECTION_ERROR", - text : { - key : translationResult.id - }, - countdown : countdown, - actions : actions - }) - ); - - } - - // Disconnected - else if (connectionState === ManagedClientState.ConnectionState.DISCONNECTED) { - notifyConnectionClosed({ - title : "CLIENT.DIALOG_HEADER_DISCONNECTED", - text : { - key : "CLIENT.TEXT_CLIENT_STATUS_" + connectionState.toUpperCase() - }, - actions : actions - }); - } - - // Hide status for all other states - else - $scope.status = false; - - }; - - /** - * Prompts the user to enter additional connection parameters. If the - * protocol and associated parameters of the underlying connection are not - * yet known, this function has no effect and should be re-invoked once - * the parameters are known. - * - * @param {Object.} requiredParameters - * The set of all parameters requested by the server via "required" - * instructions, where each object key is the name of a requested - * parameter and each value is the current value entered by the user. - */ - const notifyParametersRequired = function notifyParametersRequired(requiredParameters) { - - /** - * Action which submits the current set of parameter values, requesting - * that the connection continue. - */ - const SUBMIT_PARAMETERS = { - name : "CLIENT.ACTION_CONTINUE", - className : "button", - callback : function submitParameters() { - if ($scope.client) { - const params = $scope.client.requiredParameters; - $scope.client.requiredParameters = null; - ManagedClient.sendArguments($scope.client, params); - } - } - }; - - /** - * Action which cancels submission of additional parameters and - * disconnects from the current connection. - */ - const CANCEL_PARAMETER_SUBMISSION = { - name : "CLIENT.ACTION_CANCEL", - className : "button", - callback : function cancelSubmission() { - $scope.client.requiredParameters = null; - $scope.client.client.disconnect(); - } - }; - - // Attempt to prompt for parameters only if the parameters that apply - // to the underlying connection are known - if (!$scope.client.protocol || !$scope.client.forms) - return; - - // Prompt for parameters - $scope.status = { - className : "parameters-required", - formNamespace : Protocol.getNamespace($scope.client.protocol), - forms : $scope.client.forms, - formModel : requiredParameters, - formSubmitCallback : SUBMIT_PARAMETERS.callback, - actions : [ SUBMIT_PARAMETERS, CANCEL_PARAMETER_SUBMISSION ] - }; - - }; - - /** - * Returns whether the given connection state allows for submission of - * connection parameters via "argv" instructions. - * - * @param {String} connectionState - * The connection state to test, as defined by - * ManagedClientState.ConnectionState. - * - * @returns {boolean} - * true if the given connection state allows submission of connection - * parameters via "argv" instructions, false otherwise. - */ - const canSubmitParameters = function canSubmitParameters(connectionState) { - return (connectionState === ManagedClientState.ConnectionState.WAITING || - connectionState === ManagedClientState.ConnectionState.CONNECTED); - }; - - // Show status dialog when connection status changes - $scope.$watchGroup([ - 'client.clientState.connectionState', - 'client.requiredParameters', - 'client.protocol', - 'client.forms' - ], function clientStateChanged(newValues) { - - const connectionState = newValues[0]; - const requiredParameters = newValues[1]; - - // Prompt for parameters only if parameters can actually be submitted - if (requiredParameters && canSubmitParameters(connectionState)) - notifyParametersRequired(requiredParameters); - - // Otherwise, just show general connection state - else - notifyConnectionState(connectionState); - - }); - - /** - * Prevents the default behavior of the given AngularJS event if a - * notification is currently shown and the client is focused. - * - * @param {event} e - * The AngularJS event to selectively prevent. - */ - const preventDefaultDuringNotification = function preventDefaultDuringNotification(e) { - if ($scope.status && $scope.client.clientProperties.focused) - e.preventDefault(); - }; - - // Block internal handling of key events (by the client) if a - // notification is visible - $scope.$on('guacBeforeKeydown', preventDefaultDuringNotification); - $scope.$on('guacBeforeKeyup', preventDefaultDuringNotification); - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacClientPanel.js b/guacamole/src/main/frontend/src/app/client/directives/guacClientPanel.js deleted file mode 100644 index efd23932d5..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacClientPanel.js +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A toolbar/panel which displays a list of active Guacamole connections. The - * panel is fixed to the bottom-right corner of its container and can be - * manually hidden/exposed by the user. - */ -angular.module('client').directive('guacClientPanel', ['$injector', function guacClientPanel($injector) { - - // Required services - const guacClientManager = $injector.get('guacClientManager'); - const sessionStorageFactory = $injector.get('sessionStorageFactory'); - - // Required types - const ManagedClientGroup = $injector.get('ManagedClientGroup'); - const ManagedClientState = $injector.get('ManagedClientState'); - - /** - * Getter/setter for the boolean flag controlling whether the client panel - * is currently hidden. This flag is maintained in session-local storage to - * allow the state of the panel to persist despite navigation within the - * same tab. When hidden, the panel will be collapsed against the right - * side of the container. By default, the panel is visible. - * - * @type Function - */ - var panelHidden = sessionStorageFactory.create(false); - - return { - // Element only - restrict: 'E', - replace: true, - scope: { - - /** - * The ManagedClientGroup instances associated with the active - * connections to be displayed within this panel. - * - * @type ManagedClientGroup[] - */ - clientGroups : '=' - - }, - templateUrl: 'app/client/templates/guacClientPanel.html', - controller: ['$scope', '$element', function guacClientPanelController($scope, $element) { - - /** - * The DOM element containing the scrollable portion of the client - * panel. - * - * @type Element - */ - var scrollableArea = $element.find('.client-panel-connection-list')[0]; - - /** - * On-scope reference to session-local storage of the flag - * controlling whether then panel is hidden. - */ - $scope.panelHidden = panelHidden; - - /** - * Returns whether this panel currently has any client groups - * associated with it. - * - * @return {Boolean} - * true if at least one client group is associated with this - * panel, false otherwise. - */ - $scope.hasClientGroups = function hasClientGroups() { - return $scope.clientGroups && $scope.clientGroups.length; - }; - - /** - * @borrows ManagedClientGroup.getIdentifier - */ - $scope.getIdentifier = ManagedClientGroup.getIdentifier; - - /** - * @borrows ManagedClientGroup.getTitle - */ - $scope.getTitle = ManagedClientGroup.getTitle; - - /** - * Returns whether the status of any client within the given client - * group has changed in a way that requires the user's attention. - * This may be due to an error, or due to a server-initiated - * disconnect. - * - * @param {ManagedClientGroup} clientGroup - * The client group to test. - * - * @returns {Boolean} - * true if the given client requires the user's attention, - * false otherwise. - */ - $scope.hasStatusUpdate = function hasStatusUpdate(clientGroup) { - return _.findIndex(clientGroup.clients, (client) => { - - // Test whether the client has encountered an error - switch (client.clientState.connectionState) { - case ManagedClientState.ConnectionState.CONNECTION_ERROR: - case ManagedClientState.ConnectionState.TUNNEL_ERROR: - case ManagedClientState.ConnectionState.DISCONNECTED: - return true; - } - - return false; - - }) !== -1; - }; - - /** - * Initiates an orderly disconnect of all clients within the given - * group. The clients are removed from management such that - * attempting to connect to any of the same connections will result - * in new connections being established, rather than displaying a - * notification that the connection has ended. - * - * @param {ManagedClientGroup} clientGroup - * The group of clients to disconnect. - */ - $scope.disconnect = function disconnect(clientGroup) { - guacClientManager.removeManagedClientGroup(ManagedClientGroup.getIdentifier(clientGroup)); - }; - - /** - * Toggles whether the client panel is currently hidden. - */ - $scope.togglePanel = function togglePanel() { - panelHidden(!panelHidden()); - }; - - // Override vertical scrolling, scrolling horizontally instead - scrollableArea.addEventListener('wheel', function reorientVerticalScroll(e) { - - var deltaMultiplier = { - /* DOM_DELTA_PIXEL */ 0x00: 1, - /* DOM_DELTA_LINE */ 0x01: 15, - /* DOM_DELTA_PAGE */ 0x02: scrollableArea.offsetWidth - }; - - if (e.deltaY) { - this.scrollLeft += e.deltaY * (deltaMultiplier[e.deltaMode] || deltaMultiplier(0x01)); - e.preventDefault(); - } - - }); - - }] - }; -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacClientUserCount.js b/guacamole/src/main/frontend/src/app/client/directives/guacClientUserCount.js deleted file mode 100644 index 3c42fc3ea6..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacClientUserCount.js +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive that displays a status indicator showing the number of users - * joined to a connection. The specific usernames of those users are visible in - * a tooltip on mouseover, and small notifications are displayed as users - * join/leave the connection. - */ -angular.module('client').directive('guacClientUserCount', [function guacClientUserCount() { - - const directive = { - restrict: 'E', - replace: true, - templateUrl: 'app/client/templates/guacClientUserCount.html' - }; - - directive.scope = { - - /** - * The client whose current users should be displayed. - * - * @type ManagedClient - */ - client : '=' - - }; - - directive.controller = ['$scope', '$injector', '$element', - function guacClientUserCountController($scope, $injector, $element) { - - // Required types - var AuthenticationResult = $injector.get('AuthenticationResult'); - - // Required services - var $translate = $injector.get('$translate'); - - /** - * The maximum number of messages displayed by this directive at any - * given time. Old messages will be discarded as necessary to ensure - * the number of messages displayed never exceeds this value. - * - * @constant - * @type number - */ - var MAX_MESSAGES = 3; - - /** - * The list that should contain any notifications regarding users - * joining or leaving the connection. - * - * @type HTMLUListElement - */ - var messages = $element.find('.client-user-count-messages')[0]; - - /** - * Map of the usernames of all users of the current connection to the - * number of concurrent connections those users have to the current - * connection. - * - * @type Object. - */ - $scope.userCounts = {}; - - /** - * Displays a message noting that a change related to a particular user - * of this connection has occurred. - * - * @param {!string} str - * The key of the translation string containing the message to - * display. This translation key must accept "USERNAME" as the - * name of the translation parameter containing the username of - * the user in question. - * - * @param {!string} username - * The username of the user in question. - */ - var notify = function notify(str, username) { - $translate(str, { 'USERNAME' : username }).then(function translationReady(text) { - - if (messages.childNodes.length === 3) - messages.removeChild(messages.lastChild); - - var message = document.createElement('li'); - message.className = 'client-user-count-message'; - message.textContent = text; - messages.insertBefore(message, messages.firstChild); - - // Automatically remove the notification after its "fadeout" - // animation ends. NOTE: This will not fire if the element is - // not visible at all. - message.addEventListener('animationend', function animationEnded() { - messages.removeChild(message); - }); - - }); - }; - - /** - * Displays a message noting that a particular user has joined the - * current connection. - * - * @param {!string} username - * The username of the user that joined. - */ - var notifyUserJoined = function notifyUserJoined(username) { - if ($scope.isAnonymous(username)) - notify('CLIENT.TEXT_ANONYMOUS_USER_JOINED', username); - else - notify('CLIENT.TEXT_USER_JOINED', username); - }; - - /** - * Displays a message noting that a particular user has left the - * current connection. - * - * @param {!string} username - * The username of the user that left. - */ - var notifyUserLeft = function notifyUserLeft(username) { - if ($scope.isAnonymous(username)) - notify('CLIENT.TEXT_ANONYMOUS_USER_LEFT', username); - else - notify('CLIENT.TEXT_USER_LEFT', username); - }; - - /** - * The ManagedClient attached to this directive at the time the - * notification update scope watch was last invoked. This is necessary - * as $scope.$watchGroup() does not allow for the callback to know - * whether the scope was previously uninitialized (it's "oldValues" - * parameter receives a copy of the new values if there are no old - * values). - * - * @type ManagedClient - */ - var oldClient = null; - - /** - * Returns whether the given username represents an anonymous user. - * - * @param {!string} username - * The username of the user to check. - * - * @returns {!boolean} - * true if the given username represents an anonymous user, false - * otherwise. - */ - $scope.isAnonymous = function isAnonymous(username) { - return username === AuthenticationResult.ANONYMOUS_USERNAME; - }; - - /** - * Returns the translation key of the translation string that should be - * used to render the number of connections a user with the given - * username has to the current connection. The appropriate string will - * vary by whether the user is anonymous. - * - * @param {!string} username - * The username of the user to check. - * - * @returns {!string} - * The translation key of the translation string that should be - * used to render the number of connections the user with the given - * username has to the current connection. - */ - $scope.getUserCountTranslationKey = function getUserCountTranslationKey(username) { - return $scope.isAnonymous(username) ? 'CLIENT.INFO_ANONYMOUS_USER_COUNT' : 'CLIENT.INFO_USER_COUNT'; - }; - - // Update visible notifications as users join/leave - $scope.$watchGroup([ 'client', 'client.userCount' ], function usersChanged() { - - // Resynchronize directive with state of any attached client when - // the client changes, to ensure notifications are only shown for - // future changes in users present - if (oldClient !== $scope.client) { - - $scope.userCounts = {}; - oldClient = $scope.client; - - angular.forEach($scope.client.users, function initUsers(connections, username) { - var count = Object.keys(connections).length; - $scope.userCounts[username] = count; - }); - - return; - - } - - // Display join/leave notifications for users who are currently - // connected but whose connection counts have changed - angular.forEach($scope.client.users, function addNewUsers(connections, username) { - - var count = Object.keys(connections).length; - var known = $scope.userCounts[username] || 0; - - if (count > known) - notifyUserJoined(username); - else if (count < known) - notifyUserLeft(username); - - $scope.userCounts[username] = count; - - }); - - // Display leave notifications for users who are no longer connected - angular.forEach($scope.userCounts, function removeOldUsers(count, username) { - if (!$scope.client.users[username]) { - notifyUserLeft(username); - delete $scope.userCounts[username]; - } - }); - - }); - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacClientZoom.js b/guacamole/src/main/frontend/src/app/client/directives/guacClientZoom.js deleted file mode 100644 index 471ca19738..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacClientZoom.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for controlling the zoom level and scale-to-fit behavior of a - * a single Guacamole client. - */ -angular.module('client').directive('guacClientZoom', [function guacClientZoom() { - - const directive = { - restrict: 'E', - replace: true, - templateUrl: 'app/client/templates/guacClientZoom.html' - }; - - directive.scope = { - - /** - * The client to control the zoom/autofit of. - * - * @type ManagedClient - */ - client : '=' - - }; - - directive.controller = ['$scope', '$injector', '$element', - function guacClientZoomController($scope, $injector, $element) { - - /** - * Zooms in by 10%, automatically disabling autofit. - */ - $scope.zoomIn = function zoomIn() { - $scope.client.clientProperties.autoFit = false; - $scope.client.clientProperties.scale += 0.1; - }; - - /** - * Zooms out by 10%, automatically disabling autofit. - */ - $scope.zoomOut = function zoomOut() { - $scope.client.clientProperties.autoFit = false; - $scope.client.clientProperties.scale -= 0.1; - }; - - /** - * Resets the client autofit setting to false. - */ - $scope.clearAutoFit = function clearAutoFit() { - $scope.client.clientProperties.autoFit = false; - }; - - /** - * Notifies that the autofit setting has been manually changed by the - * user. - */ - $scope.autoFitChanged = function autoFitChanged() { - - // Reset to 100% scale when autofit is first disabled - if (!$scope.client.clientProperties.autoFit) - $scope.client.clientProperties.scale = 1; - - }; - - }]; - - return directive; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacFileBrowser.js b/guacamole/src/main/frontend/src/app/client/directives/guacFileBrowser.js deleted file mode 100644 index f1daf3eb69..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacFileBrowser.js +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which displays the contents of a filesystem received through the - * Guacamole client. - */ -angular.module('client').directive('guacFileBrowser', [function guacFileBrowser() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * @type ManagedFilesystem - */ - filesystem : '=' - - }, - - templateUrl: 'app/client/templates/guacFileBrowser.html', - controller: ['$scope', '$element', '$injector', function guacFileBrowserController($scope, $element, $injector) { - - // Required types - var ManagedFilesystem = $injector.get('ManagedFilesystem'); - - // Required services - var $interpolate = $injector.get('$interpolate'); - var $templateRequest = $injector.get('$templateRequest'); - - /** - * The jQuery-wrapped element representing the contents of the - * current directory within the file browser. - * - * @type Element[] - */ - var currentDirectoryContents = $element.find('.current-directory-contents'); - - /** - * Statically-cached template HTML used to render each file within - * a directory. Once available, this will be used through - * createFileElement() to generate the DOM elements which make up - * a directory listing. - * - * @type String - */ - var fileTemplate = null; - - /** - * Returns whether the given file is a normal file. - * - * @param {ManagedFilesystem.File} file - * The file to test. - * - * @returns {Boolean} - * true if the given file is a normal file, false otherwise. - */ - $scope.isNormalFile = function isNormalFile(file) { - return file.type === ManagedFilesystem.File.Type.NORMAL; - }; - - /** - * Returns whether the given file is a directory. - * - * @param {ManagedFilesystem.File} file - * The file to test. - * - * @returns {Boolean} - * true if the given file is a directory, false otherwise. - */ - $scope.isDirectory = function isDirectory(file) { - return file.type === ManagedFilesystem.File.Type.DIRECTORY; - }; - - /** - * Changes the currently-displayed directory to the given - * directory. - * - * @param {ManagedFilesystem.File} file - * The directory to change to. - */ - $scope.changeDirectory = function changeDirectory(file) { - ManagedFilesystem.changeDirectory($scope.filesystem, file); - }; - - /** - * Initiates a download of the given file. The progress of the - * download can be observed through guacFileTransferManager. - * - * @param {ManagedFilesystem.File} file - * The file to download. - */ - $scope.downloadFile = function downloadFile(file) { - ManagedFilesystem.downloadFile($scope.filesystem, file.streamName); - }; - - /** - * Recursively interpolates all text nodes within the DOM tree of - * the given element. All other node types, attributes, etc. will - * be left uninterpolated. - * - * @param {Element} element - * The element at the root of the DOM tree to be interpolated. - * - * @param {Object} context - * The evaluation context to use when evaluating expressions - * embedded in text nodes within the provided element. - */ - var interpolateElement = function interpolateElement(element, context) { - - // Interpolate the contents of text nodes directly - if (element.nodeType === Node.TEXT_NODE) - element.nodeValue = $interpolate(element.nodeValue)(context); - - // Recursively interpolate the contents of all descendant text - // nodes - if (element.hasChildNodes()) { - var children = element.childNodes; - for (var i = 0; i < children.length; i++) - interpolateElement(children[i], context); - } - - }; - - /** - * Creates a new element representing the given file and properly - * handling user events, bypassing the overhead incurred through - * use of ngRepeat and related techniques. - * - * Note that this function depends on the availability of the - * statically-cached fileTemplate. - * - * @param {ManagedFilesystem.File} file - * The file to generate an element for. - * - * @returns {Element[]} - * A jQuery-wrapped array containing a single DOM element - * representing the given file. - */ - var createFileElement = function createFileElement(file) { - - // Create from internal template - var element = angular.element(fileTemplate); - interpolateElement(element[0], file); - - // Double-clicking on unknown file types will do nothing - var fileAction = function doNothing() {}; - - // Change current directory when directories are clicked - if ($scope.isDirectory(file)) { - element.addClass('directory'); - fileAction = function changeDirectory() { - $scope.changeDirectory(file); - }; - } - - // Initiate downloads when normal files are clicked - else if ($scope.isNormalFile(file)) { - element.addClass('normal-file'); - fileAction = function downloadFile() { - $scope.downloadFile(file); - }; - } - - // Mark file as focused upon click - element.on('click', function handleFileClick() { - - // Fire file-specific action if already focused - if (element.hasClass('focused')) { - fileAction(); - element.removeClass('focused'); - } - - // Otherwise mark as focused - else { - element.parent().children().removeClass('focused'); - element.addClass('focused'); - } - - }); - - // Prevent text selection during navigation - element.on('selectstart', function avoidSelect(e) { - e.preventDefault(); - e.stopPropagation(); - }); - - return element; - - }; - - /** - * Sorts the given map of files, returning an array of those files - * grouped by file type (directories first, followed by non- - * directories) and sorted lexicographically. - * - * @param {Object.} files - * The map of files to sort. - * - * @returns {ManagedFilesystem.File[]} - * An array of all files in the given map, sorted - * lexicographically with directories first, followed by non- - * directories. - */ - var sortFiles = function sortFiles(files) { - - // Get all given files as an array - var unsortedFiles = []; - for (var name in files) - unsortedFiles.push(files[name]); - - // Sort files - directories first, followed by all other files - // sorted by name - return unsortedFiles.sort(function fileComparator(a, b) { - - // Directories come before non-directories - if ($scope.isDirectory(a) && !$scope.isDirectory(b)) - return -1; - - // Non-directories come after directories - if (!$scope.isDirectory(a) && $scope.isDirectory(b)) - return 1; - - // All other combinations are sorted by name - return a.name.localeCompare(b.name); - - }); - - }; - - // Watch directory contents once file template is available - $templateRequest('app/client/templates/file.html').then(function fileTemplateRetrieved(html) { - - // Store file template statically - fileTemplate = html; - - // Update the contents of the file browser whenever the current directory (or its contents) changes - $scope.$watch('filesystem.currentDirectory.files', function currentDirectoryChanged(files) { - - // Clear current content - currentDirectoryContents.html(''); - - // Display all files within current directory, sorted - angular.forEach(sortFiles(files), function displayFile(file) { - currentDirectoryContents.append(createFileElement(file)); - }); - - }); - - }, angular.noop); // end retrieve file template - - // Refresh file browser when any upload completes - $scope.$on('guacUploadComplete', function uploadComplete(event, filename) { - - // Refresh filesystem, if it exists - if ($scope.filesystem) - ManagedFilesystem.refresh($scope.filesystem, $scope.filesystem.currentDirectory); - - }); - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacFileTransfer.js b/guacamole/src/main/frontend/src/app/client/directives/guacFileTransfer.js deleted file mode 100644 index d016a721c0..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacFileTransfer.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Directive which displays an active file transfer, providing links for - * downloads, if applicable. - */ -angular.module('client').directive('guacFileTransfer', [function guacFileTransfer() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The file transfer to display. - * - * @type ManagedFileUpload|ManagedFileDownload - */ - transfer : '=' - - }, - - templateUrl: 'app/client/templates/guacFileTransfer.html', - controller: ['$scope', '$injector', function guacFileTransferController($scope, $injector) { - - // Required services - const guacTranslate = $injector.get('guacTranslate'); - - // Required types - var ManagedFileTransferState = $injector.get('ManagedFileTransferState'); - - /** - * Returns the unit string that is most appropriate for the - * number of bytes transferred thus far - either 'gb', 'mb', 'kb', - * or 'b'. - * - * @returns {String} - * The unit string that is most appropriate for the number of - * bytes transferred thus far. - */ - $scope.getProgressUnit = function getProgressUnit() { - - var bytes = $scope.transfer.progress; - - // Gigabytes - if (bytes > 1000000000) - return 'gb'; - - // Megabytes - if (bytes > 1000000) - return 'mb'; - - // Kilobytes - if (bytes > 1000) - return 'kb'; - - // Bytes - return 'b'; - - }; - - /** - * Returns the amount of data transferred thus far, in the units - * returned by getProgressUnit(). - * - * @returns {Number} - * The amount of data transferred thus far, in the units - * returned by getProgressUnit(). - */ - $scope.getProgressValue = function getProgressValue() { - - var bytes = $scope.transfer.progress; - if (!bytes) - return bytes; - - // Convert bytes to necessary units - switch ($scope.getProgressUnit()) { - - // Gigabytes - case 'gb': - return (bytes / 1000000000).toFixed(1); - - // Megabytes - case 'mb': - return (bytes / 1000000).toFixed(1); - - // Kilobytes - case 'kb': - return (bytes / 1000).toFixed(1); - - // Bytes - case 'b': - default: - return bytes; - - } - - }; - - /** - * Returns the percentage of bytes transferred thus far, if the - * overall length of the file is known. - * - * @returns {Number} - * The percentage of bytes transferred thus far, if the - * overall length of the file is known. - */ - $scope.getPercentDone = function getPercentDone() { - return $scope.transfer.progress / $scope.transfer.length * 100; - }; - - /** - * Determines whether the associated file transfer is in progress. - * - * @returns {Boolean} - * true if the file transfer is in progress, false othherwise. - */ - $scope.isInProgress = function isInProgress() { - - // Not in progress if there is no transfer - if (!$scope.transfer) - return false; - - // Determine in-progress status based on stream state - switch ($scope.transfer.transferState.streamState) { - - // IDLE or OPEN file transfers are active - case ManagedFileTransferState.StreamState.IDLE: - case ManagedFileTransferState.StreamState.OPEN: - return true; - - // All others are not active - default: - return false; - - } - - }; - - /** - * Returns whether the file associated with this file transfer can - * be saved locally via a call to save(). - * - * @returns {Boolean} - * true if a call to save() will result in the file being - * saved, false otherwise. - */ - $scope.isSavable = function isSavable() { - return !!$scope.transfer.blob; - }; - - /** - * Saves the downloaded file, if any. If this transfer is an upload - * or the download is not yet complete, this function has no - * effect. - */ - $scope.save = function save() { - - // Ignore if no blob exists - if (!$scope.transfer.blob) - return; - - // Save file - saveAs($scope.transfer.blob, $scope.transfer.filename); - - }; - - /** - * Returns whether an error has occurred. If an error has occurred, - * the transfer is no longer active, and the text of the error can - * be read from getErrorText(). - * - * @returns {Boolean} - * true if an error has occurred during transfer, false - * otherwise. - */ - $scope.hasError = function hasError() { - return $scope.transfer.transferState.streamState === ManagedFileTransferState.StreamState.ERROR; - }; - - // The translated error message for the current status code - $scope.translatedErrorMessage = ''; - - $scope.$watch('transfer.transferState.statusCode', function statusCodeChanged(statusCode) { - - // Determine translation name of error - const errorName = 'CLIENT.ERROR_UPLOAD_' + statusCode.toString(16).toUpperCase(); - - // Use translation string, or the default if no translation is found for this error code - guacTranslate(errorName, 'CLIENT.ERROR_UPLOAD_DEFAULT').then( - translationResult => $scope.translatedErrorMessage = translationResult.message - ); - - }); - - }] // end file transfer controller - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacFileTransferManager.js b/guacamole/src/main/frontend/src/app/client/directives/guacFileTransferManager.js deleted file mode 100644 index 3a7c3a3efd..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacFileTransferManager.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Directive which displays all active file transfers. - */ -angular.module('client').directive('guacFileTransferManager', [function guacFileTransferManager() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The client group whose file transfers should be managed by this - * directive. - * - * @type ManagedClientGroup - */ - clientGroup : '=' - - }, - - templateUrl: 'app/client/templates/guacFileTransferManager.html', - controller: ['$scope', '$injector', function guacFileTransferManagerController($scope, $injector) { - - // Required types - const ManagedClient = $injector.get('ManagedClient'); - const ManagedClientGroup = $injector.get('ManagedClientGroup'); - const ManagedFileTransferState = $injector.get('ManagedFileTransferState'); - - /** - * Determines whether the given file transfer state indicates an - * in-progress transfer. - * - * @param {ManagedFileTransferState} transferState - * The file transfer state to check. - * - * @returns {Boolean} - * true if the given file transfer state indicates an in- - * progress transfer, false otherwise. - */ - var isInProgress = function isInProgress(transferState) { - switch (transferState.streamState) { - - // IDLE or OPEN file transfers are active - case ManagedFileTransferState.StreamState.IDLE: - case ManagedFileTransferState.StreamState.OPEN: - return true; - - // All others are not active - default: - return false; - - } - }; - - /** - * Removes all file transfers which are not currently in-progress. - */ - $scope.clearCompletedTransfers = function clearCompletedTransfers() { - - // Nothing to clear if no client group attached - if (!$scope.clientGroup) - return; - - // Remove completed uploads - $scope.clientGroup.clients.forEach(client => { - client.uploads = client.uploads.filter(function isUploadInProgress(upload) { - return isInProgress(upload.transferState); - }); - }); - - }; - - /** - * @borrows ManagedClientGroup.hasMultipleClients - */ - $scope.hasMultipleClients = ManagedClientGroup.hasMultipleClients; - - /** - * @borrows ManagedClient.hasTransfers - */ - $scope.hasTransfers = ManagedClient.hasTransfers; - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacThumbnail.js b/guacamole/src/main/frontend/src/app/client/directives/guacThumbnail.js deleted file mode 100644 index 3b518e7df5..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacThumbnail.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for displaying a Guacamole client as a non-interactive - * thumbnail. - */ -angular.module('client').directive('guacThumbnail', [function guacThumbnail() { - - return { - // Element only - restrict: 'E', - replace: true, - scope: { - - /** - * The client to display within this guacThumbnail directive. - * - * @type ManagedClient - */ - client : '=' - - }, - templateUrl: 'app/client/templates/guacThumbnail.html', - controller: ['$scope', '$injector', '$element', function guacThumbnailController($scope, $injector, $element) { - - // Required services - var $window = $injector.get('$window'); - - /** - * The display of the current Guacamole client instance. - * - * @type Guacamole.Display - */ - var display = null; - - /** - * The element associated with the display of the current - * Guacamole client instance. - * - * @type Element - */ - var displayElement = null; - - /** - * The element which must contain the Guacamole display element. - * - * @type Element - */ - var displayContainer = $element.find('.display')[0]; - - /** - * The main containing element for the entire directive. - * - * @type Element - */ - var main = $element[0]; - - /** - * Updates the scale of the attached Guacamole.Client based on current window - * size and "auto-fit" setting. - */ - $scope.updateDisplayScale = function updateDisplayScale() { - - if (!display) return; - - // Fit within available area - display.scale(Math.min( - main.offsetWidth / Math.max(display.getWidth(), 1), - main.offsetHeight / Math.max(display.getHeight(), 1) - )); - - }; - - // Attach any given managed client - $scope.$watch('client', function attachManagedClient(managedClient) { - - // Remove any existing display - displayContainer.innerHTML = ""; - - // Only proceed if a client is given - if (!managedClient) - return; - - // Get Guacamole client instance - var client = managedClient.client; - - // Attach possibly new display - display = client.getDisplay(); - - // Add display element - displayElement = display.getElement(); - displayContainer.appendChild(displayElement); - - }); - - // Update scale when display is resized - $scope.$watch('client.managedDisplay.size', function setDisplaySize(size) { - $scope.$evalAsync($scope.updateDisplayScale); - }); - - }] - }; -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacTiledClients.js b/guacamole/src/main/frontend/src/app/client/directives/guacTiledClients.js deleted file mode 100644 index 52289bcd0a..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacTiledClients.js +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which displays one or more Guacamole clients in an evenly-tiled - * view. The number of rows and columns used for the arrangement of tiles is - * automatically determined by the number of clients present. - */ -angular.module('client').directive('guacTiledClients', [function guacTiledClients() { - - const directive = { - restrict: 'E', - templateUrl: 'app/client/templates/guacTiledClients.html', - }; - - directive.scope = { - - /** - * The function to invoke when the "close" button in the header of a - * client tile is clicked. The ManagedClient that is closed will be - * made available to the Angular expression defining the callback as - * "$client". - * - * @type function - */ - onClose : '&', - - /** - * The group of Guacamole clients that should be displayed in an - * evenly-tiled grid arrangement. - * - * @type ManagedClientGroup - */ - clientGroup : '=', - - /** - * Whether translation of touch to mouse events should emulate an - * absolute pointer device, or a relative pointer device. - * - * @type boolean - */ - emulateAbsoluteMouse : '=' - - }; - - directive.controller = ['$scope', '$injector', '$element', - function guacTiledClientsController($scope, $injector, $element) { - - // Required services - const $rootScope = $injector.get('$rootScope'); - - // Required types - const ManagedClient = $injector.get('ManagedClient'); - const ManagedClientGroup = $injector.get('ManagedClientGroup'); - - /** - * Returns the currently-focused ManagedClient. If there is no such - * client, or multiple clients are focused, null is returned. - * - * @returns {ManagedClient} - * The currently-focused client, or null if there are no focused - * clients or if multiple clients are focused. - */ - $scope.getFocusedClient = function getFocusedClient() { - - const managedClientGroup = $scope.clientGroup; - if (managedClientGroup) { - const focusedClients = _.filter(managedClientGroup.clients, client => client.clientProperties.focused); - if (focusedClients.length === 1) - return focusedClients[0]; - } - - return null; - - }; - - // Notify whenever identify of currently-focused client changes - $scope.$watch('getFocusedClient()', function focusedClientChanged(focusedClient) { - $rootScope.$broadcast('guacClientFocused', focusedClient); - }); - - // Notify whenever arguments of currently-focused client changes - $scope.$watch('getFocusedClient().arguments', function focusedClientParametersChanged() { - $rootScope.$broadcast('guacClientArgumentsUpdated', $scope.getFocusedClient()); - }, true); - - // Notify whenever protocol of currently-focused client changes - $scope.$watch('getFocusedClient().protocol', function focusedClientParametersChanged() { - $rootScope.$broadcast('guacClientProtocolUpdated', $scope.getFocusedClient()); - }, true); - - /** - * Returns a callback for guacClick that assigns or updates keyboard - * focus to the given client, allowing that client to receive and - * handle keyboard events. Multiple clients may have keyboard focus - * simultaneously. - * - * @param {ManagedClient} client - * The client that should receive keyboard focus. - * - * @return {guacClick~callback} - * The callback that guacClient should invoke when the given client - * has been clicked. - */ - $scope.getFocusAssignmentCallback = function getFocusAssignmentCallback(client) { - return (shift, ctrl) => { - - // Clear focus of all other clients if not selecting multiple - if (!shift && !ctrl) { - $scope.clientGroup.clients.forEach(client => { - client.clientProperties.focused = false; - }); - } - - client.clientProperties.focused = true; - - // Fill in any gaps if performing rectangular multi-selection - // via shift-click - if (shift) { - - let minRow = $scope.clientGroup.rows - 1; - let minColumn = $scope.clientGroup.columns - 1; - let maxRow = 0; - let maxColumn = 0; - - // Determine extents of selected area - ManagedClientGroup.forEach($scope.clientGroup, (client, row, column) => { - if (client.clientProperties.focused) { - minRow = Math.min(minRow, row); - minColumn = Math.min(minColumn, column); - maxRow = Math.max(maxRow, row); - maxColumn = Math.max(maxColumn, column); - } - }); - - ManagedClientGroup.forEach($scope.clientGroup, (client, row, column) => { - client.clientProperties.focused = - row >= minRow - && row <= maxRow - && column >= minColumn - && column <= maxColumn; - }); - - } - - }; - }; - - /** - * @borrows ManagedClientGroup.hasMultipleClients - */ - $scope.hasMultipleClients = ManagedClientGroup.hasMultipleClients; - - /** - * @borrows ManagedClientGroup.getClientGrid - */ - $scope.getClientGrid = ManagedClientGroup.getClientGrid; - - /** - * @borrows ManagedClient.isShared - */ - $scope.isShared = ManagedClient.isShared; - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacTiledThumbnails.js b/guacamole/src/main/frontend/src/app/client/directives/guacTiledThumbnails.js deleted file mode 100644 index e6417c93b8..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacTiledThumbnails.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for displaying a group of Guacamole clients as a non-interactive - * thumbnail of tiled client displays. - */ -angular.module('client').directive('guacTiledThumbnails', [function guacTiledThumbnails() { - - const directive = { - restrict: 'E', - replace: true, - templateUrl: 'app/client/templates/guacTiledThumbnails.html' - }; - - directive.scope = { - - /** - * The group of clients to display as a thumbnail of tiled client - * displays. - * - * @type ManagedClientGroup - */ - clientGroup : '=' - - }; - - directive.controller = ['$scope', '$injector', '$element', - function guacTiledThumbnailsController($scope, $injector, $element) { - - // Required types - const ManagedClientGroup = $injector.get('ManagedClientGroup'); - - /** - * The overall height of the thumbnail view of the tiled grid of - * clients within the client group, in pixels. This value is - * intentionally based off a snapshot of the current browser size at - * the time the directive comes into existence to ensure the contents - * of the thumbnail are familiar in appearance and aspect ratio. - */ - $scope.height = Math.min(window.innerHeight, 128); - - /** - * The overall width of the thumbnail view of the tiled grid of - * clients within the client group, in pixels. This value is - * intentionally based off a snapshot of the current browser size at - * the time the directive comes into existence to ensure the contents - * of the thumbnail are familiar in appearance and aspect ratio. - */ - $scope.width = window.innerWidth / window.innerHeight * $scope.height; - - /** - * @borrows ManagedClientGroup.getClientGrid - */ - $scope.getClientGrid = ManagedClientGroup.getClientGrid; - - }]; - - return directive; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacViewport.js b/guacamole/src/main/frontend/src/app/client/directives/guacViewport.js deleted file mode 100644 index d14a70a5e7..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacViewport.js +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides a fullscreen environment for its content. - */ -angular.module('client').directive('guacViewport', [function guacViewport() { - - return { - // Element only - restrict: 'E', - scope: {}, - transclude: true, - templateUrl: 'app/client/templates/guacViewport.html', - controller: ['$scope', '$injector', '$element', - function guacViewportController($scope, $injector, $element) { - - // Required services - var $window = $injector.get('$window'); - - /** - * The fullscreen container element. - * - * @type Element - */ - var element = $element.find('.viewport')[0]; - - /** - * The width of the browser viewport when fitVisibleArea() was last - * invoked, in pixels, or null if fitVisibleArea() has not yet been - * called. - * - * @type Number - */ - var lastViewportWidth = null; - - /** - * The height of the browser viewport when fitVisibleArea() was - * last invoked, in pixels, or null if fitVisibleArea() has not yet - * been called. - * - * @type Number - */ - var lastViewportHeight = null; - - /** - * Resizes the container element inside the guacViewport such that - * it exactly fits within the visible area, even if the browser has - * been scrolled. - */ - var fitVisibleArea = function fitVisibleArea() { - - // Calculate viewport dimensions (this is NOT necessarily the - // same as 100vw and 100vh, 100%, etc., particularly when the - // on-screen keyboard of a mobile device pops open) - var viewportWidth = $window.innerWidth; - var viewportHeight = $window.innerHeight; - - // Adjust element width to fit exactly within visible area - if (viewportWidth !== lastViewportWidth) { - element.style.width = viewportWidth + 'px'; - lastViewportWidth = viewportWidth; - } - - // Adjust element height to fit exactly within visible area - if (viewportHeight !== lastViewportHeight) { - element.style.height = viewportHeight + 'px'; - lastViewportHeight = viewportHeight; - } - - // Scroll element such that its upper-left corner is exactly - // within the viewport upper-left corner, if not already there - if (element.scrollLeft || element.scrollTop) { - $window.scrollTo( - $window.pageXOffset + element.scrollLeft, - $window.pageYOffset + element.scrollTop - ); - } - - }; - - // Fit container within visible region when window scrolls - $window.addEventListener('scroll', fitVisibleArea); - - // Poll every 10ms, in case scroll event does not fire - var pollArea = $window.setInterval(fitVisibleArea, 10); - - // Clean up on destruction - $scope.$on('$destroy', function destroyViewport() { - $window.removeEventListener('scroll', fitVisibleArea); - $window.clearInterval(pollArea); - }); - - }] - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacZoomCtrl.js b/guacamole/src/main/frontend/src/app/client/directives/guacZoomCtrl.js deleted file mode 100644 index 3e5b468da8..0000000000 --- a/guacamole/src/main/frontend/src/app/client/directives/guacZoomCtrl.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which converts between human-readable zoom - * percentage and display scale. - */ -angular.module('client').directive('guacZoomCtrl', function guacZoomCtrl() { - return { - restrict: 'A', - require: 'ngModel', - priority: 101, - link: function(scope, element, attrs, ngModel) { - - // Evaluate the ngChange attribute when the model - // changes. - ngModel.$viewChangeListeners.push(function() { - scope.$eval(attrs.ngChange); - }); - - // When pushing to the menu, mutiply by 100. - ngModel.$formatters.push(function(value) { - return Math.round(value * 100); - }); - - // When parsing value from menu, divide by 100. - ngModel.$parsers.push(function(value) { - return Math.round(value) / 100; - }); - } - } -}); diff --git a/guacamole/src/main/frontend/src/app/client/services/guacAudio.js b/guacamole/src/main/frontend/src/app/client/services/guacAudio.js deleted file mode 100644 index 95aec4c7a5..0000000000 --- a/guacamole/src/main/frontend/src/app/client/services/guacAudio.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for checking browser audio support. - */ -angular.module('client').factory('guacAudio', [function guacAudio() { - - /** - * Object describing the UI's level of audio support. - */ - return new (function() { - - /** - * Array of all supported audio mimetypes. - * - * @type String[] - */ - this.supported = Guacamole.AudioPlayer.getSupportedTypes(); - - })(); - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/services/guacClientManager.js b/guacamole/src/main/frontend/src/app/client/services/guacClientManager.js deleted file mode 100644 index 990d10cdec..0000000000 --- a/guacamole/src/main/frontend/src/app/client/services/guacClientManager.js +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for managing several active Guacamole clients. - */ -angular.module('client').factory('guacClientManager', ['$injector', - function guacClientManager($injector) { - - // Required types - const ManagedClient = $injector.get('ManagedClient'); - const ManagedClientGroup = $injector.get('ManagedClientGroup'); - - // Required services - const $window = $injector.get('$window'); - const sessionStorageFactory = $injector.get('sessionStorageFactory'); - - var service = {}; - - /** - * Getter/setter which retrieves or sets the map of all active managed - * clients. Each key is the ID of the connection used by that client. - * - * @type Function - */ - var storedManagedClients = sessionStorageFactory.create({}, function destroyClientStorage() { - - // Disconnect all clients when storage is destroyed - service.clear(); - - }); - - /** - * Returns a map of all active managed clients. Each key is the ID of the - * connection used by that client. - * - * @returns {Object.} - * A map of all active managed clients. - */ - service.getManagedClients = function getManagedClients() { - return storedManagedClients(); - }; - - /** - * Getter/setter which retrieves or sets the array of all active managed - * client groups. - * - * @type Function - */ - const storedManagedClientGroups = sessionStorageFactory.create([], function destroyClientGroupStorage() { - - // Disconnect all clients when storage is destroyed - service.clear(); - - }); - - /** - * Returns an array of all managed client groups. - * - * @returns {ManagedClientGroup[]>} - * An array of all active managed client groups. - */ - service.getManagedClientGroups = function getManagedClientGroups() { - return storedManagedClientGroups(); - }; - - /** - * Removes the ManagedClient with the given ID from all - * ManagedClientGroups, automatically adjusting the tile size of the - * clients that remain in each group. All client groups that are empty - * after the client is removed will also be removed. - * - * @param {string} id - * The ID of the ManagedClient to remove. - */ - const ungroupManagedClient = function ungroupManagedClient(id) { - - const managedClientGroups = storedManagedClientGroups(); - - // Remove client from all groups - managedClientGroups.forEach(group => { - const removed = _.remove(group.clients, client => (client.id === id)); - if (removed.length) { - - // Reset focus state if client is being removed from a group - // that isn't currently attached (focus may otherwise be - // retained and result in a newly added connection unexpectedly - // sharing focus) - if (!group.attached) - removed.forEach(client => { client.clientProperties.focused = false; }); - - // Recalculate group grid if number of clients is changing - ManagedClientGroup.recalculateTiles(group); - - } - }); - - // Remove any groups that are now empty - _.remove(managedClientGroups, group => !group.clients.length); - - }; - - /** - * Removes the existing ManagedClient associated with the connection having - * the given ID, if any. If no such a ManagedClient already exists, this - * function has no effect. - * - * @param {String} id - * The ID of the connection whose ManagedClient should be removed. - * - * @returns {Boolean} - * true if an existing client was removed, false otherwise. - */ - service.removeManagedClient = function removeManagedClient(id) { - - var managedClients = storedManagedClients(); - - // Remove client if it exists - if (id in managedClients) { - - // Pull client out of any containing groups - ungroupManagedClient(id); - - // Disconnect and remove - managedClients[id].client.disconnect(); - delete managedClients[id]; - - // A client was removed - return true; - - } - - // No client was removed - return false; - - }; - - /** - * Creates a new ManagedClient associated with the connection having the - * given ID. If such a ManagedClient already exists, it is disconnected and - * replaced. - * - * @param {String} id - * The ID of the connection whose ManagedClient should be retrieved. - * - * @returns {ManagedClient} - * The ManagedClient associated with the connection having the given - * ID. - */ - service.replaceManagedClient = function replaceManagedClient(id) { - - const managedClients = storedManagedClients(); - const managedClientGroups = storedManagedClientGroups(); - - // Remove client if it exists - if (id in managedClients) { - - const hadFocus = managedClients[id].clientProperties.focused; - managedClients[id].client.disconnect(); - delete managedClients[id]; - - // Remove client from all groups - managedClientGroups.forEach(group => { - - const index = _.findIndex(group.clients, client => (client.id === id)); - if (index === -1) - return; - - group.clients[index] = managedClients[id] = ManagedClient.getInstance(id); - managedClients[id].clientProperties.focused = hadFocus; - - }); - - } - - return managedClients[id]; - - }; - - /** - * Returns the ManagedClient associated with the connection having the - * given ID. If no such ManagedClient exists, a new ManagedClient is - * created. - * - * @param {String} id - * The ID of the connection whose ManagedClient should be retrieved. - * - * @returns {ManagedClient} - * The ManagedClient associated with the connection having the given - * ID. - */ - service.getManagedClient = function getManagedClient(id) { - - var managedClients = storedManagedClients(); - - // Ensure any existing client is removed from its containing group - // prior to being returned - ungroupManagedClient(id); - - // Create new managed client if it doesn't already exist - if (!(id in managedClients)) - managedClients[id] = ManagedClient.getInstance(id); - - // Return existing client - return managedClients[id]; - - }; - - /** - * Returns the ManagedClientGroup having the given ID. If no such - * ManagedClientGroup exists, a new ManagedClientGroup is created by - * extracting the relevant connections from the ID. - * - * @param {String} id - * The ID of the ManagedClientGroup to retrieve or create. - * - * @returns {ManagedClientGroup} - * The ManagedClientGroup having the given ID. - */ - service.getManagedClientGroup = function getManagedClientGroup(id) { - - const managedClientGroups = storedManagedClientGroups(); - const existingGroup = _.find(managedClientGroups, (group) => { - return id === ManagedClientGroup.getIdentifier(group); - }); - - // Prefer to return the existing group if it exactly matches - if (existingGroup) - return existingGroup; - - const clients = []; - const clientIds = ManagedClientGroup.getClientIdentifiers(id); - - // Separate active clients by whether they should be displayed within - // the current view - clientIds.forEach(function groupClients(id) { - clients.push(service.getManagedClient(id)); - }); - - const group = new ManagedClientGroup({ - clients : clients - }); - - // Focus the first client if there are no clients focused - ManagedClientGroup.verifyFocus(group); - - managedClientGroups.push(group); - return group; - - }; - - /** - * Removes the existing ManagedClientGroup having the given ID, if any, - * disconnecting and removing all ManagedClients associated with that - * group. If no such a ManagedClientGroup currently exists, this function - * has no effect. - * - * @param {String} id - * The ID of the ManagedClientGroup to remove. - * - * @returns {Boolean} - * true if a ManagedClientGroup was removed, false otherwise. - */ - service.removeManagedClientGroup = function removeManagedClientGroup(id) { - - const managedClients = storedManagedClients(); - const managedClientGroups = storedManagedClientGroups(); - - // Remove all matching groups (there SHOULD only be one) - const removed = _.remove(managedClientGroups, (group) => ManagedClientGroup.getIdentifier(group) === id); - - // Disconnect all clients associated with the removed group(s) - removed.forEach((group) => { - group.clients.forEach((client) => { - - const id = client.id; - if (managedClients[id]) { - managedClients[id].client.disconnect(); - delete managedClients[id]; - } - - }); - }); - - return !!removed.length; - - }; - - /** - * Disconnects and removes all currently-connected clients and client - * groups. - */ - service.clear = function clear() { - - var managedClients = storedManagedClients(); - - // Disconnect each managed client - for (var id in managedClients) - managedClients[id].client.disconnect(); - - // Clear managed clients and client groups - storedManagedClients({}); - storedManagedClientGroups([]); - - }; - - // Disconnect all clients when window is unloaded - $window.addEventListener('unload', service.clear); - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/services/guacImage.js b/guacamole/src/main/frontend/src/app/client/services/guacImage.js deleted file mode 100644 index 2cf15fbdeb..0000000000 --- a/guacamole/src/main/frontend/src/app/client/services/guacImage.js +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for checking browser image support. - */ -angular.module('client').factory('guacImage', ['$injector', function guacImage($injector) { - - // Required services - var $q = $injector.get('$q'); - - var service = {}; - - /** - * Map of possibly-supported image mimetypes to corresponding test images - * encoded with base64. If the image is correctly decoded, it will be a - * single pixel (1x1) image. - * - * @type Object. - */ - var testImages = { - - /** - * Test JPEG image, encoded as base64. - */ - 'image/jpeg' : - '/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoH' - + 'BwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQME' - + 'BAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU' - + 'FBQUFBQUFBQUFBQUFBT/wAARCAABAAEDAREAAhEBAxEB/8QAFAABAAAAAAAAAAA' - + 'AAAAAAAAACf/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAUAQEAAAAAAAAAAAAAAA' - + 'AAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AVMH/2Q==', - - /** - * Test PNG image, encoded as base64. - */ - 'image/png' : - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEX///+nxBvI' - + 'AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==', - - /** - * Test WebP image, encoded as base64. - */ - 'image/webp' : 'UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==' - - }; - - /** - * Deferred which tracks the progress and ultimate result of all pending - * image format tests. - * - * @type Deferred - */ - var deferredSupportedMimetypes = $q.defer(); - - /** - * Array of all promises associated with pending image tests. Each image - * test promise MUST be guaranteed to resolve and MUST NOT be rejected. - * - * @type Promise[] - */ - var pendingTests = []; - - /** - * The array of supported image formats. This will be gradually populated - * by the various image tests that occur in the background, and will not be - * fully populated until all promises within pendingTests are resolved. - * - * @type String[] - */ - var supported = []; - - /** - * Return a promise which resolves with to an array of image mimetypes - * supported by the browser, once those mimetypes are known. The returned - * promise is guaranteed to resolve successfully. - * - * @returns {Promise.} - * A promise which resolves with an array of image mimetypes supported - * by the browser. - */ - service.getSupportedMimetypes = function getSupportedMimetypes() { - return deferredSupportedMimetypes.promise; - }; - - // Test each possibly-supported image - angular.forEach(testImages, function testImageSupport(data, mimetype) { - - // Add promise for current image test - var imageTest = $q.defer(); - pendingTests.push(imageTest.promise); - - // Attempt to load image - var image = new Image(); - image.src = 'data:' + mimetype + ';base64,' + data; - - // Store as supported depending on whether load was successful - image.onload = image.onerror = function imageTestComplete() { - - // Image format is supported if successfully decoded - if (image.width === 1 && image.height === 1) - supported.push(mimetype); - - // Test is complete - imageTest.resolve(); - - }; - - }); - - // When all image tests are complete, resolve promise with list of - // supported formats - $q.all(pendingTests).then(function imageTestsCompleted() { - deferredSupportedMimetypes.resolve(supported); - }); - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/services/guacTranslate.js b/guacamole/src/main/frontend/src/app/client/services/guacTranslate.js deleted file mode 100644 index c7fe8e9ffc..0000000000 --- a/guacamole/src/main/frontend/src/app/client/services/guacTranslate.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A wrapper around the angular-translate $translate service that offers a - * convenient way to fall back to a default translation if the requested - * translation is not available. - */ - angular.module('client').factory('guacTranslate', ['$injector', function guacTranslate($injector) { - - // Required services - const $q = $injector.get('$q'); - const $translate = $injector.get('$translate'); - - // Required types - const TranslationResult = $injector.get('TranslationResult'); - - /** - * Returns a promise that will be resolved with a TranslationResult containg either the - * requested ID and message (if translated), or the default ID and message if translated, - * or the literal value of `defaultTranslationId` for both the ID and message if neither - * is translated. - * - * @param {String} translationId - * The requested translation ID, which may or may not be translated. - * - * @param {Sting} defaultTranslationId - * The translation ID that will be used if no translation is found for `translationId`. - * - * @returns {Promise.} - * A promise which resolves with a TranslationResult containing the results from - * the translation attempt. - */ - var translateWithFallback = function translateWithFallback(translationId, defaultTranslationId) { - const deferredTranslation = $q.defer(); - - // Attempt to translate the requested translation ID - $translate(translationId).then( - - // If the requested translation is available, use that - translation => deferredTranslation.resolve(new TranslationResult({ - id: translationId, message: translation - })), - - // Otherwise, try the default translation ID - () => $translate(defaultTranslationId).then( - - // Default translation worked, so use that - defaultTranslation => - deferredTranslation.resolve(new TranslationResult({ - id: defaultTranslationId, message: defaultTranslation - })), - - // Neither translation is available; as a fallback, return default ID for both - () => deferredTranslation.resolve(new TranslationResult({ - id: defaultTranslationId, message: defaultTranslationId - })), - ) - ); - - return deferredTranslation.promise; - }; - - return translateWithFallback; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/services/guacVideo.js b/guacamole/src/main/frontend/src/app/client/services/guacVideo.js deleted file mode 100644 index 08a3c368c3..0000000000 --- a/guacamole/src/main/frontend/src/app/client/services/guacVideo.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for checking browser video support. - */ -angular.module('client').factory('guacVideo', [function guacVideo() { - - /** - * Object describing the UI's level of video support. - */ - return new (function() { - - /** - * Array of all supported video mimetypes. - */ - this.supported = Guacamole.VideoPlayer.getSupportedTypes(); - - })(); - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/styles/client.css b/guacamole/src/main/frontend/src/app/client/styles/client.css deleted file mode 100644 index 4d452980b7..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/client.css +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -body.client { - background: black; - padding: 0; - margin: 0; - overflow: hidden; -} - -#preload { - visibility: hidden; - position: absolute; - left: 0; - right: 0; - width: 0; - height: 0; - overflow: hidden; -} - -.client-view { - - position: absolute; - top: 0; - left: 0; - - width: 100%; - height: 100%; - - font-size: 0px; - -} - -.client-view-content { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: column; - -ms-flex-pack: end; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: vertical; - -moz-box-pack: end; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: vertical; - -webkit-box-pack: end; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: column; - -webkit-flex-pack: end; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: column; - flex-pack: end; - - width: 100%; - height: 100%; - - font-size: 12pt; - -} - -.client-view .client-body { - -ms-flex: 1 1 auto; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - flex: 1 1 auto; - position: relative; -} - -.client-view .client-bottom { - -ms-flex: 0 0 auto; - -moz-box-flex: 0; - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - flex: 0 0 auto; -} - -.client-view .client-body guac-tiled-clients { - - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - - width: auto; - height: auto; - -} - -.client .menu .header h2 { - text-transform: none; -} - -.client .user-menu .menu-contents li a.disconnect { - background-repeat: no-repeat; - background-size: 1em; - background-position: 0.75em center; - padding-left: 2.5em; - background-image: url('images/x.svg'); -} - -.client .drop-pending .display { - background: #3161a9; -} - -.client .drop-pending .display > *{ - opacity: 0.5; -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/styles/connection-select-menu.css b/guacamole/src/main/frontend/src/app/client/styles/connection-select-menu.css deleted file mode 100644 index 69aefada41..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/connection-select-menu.css +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#guac-menu .header h2.connection-select-menu { - overflow: visible; -} - -.connection-select-menu { - padding: 0; - min-width: 0; -} - -.connection-select-menu .menu-dropdown { - border: none; -} - -.connection-select-menu .menu-dropdown .menu-contents { - font-weight: normal; - font-size: 0.8em; - right: auto; - left: 0; - max-width: 100vw; - width: 400px; -} - -.connection-select-menu .menu-dropdown .menu-contents .filter input { - border-bottom: 1px solid rgba(0,0,0,0.125); - border-left: none; -} - -.connection-select-menu .menu-dropdown .menu-contents .filter { - margin-bottom: 0.5em; - padding: 0; -} - -.connection-select-menu .menu-dropdown .menu-contents .group-list .caption { - display: inline-block; - width: 100%; - overflow: hidden; - text-overflow: ellipsis; -} - -.connection-select-menu .menu-dropdown .menu-contents .caption .connection, -.connection-select-menu .menu-dropdown .menu-contents .caption .connection-group { - display: inline-block; -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/connection-warning.css b/guacamole/src/main/frontend/src/app/client/styles/connection-warning.css deleted file mode 100644 index daeb0f45aa..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/connection-warning.css +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#connection-warning { - - position: absolute; - right: 0.25em; - bottom: 0.25em; - z-index: 20; - - width: 3in; - max-width: 100%; - min-height: 1em; - - border-left: 2em solid #FA0; - box-shadow: 1px 1px 2px rgba(0,0,0,0.25); - background: #FFE; - padding: 0.5em 0.75em; - font-size: .8em; - -} - -#connection-warning::before { - - content: ' '; - display: block; - position: absolute; - left: -2em; - top: 0; - - width: 1.25em; - height: 100%; - margin: 0 0.375em; - - background: url('images/warning.svg'); - background-size: contain; - background-position: center; - background-repeat: no-repeat; - -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/display.css b/guacamole/src/main/frontend/src/app/client/styles/display.css deleted file mode 100644 index 0233f42590..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/display.css +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.software-cursor { - cursor: url('images/mouse/blank.gif'),url('images/mouse/blank.cur'),default; - overflow: hidden; - cursor: none; -} - -.guac-error .software-cursor { - cursor: default; -} - -div.main { - overflow: auto; - width: 100%; - height: 100%; - position: relative; - font-size: 0px; -} - -div.displayOuter { - height: 100%; - width: 100%; - position: absolute; - left: 0; - top: 0; - display: table; -} - -div.displayMiddle { - width: 100%; - height: 100%; - display: table-cell; - vertical-align: middle; - text-align: center; -} - -div.display { - display: inline-block; -} - -div.display * { - position: relative; -} - -div.display > * { - margin-left: auto; - margin-right: auto; -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/file-browser.css b/guacamole/src/main/frontend/src/app/client/styles/file-browser.css deleted file mode 100644 index bafaa0328e..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/file-browser.css +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* Hide directory contents by default */ - -.file-browser .directory > .children { - padding-left: 1em; - display: none; -} - -.file-browser .list-item .caption { - white-space: nowrap; - border: 1px solid transparent; -} - -.file-browser .list-item.focused .caption { - border: 1px dotted rgba(0, 0, 0, 0.5); - background: rgba(204, 221, 170, 0.5); -} - -/* Directory / file icons */ - -.file-browser .normal-file > .caption .icon { - background-image: url('images/file.svg'); -} - -.file-browser .directory > .caption .icon { - background-image: url('images/folder-closed.svg'); -} - -.file-browser .directory.previous > .caption .icon { - background-image: url('images/folder-up.svg'); -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/file-transfer-dialog.css b/guacamole/src/main/frontend/src/app/client/styles/file-transfer-dialog.css deleted file mode 100644 index 66d39a0aaa..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/file-transfer-dialog.css +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#file-transfer-dialog { - - position: absolute; - right: 0; - bottom: 0; - z-index: 20; - - font-size: 0.8em; - - width: 4in; - max-width: 100%; - max-height: 3in; - -} - -#file-transfer-dialog .transfer-manager { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: column; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: vertical; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: vertical; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: column; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: column; - - max-width: inherit; - max-height: inherit; - - border: 1px solid rgba(0, 0, 0, 0.5); - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.25); - -} - -#file-transfer-dialog .transfer-manager .header { - -ms-flex: 0 0 auto; - -moz-box-flex: 0; - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - flex: 0 0 auto; -} - -#file-transfer-dialog .transfer-manager .transfer-manager-body { - - -ms-flex: 1 1 auto; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - flex: 1 1 auto; - - overflow: auto; - -} - -/* - * Shrink maximum height if viewport is too small for default 3in dialog. - */ -@media all and (max-height: 3in) { - - #file-transfer-dialog { - max-height: 1.5in; - } - -} - -/* - * If viewport is too small for even the 1.5in dialog, fit all available space. - */ -@media all and (max-height: 1.5in) { - - #file-transfer-dialog { - height: 100%; - } - - #file-transfer-dialog .transfer-manager { - position: absolute; - left: 0.5em; - top: 0.5em; - right: 0.5em; - bottom: 0.5em; - } - -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/filesystem-menu.css b/guacamole/src/main/frontend/src/app/client/styles/filesystem-menu.css deleted file mode 100644 index aed541aee8..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/filesystem-menu.css +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#filesystem-menu .header h2 { - font-size: 1em; - font-weight: normal; - padding-top: 0; - padding-bottom: 0; -} - -#filesystem-menu .header { - -ms-flex-align: center; - -moz-box-align: center; - -webkit-box-align: center; - -webkit-align-items: center; - align-items: center; -} - -#filesystem-menu .menu-body { - padding: 0.25em; -} - -#filesystem-menu .header.breadcrumbs { - display: block; - background: rgba(0,0,0,0.0125); - border-bottom: 1px solid rgba(0,0,0,0.05); - box-shadow: none; - margin-top: 0; - border-top: none; -} - -#filesystem-menu .header.breadcrumbs .breadcrumb { - display: inline-block; - padding: 0.5em; - font-size: 0.8em; - font-weight: bold; -} - -#filesystem-menu .header.breadcrumbs .breadcrumb:hover { - background-color: #CDA; - cursor: pointer; -} - -#filesystem-menu .header.breadcrumbs .breadcrumb.root { - background-size: 1.5em 1.5em; - -moz-background-size: 1.5em 1.5em; - -webkit-background-size: 1.5em 1.5em; - -khtml-background-size: 1.5em 1.5em; - background-repeat: no-repeat; - background-position: center center; - background-image: url('images/drive.svg'); - width: 2em; - height: 2em; - padding: 0; - vertical-align: middle; -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/styles/guac-menu.css b/guacamole/src/main/frontend/src/app/client/styles/guac-menu.css deleted file mode 100644 index 66df2cbd5b..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/guac-menu.css +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#guac-menu .content { - - padding: 0; - margin: 0; - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: column; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: vertical; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: vertical; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: column; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: column; - -} - -#guac-menu .content > * { - - margin: 0; - - -ms-flex: 0 0 auto; - -moz-box-flex: 0; - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - flex: 0 0 auto; - -} - -#guac-menu .content > * + * { - margin-top: 1em; -} - -#guac-menu .header h2 { - white-space: nowrap; - overflow: hidden; - width: 100%; - text-overflow: ellipsis; -} - -#guac-menu #mouse-settings .choice { - text-align: center; -} - -#guac-menu #mouse-settings .choice .figure { - display: inline-block; - vertical-align: middle; - width: 75%; - max-width: 320px; -} - -#guac-menu #keyboard-settings .caption { - font-size: 0.9em; - margin-left: 2em; - margin-right: 2em; -} - -#guac-menu #mouse-settings .figure .caption { - text-align: center; - font-size: 0.9em; -} - -#guac-menu #mouse-settings .figure img { - display: block; - width: 100%; - max-width: 320px; - margin: 1em auto; -} - -#guac-menu #keyboard-settings .figure { - float: right; - max-width: 30%; - margin: 1em; -} - -#guac-menu #keyboard-settings .figure img { - width: 100%; -} - -#guac-menu #zoom-settings { - text-align: center; -} - -#guac-menu #devices .device { - - padding: 1em; - border: 1px solid rgba(0, 0, 0, 0.125); - background: rgba(0, 0, 0, 0.04); - - padding-left: 3.5em; - background-size: 1.5em 1.5em; - -moz-background-size: 1.5em 1.5em; - -webkit-background-size: 1.5em 1.5em; - -khtml-background-size: 1.5em 1.5em; - - background-repeat: no-repeat; - background-position: 1em center; - -} - -#guac-menu #devices .device:hover { - cursor: pointer; - border-color: black; -} - -#guac-menu #devices .device.filesystem { - background-image: url('images/drive.svg'); -} - -#guac-menu #share-links { - - padding: 1em; - border: 1px solid rgba(0, 0, 0, 0.125); - background: rgba(0, 0, 0, 0.04); - - font-size: 0.8em; - -} - -#guac-menu #share-links h3 { - padding-bottom: 0; -} - -#guac-menu #share-links th { - white-space: nowrap; -} - -#guac-menu #share-links a[href] { - - display: block; - padding: 0 1em; - - font-family: monospace; - font-weight: bold; - -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/keyboard.css b/guacamole/src/main/frontend/src/app/client/styles/keyboard.css deleted file mode 100644 index 5bf38889a7..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/keyboard.css +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.keyboard-container { - - text-align: center; - - width: 100%; - margin: 0; - padding: 0; - - border-top: 1px solid black; - background: #222; - opacity: 0.85; - - z-index: 1; - -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/menu.css b/guacamole/src/main/frontend/src/app/client/styles/menu.css deleted file mode 100644 index b5742ab5d0..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/menu.css +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.menu { - overflow: hidden; - position: absolute; - top: 0; - height: 100%; - max-width: 100%; - width: 480px; - background: #EEE; - box-shadow: inset -1px 0 2px white, 1px 0 2px black; - z-index: 100; - -webkit-transition: left 0.125s, opacity 0.125s; - -moz-transition: left 0.125s, opacity 0.125s; - -ms-transition: left 0.125s, opacity 0.125s; - -o-transition: left 0.125s, opacity 0.125s; - transition: left 0.125s, opacity 0.125s; -} - -.menu-content { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: column; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: vertical; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: vertical; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: column; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: column; - - width: 100%; - height: 100%; - -} - -.menu-content .header { - - -ms-flex: 0 0 auto; - -moz-box-flex: 0; - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - flex: 0 0 auto; - - margin-bottom: 0; - -} - -.menu-body { - - -ms-flex: 1 1 auto; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - flex: 1 1 auto; - - padding: 1em; - overflow: auto; - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: column; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: vertical; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: vertical; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: column; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: column; - -} - -.menu-body > * { - -ms-flex: 0 0 auto; - -moz-box-flex: 0; - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - flex: 0 0 auto; -} - -.menu-section h3 { - margin: 0; - padding: 0; - padding-bottom: 1em; -} - -.menu-section ~ .menu-section h3 { - padding-top: 1em; -} - -.menu, -.menu.closed { - left: -480px; - opacity: 0; -} - -.menu.open { - left: 0px; - opacity: 1; -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/notification.css b/guacamole/src/main/frontend/src/app/client/styles/notification.css deleted file mode 100644 index 86b2db3e74..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/notification.css +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.client-status-modal { - - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - - display: none; - background: rgba(0, 0, 0, 0.5); - -} - -.client-status-modal.shown { - display: block; -} - -.client-status-modal guac-modal { - position: absolute; -} - -.client-status-modal .notification { - background: rgba(40, 40, 40, 0.75); - color: white; - width: 100%; - max-width: 100%; - padding: 1em; - text-align: center; - border: none; -} - -.client-status-modal .notification.error { - background: rgba(112, 9, 8, 0.75) -} - -.client-status-modal .notification .title-bar { - display: none -} - -.client-status-modal .notification .button { - background: transparent; - border: 2px solid white; - box-shadow: none; - text-shadow: none; - font-weight: normal; -} - -.client-status-modal .notification .button:hover { - text-decoration: underline; - background: rgba(255, 255, 255, 0.25); -} - -.client-status-modal .notification .button:active { - background: rgba(255, 255, 255, 0.5); -} - -.client-status-modal .notification .parameters { - width: 100%; - max-width: 5in; - margin: 0 auto; -} - -.client-status-modal .notification .parameters h3, -.client-status-modal .notification .parameters .password-field .toggle-password { - display: none; -} - -.client-status-modal .notification .parameters input[type=email], -.client-status-modal .notification .parameters input[type=number], -.client-status-modal .notification .parameters input[type=password], -.client-status-modal .notification .parameters input[type=text], -.client-status-modal .notification .parameters textarea { - background: transparent; - border: 2px solid white; - color: white; -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/share-menu.css b/guacamole/src/main/frontend/src/app/client/styles/share-menu.css deleted file mode 100644 index 8e1ae7cba0..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/share-menu.css +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.share-menu { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: row; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: horizontal; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: horizontal; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: row; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: row; - -} - -.share-menu .menu-dropdown .menu-title { - - padding-left: 2em; - - background-repeat: no-repeat; - background-size: 1em; - background-position: 0.5em center; - background-image: url('images/share.svg'); - -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/thumbnail-display.css b/guacamole/src/main/frontend/src/app/client/styles/thumbnail-display.css deleted file mode 100644 index 468c51acae..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/thumbnail-display.css +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -div.thumbnail-main { - overflow: hidden; - width: 100%; - height: 100%; - position: relative; - font-size: 0px; -} - -.thumbnail-main .display { - pointer-events: none; -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/styles/tiled-client-grid.css b/guacamole/src/main/frontend/src/app/client/styles/tiled-client-grid.css deleted file mode 100644 index 7ec0cdf3df..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/tiled-client-grid.css +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * Overall tiled grid layout. - */ - -.tiled-client-grid { - width: 100%; - height: 100%; -} - -.tiled-client-grid, -.tiled-client-grid .tiled-client-row, -.tiled-client-grid .tiled-client-cell, -.tiled-client-grid .client-tile { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} - -.tiled-client-grid { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; -} - -.tiled-client-grid .tiled-client-row { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; -} - -/* - * Rendering of individual clients within tiles. - */ - -.tiled-client-grid .client-tile { - position: relative; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - line-height: 1.5; -} - -.tiled-client-grid .client-tile .client-tile-header { - - display: -webkit-box; - - display: -webkit-flex; - - display: -ms-flexbox; - - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - - margin: 0; - background: #444; - padding: 0 0.25em; - font-size: 0.8em; - color: white; - z-index: 30; - min-height: 1.5em; - -} - -.tiled-client-grid .client-tile.focused .client-tile-header { - background-color: #3161a9; -} - -.tiled-client-grid .client-tile .client-tile-header > * { - -webkit-box-flex: 0; - -webkit-flex: 0; - -ms-flex: 0; - flex: 0; -} - -.tiled-client-grid .client-tile .client-tile-header .client-tile-name { - - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - - padding: 0 0.5em; - margin-bottom: -0.125em; - -} - -.tiled-client-grid .client-tile .main { - -webkit-box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; -} - -.tiled-client-grid .client-tile-disconnect, -.tiled-client-grid .client-tile-shared-indicator { - max-height: 1em; - height: 100%; -} - -.tiled-client-grid .client-tile-shared-indicator { - display: none; -} - -.tiled-client-grid .shared .client-tile-shared-indicator { - display: inline; -} - -.tiled-client-grid .client-user-count { - - visibility: hidden; - - display: block; - position: absolute; - right: 0; - top: 0; - z-index: 1; - - border-radius: 0.25em; - padding: 0.125em 0.75em; - margin: 0.5em; - - background: #055; - color: white; - font-weight: bold; - font-size: 0.8em; - -} - -.tiled-client-grid .client-user-count::before { - - content: ' '; - display: inline-block; - - margin-bottom: -0.2em; - padding-right: 0.25em; - width: 1em; - height: 1em; - - background: center / contain no-repeat url('images/user-icons/guac-user-white.svg'); - background-size: contain; - background-position: center; - background-repeat: no-repeat; - -} - -.tiled-client-grid .client-user-count .client-user-count-users, -.tiled-client-grid .client-user-count .client-user-count-messages { - - position: absolute; - right: 0; - - margin: 0; - padding: 0; - margin-top: 0.5em; - list-style: none; - -} - -.tiled-client-grid .client-user-count .client-user-count-users, -.tiled-client-grid .client-user-count .client-user-count-message { - border-radius: 0.25em; - background: black; - color: white; - padding: 0.5em; -} - -.tiled-client-grid .client-user-count .client-user-count-message { - white-space: nowrap; - animation: 1s linear 3s fadeout; -} - -.tiled-client-grid .client-tile-header .client-user-count { - display: inline-block; - position: relative; - white-space: nowrap; - background: black; - padding-left: 0.5em; - padding-right: 0.75em; -} - -.tiled-client-grid .client-tile-header .client-user-count::before { - padding-right: 0.75em; -} - -.tiled-client-grid .joined .client-user-count { - visibility: visible; -} - -.tiled-client-grid .client-user-count .client-user-count-users { - display: none; -} - -.tiled-client-grid .client-user-count:hover .client-user-count-users { - display: block; -} - -.tiled-client-grid .client-user-count .client-user-count-user::after { - content: ', '; - margin-right: 0.25em; -} - -.tiled-client-grid .client-user-count .client-user-count-user:last-child::after { - content: none; -} - -.tiled-client-grid .client-user-count .client-user-count-user { - display: inline-block; -} - -.tiled-client-grid .client-user-count .client-user-count-user.anonymous { - font-style: italic; - opacity: 0.5; -} - -.tiled-client-grid .client-user-count .client-user-count-users { - width: 256px; - max-width: 75vw; - white-space: normal; - border: 1px solid #333; -} - -.tiled-client-grid .client-user-count .client-user-count-users::before { - - content: ' '; - display: block; - - position: absolute; - right: 0.5em; - top: -0.5em; - - width: 1em; - height: 1em; - - background: black; - border: 1px solid #333; - border-right: none; - border-bottom: none; - transform: rotate(45deg); - -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/transfer-manager.css b/guacamole/src/main/frontend/src/app/client/styles/transfer-manager.css deleted file mode 100644 index 9b47919c46..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/transfer-manager.css +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.transfer-manager { - background: white; -} - -.transfer-manager .header h2 { - font-size: 1em; - padding-top: 0; - padding-bottom: 0; -} - -.transfer-manager .header { - margin: 0; - -ms-flex-align: center; - -moz-box-align: center; - -webkit-box-align: center; - -webkit-align-items: center; - align-items: center; -} - -.transfer-manager h3 { - margin: 0.25em; - font-size: 1em; - margin-bottom: 0; - opacity: 0.5; - text-align: center; -} - -.transfer-manager .transfers { - display: table; - padding: 0.25em; - width: 100%; -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/transfer.css b/guacamole/src/main/frontend/src/app/client/styles/transfer.css deleted file mode 100644 index 2c9c624d71..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/transfer.css +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.transfer { - display: table-row; -} - -.transfer .transfer-status { - display: table-cell; - padding: 0.25em; - position: relative; -} - -.transfer .text { - display: table-cell; - text-align: right; - padding: 0.25em -} - -.transfer .filename { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - position: relative; - font-family: monospace; - font-weight: bold; - padding: 0.125em; -} - -@keyframes transfer-progress { - from {background-position: 0px 0px;} - to {background-position: 64px 0px;} -} - -@-webkit-keyframes transfer-progress { - from {background-position: 0px 0px;} - to {background-position: 64px 0px;} -} - -.transfer .progress { - - width: 100%; - padding: 0.25em; - - position: absolute; - top: 0; - left: 0; - bottom: 0; - opacity: 0.25; - -} - -.transfer.in-progress .progress { - - background-color: #EEE; - background-image: url('images/progress.svg'); - - background-size: 16px 16px; - -moz-background-size: 16px 16px; - -webkit-background-size: 16px 16px; - -khtml-background-size: 16px 16px; - - animation-name: transfer-progress; - animation-duration: 2s; - animation-timing-function: linear; - animation-iteration-count: infinite; - - -webkit-animation-name: transfer-progress; - -webkit-animation-duration: 2s; - -webkit-animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - -} - -.transfer .progress .bar { - display: none; - background: #A3D655; - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 0; -} - -.transfer.in-progress .progress .bar { - display: initial; -} - -.transfer.savable { - cursor: pointer; -} - -.transfer.savable .filename { - color: blue; - text-decoration: underline; -} - -.transfer.error { - background: #FDD; -} - -.transfer.error .text, -.transfer.error .progress .bar { - display: none; -} - -.transfer .error-text { - display: none; -} - -.transfer.error .error-text { - display: block; - margin: 0; - margin-top: 0.5em; - width: 100%; -} diff --git a/guacamole/src/main/frontend/src/app/client/styles/viewport.css b/guacamole/src/main/frontend/src/app/client/styles/viewport.css deleted file mode 100644 index f1bf157c5c..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/viewport.css +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.viewport { - position: absolute; - bottom: 0; - right: 0; - width: 100%; - height: 100%; - overflow: hidden; -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/styles/zoom.css b/guacamole/src/main/frontend/src/app/client/styles/zoom.css deleted file mode 100644 index 03aa6826c2..0000000000 --- a/guacamole/src/main/frontend/src/app/client/styles/zoom.css +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.client-zoom .client-zoom-out, -.client-zoom .client-zoom-in, -.client-zoom .client-zoom-state { - display: inline-block; - vertical-align: middle; -} - -.client-zoom .client-zoom-out, -.client-zoom .client-zoom-in { - max-width: 3em; - border: 1px solid rgba(0, 0, 0, 0.5); - background: rgba(0, 0, 0, 0.1); - border-radius: 2em; - margin: 0.5em; - cursor: pointer; -} - -.client-zoom .client-zoom-out img, -.client-zoom .client-zoom-in img { - width: 100%; - opacity: 0.5; -} - -.client-zoom .client-zoom-out:hover, -.client-zoom .client-zoom-in:hover { - border: 1px solid rgba(0, 0, 0, 1); - background: #CDA; -} - -.client-zoom .client-zoom-out:hover img, -.client-zoom .client-zoom-in:hover img { - opacity: 1; -} - -.client-zoom .client-zoom-state { - font-size: 1.5em; -} - -.client-zoom .client-zoom-autofit { - text-align: left; - margin-top: 1em; -} - -.client-zoom .client-zoom-state input { - width: 2em; - font-size: 1em; - padding: 0; - background: transparent; - border-color: rgba(0, 0, 0, 0.125); -} - -.client-zoom .client-zoom-state input::-webkit-inner-spin-button, -.client-zoom .client-zoom-state input::-webkit-outer-spin-button { - -webkit-appearance: none; - margin: 0; -} diff --git a/guacamole/src/main/frontend/src/app/client/templates/client.html b/guacamole/src/main/frontend/src/app/client/templates/client.html deleted file mode 100644 index 66dca3a770..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/client.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - -
-
- - -
- - - - - -
- - -
- - -
- -
- - -
- -
- -
- -
-
- - -
- -
- - -
- {{'CLIENT.TEXT_CLIENT_STATUS_UNSTABLE' | translate}} -
- - - - - - - -
diff --git a/guacamole/src/main/frontend/src/app/client/templates/connection.html b/guacamole/src/main/frontend/src/app/client/templates/connection.html deleted file mode 100644 index ae5ef91f14..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/connection.html +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/client/templates/connectionGroup.html b/guacamole/src/main/frontend/src/app/client/templates/connectionGroup.html deleted file mode 100644 index 2e7d794cdc..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/connectionGroup.html +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/client/templates/file.html b/guacamole/src/main/frontend/src/app/client/templates/file.html deleted file mode 100644 index 843047041b..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/file.html +++ /dev/null @@ -1,9 +0,0 @@ -
- - -
-
- {{::name}} -
- -
diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacClient.html b/guacamole/src/main/frontend/src/app/client/templates/guacClient.html deleted file mode 100644 index 46a78d6617..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacClient.html +++ /dev/null @@ -1,17 +0,0 @@ -
- - -
- -
-
-
-
- -
- -
diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacClientNotification.html b/guacamole/src/main/frontend/src/app/client/templates/guacClientNotification.html deleted file mode 100644 index 9948a2b1c2..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacClientNotification.html +++ /dev/null @@ -1,5 +0,0 @@ -
- - - -
diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacClientPanel.html b/guacamole/src/main/frontend/src/app/client/templates/guacClientPanel.html deleted file mode 100644 index 0705969aca..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacClientPanel.html +++ /dev/null @@ -1,30 +0,0 @@ -
- - -
- - - - -
\ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacClientUserCount.html b/guacamole/src/main/frontend/src/app/client/templates/guacClientUserCount.html deleted file mode 100644 index fa7eff911e..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacClientUserCount.html +++ /dev/null @@ -1,11 +0,0 @@ -
- {{ client.userCount }} -
    -
      -
    • -
    -
    diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacClientZoom.html b/guacamole/src/main/frontend/src/app/client/templates/guacClientZoom.html deleted file mode 100644 index d2e74101af..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacClientZoom.html +++ /dev/null @@ -1,18 +0,0 @@ -
    -
    -
    -
    -
    - % -
    -
    +
    -
    -
    - -
    -
    diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacFileBrowser.html b/guacamole/src/main/frontend/src/app/client/templates/guacFileBrowser.html deleted file mode 100644 index 70ea53dad7..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacFileBrowser.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacFileTransfer.html b/guacamole/src/main/frontend/src/app/client/templates/guacFileTransfer.html deleted file mode 100644 index 32ead84e20..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacFileTransfer.html +++ /dev/null @@ -1,22 +0,0 @@ -
    - - -
    - - -
    -
    - {{transfer.filename}} -
    - - -

    {{translatedErrorMessage}}

    - -
    - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacFileTransferManager.html b/guacamole/src/main/frontend/src/app/client/templates/guacFileTransferManager.html deleted file mode 100644 index 6b546a26fc..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacFileTransferManager.html +++ /dev/null @@ -1,22 +0,0 @@ -
    - - -
    -

    {{'CLIENT.SECTION_HEADER_FILE_TRANSFERS' | translate}}

    - -
    - - -
    -
    -

    {{ client.name }}

    -
    - - -
    -
    -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacThumbnail.html b/guacamole/src/main/frontend/src/app/client/templates/guacThumbnail.html deleted file mode 100644 index 931016eeea..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacThumbnail.html +++ /dev/null @@ -1,11 +0,0 @@ -
    - - -
    -
    -
    -
    -
    -
    - -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacTiledClients.html b/guacamole/src/main/frontend/src/app/client/templates/guacTiledClients.html deleted file mode 100644 index ad24ca2927..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacTiledClients.html +++ /dev/null @@ -1,33 +0,0 @@ -
    -
    -
    - -
    -

    - - {{ client.title }} - - -

    - - - - - - - -
    - -
    -
    -
    diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacTiledThumbnails.html b/guacamole/src/main/frontend/src/app/client/templates/guacTiledThumbnails.html deleted file mode 100644 index 010899c906..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacTiledThumbnails.html +++ /dev/null @@ -1,14 +0,0 @@ -
    -
    -
    - -
    - -
    - -
    -
    -
    diff --git a/guacamole/src/main/frontend/src/app/client/templates/guacViewport.html b/guacamole/src/main/frontend/src/app/client/templates/guacViewport.html deleted file mode 100644 index 28081ec7fb..0000000000 --- a/guacamole/src/main/frontend/src/app/client/templates/guacViewport.html +++ /dev/null @@ -1,2 +0,0 @@ -
    -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ClientProperties.js b/guacamole/src/main/frontend/src/app/client/types/ClientProperties.js deleted file mode 100644 index 0087c8e1c1..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ClientProperties.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for generating new guacClient properties objects. - */ -angular.module('client').factory('ClientProperties', ['$injector', function defineClientProperties($injector) { - - /** - * Object used for interacting with a guacClient directive. - * - * @constructor - * @param {ClientProperties|Object} [template={}] - * The object whose properties should be copied within the new - * ClientProperties. - */ - var ClientProperties = function ClientProperties(template) { - - // Use empty object by default - template = template || {}; - - /** - * Whether the display should be scaled automatically to fit within the - * available space. - * - * @type Boolean - */ - this.autoFit = template.autoFit || true; - - /** - * The current scale. If autoFit is true, the effect of setting this - * value is undefined. - * - * @type Number - */ - this.scale = template.scale || 1; - - /** - * The minimum scale value. - * - * @type Number - */ - this.minScale = template.minScale || 1; - - /** - * The maximum scale value. - * - * @type Number - */ - this.maxScale = template.maxScale || 3; - - /** - * Whether this client should receive keyboard events. - * - * @type Boolean - */ - this.focused = template.focused || false; - - /** - * The relative Y coordinate of the scroll offset of the display within - * the client element. - * - * @type Number - */ - this.scrollTop = template.scrollTop || 0; - - /** - * The relative X coordinate of the scroll offset of the display within - * the client element. - * - * @type Number - */ - this.scrollLeft = template.scrollLeft || 0; - - }; - - return ClientProperties; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedArgument.js b/guacamole/src/main/frontend/src/app/client/types/ManagedArgument.js deleted file mode 100644 index 5e676bfcb1..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedArgument.js +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedArgument class used by ManagedClient. - */ -angular.module('client').factory('ManagedArgument', ['$q', function defineManagedArgument($q) { - - /** - * Object which represents an argument (connection parameter) which may be - * changed by the user while the connection is open. - * - * @constructor - * @param {ManagedArgument|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedArgument. - */ - var ManagedArgument = function ManagedArgument(template) { - - // Use empty object by default - template = template || {}; - - /** - * The name of the connection parameter. - * - * @type {String} - */ - this.name = template.name; - - /** - * The current value of the connection parameter. - * - * @type {String} - */ - this.value = template.value; - - /** - * A valid, open output stream which may be used to apply a new value - * to the connection parameter. - * - * @type {Guacamole.OutputStream} - */ - this.stream = template.stream; - - /** - * True if this argument has been modified in the webapp, but yet to - * be confirmed by guacd, or false in any other case. A pending - * argument cannot be modified again, and must be recreated before - * editing is enabled again. - * - * @type {boolean} - */ - this.pending = false; - - }; - - /** - * Requests editable access to a given connection parameter, returning a - * promise which is resolved with a ManagedArgument instance that provides - * such access if the parameter is indeed editable. - * - * @param {ManagedClient} managedClient - * The ManagedClient instance associated with the connection for which - * an editable version of the connection parameter is being retrieved. - * - * @param {String} name - * The name of the connection parameter. - * - * @param {String} value - * The current value of the connection parameter, as received from a - * prior, inbound "argv" stream. - * - * @returns {Promise.} - * A promise which is resolved with the new ManagedArgument instance - * once the requested parameter has been verified as editable. - */ - ManagedArgument.getInstance = function getInstance(managedClient, name, value) { - - var deferred = $q.defer(); - - // Create internal, fully-populated instance of ManagedArgument, to be - // returned only once mutability of the associated connection parameter - // has been verified - var managedArgument = new ManagedArgument({ - name : name, - value : value, - stream : managedClient.client.createArgumentValueStream('text/plain', name) - }); - - // The connection parameter is editable only if a successful "ack" is - // received - managedArgument.stream.onack = function ackReceived(status) { - if (status.isError()) - deferred.reject(status); - else - deferred.resolve(managedArgument); - }; - - return deferred.promise; - - }; - - /** - * Sets the given editable argument (connection parameter) to the given - * value, updating the behavior of the associated connection in real-time. - * If successful, the ManagedArgument provided cannot be used for future - * calls to setValue() and will be read-only until replaced with a new - * instance. This function only has an effect if the new parameter value - * is different from the current value. - * - * @param {ManagedArgument} managedArgument - * The ManagedArgument instance associated with the connection - * parameter being modified. - * - * @param {String} value - * The new value to assign to the connection parameter. - */ - ManagedArgument.setValue = function setValue(managedArgument, value) { - - // Stream new value only if value has changed and a change is not - // already pending - if (!managedArgument.pending && value !== managedArgument.value) { - - var writer = new Guacamole.StringWriter(managedArgument.stream); - writer.sendText(value); - writer.sendEnd(); - - // ManagedArgument instance is no longer usable - managedArgument.pending = true; - - } - - }; - - return ManagedArgument; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedClient.js b/guacamole/src/main/frontend/src/app/client/types/ManagedClient.js deleted file mode 100644 index b7e83a3a05..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedClient.js +++ /dev/null @@ -1,1147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* global Guacamole, _ */ - -/** - * Provides the ManagedClient class used by the guacClientManager service. - */ -angular.module('client').factory('ManagedClient', ['$rootScope', '$injector', - function defineManagedClient($rootScope, $injector) { - - // Required types - const ClientProperties = $injector.get('ClientProperties'); - const ClientIdentifier = $injector.get('ClientIdentifier'); - const ClipboardData = $injector.get('ClipboardData'); - const ManagedArgument = $injector.get('ManagedArgument'); - const ManagedClientState = $injector.get('ManagedClientState'); - const ManagedClientThumbnail = $injector.get('ManagedClientThumbnail'); - const ManagedDisplay = $injector.get('ManagedDisplay'); - const ManagedFilesystem = $injector.get('ManagedFilesystem'); - const ManagedFileUpload = $injector.get('ManagedFileUpload'); - const ManagedShareLink = $injector.get('ManagedShareLink'); - - // Required services - const $document = $injector.get('$document'); - const $q = $injector.get('$q'); - const $window = $injector.get('$window'); - const activeConnectionService = $injector.get('activeConnectionService'); - const authenticationService = $injector.get('authenticationService'); - const clipboardService = $injector.get('clipboardService'); - const connectionGroupService = $injector.get('connectionGroupService'); - const connectionService = $injector.get('connectionService'); - const preferenceService = $injector.get('preferenceService'); - const requestService = $injector.get('requestService'); - const tunnelService = $injector.get('tunnelService'); - const guacAudio = $injector.get('guacAudio'); - const guacHistory = $injector.get('guacHistory'); - const guacImage = $injector.get('guacImage'); - const guacVideo = $injector.get('guacVideo'); - - /** - * The minimum amount of time to wait between updates to the client - * thumbnail, in milliseconds. - * - * @type Number - */ - var THUMBNAIL_UPDATE_FREQUENCY = 5000; - - /** - * A deferred pipe stream, that has yet to be consumed, as well as all - * axuilary information needed to pull data from the stream. - * - * @constructor - * @param {DeferredPipeStream|Object} [template={}] - * The object whose properties should be copied within the new - * DeferredPipeStream. - */ - var DeferredPipeStream = function DeferredPipeStream(template) { - - // Use empty object by default - template = template || {}; - - /** - * The stream that will receive data from the server. - * - * @type Guacamole.InputStream - */ - this.stream = template.stream; - - /** - * The mimetype of the data which will be received. - * - * @type String - */ - this.mimetype = template.mimetype; - - /** - * The name of the pipe. - * - * @type String - */ - this.name = template.name; - - }; - - /** - * Object which serves as a surrogate interface, encapsulating a Guacamole - * client while it is active, allowing it to be maintained in the - * background. One or more ManagedClients are grouped within - * ManagedClientGroups before being attached to the client view. - * - * @constructor - * @param {ManagedClient|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedClient. - */ - var ManagedClient = function ManagedClient(template) { - - // Use empty object by default - template = template || {}; - - /** - * The ID of the connection associated with this client. - * - * @type String - */ - this.id = template.id; - - /** - * The actual underlying Guacamole client. - * - * @type Guacamole.Client - */ - this.client = template.client; - - /** - * The tunnel being used by the underlying Guacamole client. - * - * @type Guacamole.Tunnel - */ - this.tunnel = template.tunnel; - - /** - * The display associated with the underlying Guacamole client. - * - * @type ManagedDisplay - */ - this.managedDisplay = template.managedDisplay; - - /** - * The name returned associated with the connection or connection - * group in use. - * - * @type String - */ - this.name = template.name; - - /** - * The title which should be displayed as the page title for this - * client. - * - * @type String - */ - this.title = template.title; - - /** - * The name which uniquely identifies the protocol of the connection in - * use. If the protocol cannot be determined, such as when a connection - * group is in use, this will be null. - * - * @type {String} - */ - this.protocol = template.protocol || null; - - /** - * An array of forms describing all known parameters for the connection - * in use, including those which may not be editable. - * - * @type {Form[]} - */ - this.forms = template.forms || []; - - /** - * The most recently-generated thumbnail for this connection, as - * stored within the local connection history. If no thumbnail is - * stored, this will be null. - * - * @type ManagedClientThumbnail - */ - this.thumbnail = template.thumbnail; - - /** - * The current state of all parameters requested by the server via - * "required" instructions, where each object key is the name of a - * requested parameter and each value is the current value entered by - * the user or null if no parameters are currently being requested. - * - * @type Object. - */ - this.requiredParameters = null; - - /** - * All uploaded files. As files are uploaded, their progress can be - * observed through the elements of this array. It is intended that - * this array be manipulated externally as needed. - * - * @type ManagedFileUpload[] - */ - this.uploads = template.uploads || []; - - /** - * All currently-exposed filesystems. When the Guacamole server exposes - * a filesystem object, that object will be made available as a - * ManagedFilesystem within this array. - * - * @type ManagedFilesystem[] - */ - this.filesystems = template.filesystems || []; - - /** - * The current number of users sharing this connection, excluding the - * user that originally started the connection. Duplicate connections - * from the same user are included in this total. - */ - this.userCount = template.userCount || 0; - - /** - * All users currently sharing this connection, excluding the user that - * originally started the connection. If the connection is not shared, - * this object will be empty. This map consists of key/value pairs - * where each key is the user's username and each value is an object - * tracking the unique connections currently used by that user (a map - * of Guacamole protocol user IDs to boolean values). - * - * @type Object.> - */ - this.users = template.users || {}; - - /** - * All available share links generated for the this ManagedClient via - * ManagedClient.createShareLink(). Each resulting share link is stored - * under the identifier of its corresponding SharingProfile. - * - * @type Object. - */ - this.shareLinks = template.shareLinks || {}; - - /** - * The number of simultaneous touch contacts supported by the remote - * desktop. Unless explicitly declared otherwise by the remote desktop - * after connecting, this will be 0 (multi-touch unsupported). - * - * @type Number - */ - this.multiTouchSupport = template.multiTouchSupport || 0; - - /** - * The current state of the Guacamole client (idle, connecting, - * connected, terminated with error, etc.). - * - * @type ManagedClientState - */ - this.clientState = template.clientState || new ManagedClientState(); - - /** - * Properties associated with the display and behavior of the Guacamole - * client. - * - * @type ClientProperties - */ - this.clientProperties = template.clientProperties || new ClientProperties(); - - /** - * All editable arguments (connection parameters), stored by their - * names. Arguments will only be present within this set if their - * current values have been exposed by the server via an inbound "argv" - * stream and the server has confirmed that the value may be changed - * through a successful "ack" to an outbound "argv" stream. - * - * @type {Object.} - */ - this.arguments = template.arguments || {}; - - /** - * Any received pipe streams that have not been consumed by an onpipe - * handler or registered pipe handler, indexed by pipe stream name. - * - * @type {Object.} - */ - this.deferredPipeStreams = template.deferredPipeStreams || {}; - - /** - * Handlers for deferred pipe streams, indexed by the name of the pipe - * stream that the handler should handle. - * - * @type {Object.} - */ - this.deferredPipeStreamHandlers = template.deferredPipeStreamHandlers || {}; - - }; - - /** - * The mimetype of audio data to be sent along the Guacamole connection if - * audio input is supported. - * - * @constant - * @type String - */ - ManagedClient.AUDIO_INPUT_MIMETYPE = 'audio/L16;rate=44100,channels=2'; - - /** - * Returns a promise which resolves with the string of connection - * parameters to be passed to the Guacamole client during connection. This - * string generally contains the desired connection ID, display resolution, - * and supported audio/video/image formats. The returned promise is - * guaranteed to resolve successfully. - * - * @param {ClientIdentifier} identifier - * The identifier representing the connection or group to connect to. - * - * @param {number} [width] - * The optimal display width, in local CSS pixels. If omitted, the - * browser window width will be used. - * - * @param {number} [height] - * The optimal display height, in local CSS pixels. If omitted, the - * browser window height will be used. - * - * @returns {Promise.} - * A promise which resolves with the string of connection parameters to - * be passed to the Guacamole client, once the string is ready. - */ - const getConnectString = function getConnectString(identifier, width, height) { - - const deferred = $q.defer(); - - // Calculate optimal width/height for display - const pixel_density = $window.devicePixelRatio || 1; - const optimal_dpi = pixel_density * 96; - const optimal_width = width * pixel_density; - const optimal_height = height * pixel_density; - - // Build base connect string - let connectString = - "token=" + encodeURIComponent(authenticationService.getCurrentToken()) - + "&GUAC_DATA_SOURCE=" + encodeURIComponent(identifier.dataSource) - + "&GUAC_ID=" + encodeURIComponent(identifier.id) - + "&GUAC_TYPE=" + encodeURIComponent(identifier.type) - + "&GUAC_WIDTH=" + Math.floor(optimal_width) - + "&GUAC_HEIGHT=" + Math.floor(optimal_height) - + "&GUAC_DPI=" + Math.floor(optimal_dpi) - + "&GUAC_TIMEZONE=" + encodeURIComponent(preferenceService.preferences.timezone); - - // Add audio mimetypes to connect string - guacAudio.supported.forEach(function(mimetype) { - connectString += "&GUAC_AUDIO=" + encodeURIComponent(mimetype); - }); - - // Add video mimetypes to connect string - guacVideo.supported.forEach(function(mimetype) { - connectString += "&GUAC_VIDEO=" + encodeURIComponent(mimetype); - }); - - // Add image mimetypes to connect string - guacImage.getSupportedMimetypes().then(function supportedMimetypesKnown(mimetypes) { - - // Add each image mimetype - angular.forEach(mimetypes, function addImageMimetype(mimetype) { - connectString += "&GUAC_IMAGE=" + encodeURIComponent(mimetype); - }); - - // Connect string is now ready - nothing else is deferred - deferred.resolve(connectString); - - }); - - return deferred.promise; - - }; - - /** - * Requests the creation of a new audio stream, recorded from the user's - * local audio input device. If audio input is supported by the connection, - * an audio stream will be created which will remain open until the remote - * desktop requests that it be closed. If the audio stream is successfully - * created but is later closed, a new audio stream will automatically be - * established to take its place. The mimetype used for all audio streams - * produced by this function is defined by - * ManagedClient.AUDIO_INPUT_MIMETYPE. - * - * @param {Guacamole.Client} client - * The Guacamole.Client for which the audio stream is being requested. - */ - var requestAudioStream = function requestAudioStream(client) { - - // Create new audio stream, associating it with an AudioRecorder - var stream = client.createAudioStream(ManagedClient.AUDIO_INPUT_MIMETYPE); - var recorder = Guacamole.AudioRecorder.getInstance(stream, ManagedClient.AUDIO_INPUT_MIMETYPE); - - // If creation of the AudioRecorder failed, simply end the stream - if (!recorder) - stream.sendEnd(); - - // Otherwise, ensure that another audio stream is created after this - // audio stream is closed - else - recorder.onclose = requestAudioStream.bind(this, client); - - }; - - /** - * Creates a new ManagedClient representing the specified connection or - * connection group. The ManagedClient will not initially be connected, - * and must be explicitly connected by invoking ManagedClient.connect(). - * - * @param {String} id - * The ID of the connection or group to connect to. This String must be - * a valid ClientIdentifier string, as would be generated by - * ClientIdentifier.toString(). - * - * @returns {ManagedClient} - * A new ManagedClient instance which represents the connection or - * connection group having the given ID. - */ - ManagedClient.getInstance = function getInstance(id) { - - var tunnel; - - // If WebSocket available, try to use it. - if ($window.WebSocket) - tunnel = new Guacamole.ChainedTunnel( - new Guacamole.WebSocketTunnel('websocket-tunnel'), - new Guacamole.HTTPTunnel('tunnel') - ); - - // If no WebSocket, then use HTTP. - else - tunnel = new Guacamole.HTTPTunnel('tunnel'); - - // Get new client instance - var client = new Guacamole.Client(tunnel); - - // Associate new managed client with new client and tunnel - var managedClient = new ManagedClient({ - id : id, - client : client, - tunnel : tunnel - }); - - // Fire events for tunnel errors - tunnel.onerror = function tunnelError(status) { - $rootScope.$apply(function handleTunnelError() { - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.TUNNEL_ERROR, - status.code); - }); - }; - - // Pull protocol-specific information from tunnel once tunnel UUID is - // known - tunnel.onuuid = function tunnelAssignedUUID(uuid) { - tunnelService.getProtocol(uuid).then(function protocolRetrieved(protocol) { - managedClient.protocol = protocol.name; - managedClient.forms = protocol.connectionForms; - }, requestService.WARN); - }; - - // Update connection state as tunnel state changes - tunnel.onstatechange = function tunnelStateChanged(state) { - $rootScope.$evalAsync(function updateTunnelState() { - - switch (state) { - - // Connection is being established - case Guacamole.Tunnel.State.CONNECTING: - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.CONNECTING); - break; - - // Connection is established / no longer unstable - case Guacamole.Tunnel.State.OPEN: - ManagedClientState.setTunnelUnstable(managedClient.clientState, false); - break; - - // Connection is established but misbehaving - case Guacamole.Tunnel.State.UNSTABLE: - ManagedClientState.setTunnelUnstable(managedClient.clientState, true); - break; - - // Connection has closed - case Guacamole.Tunnel.State.CLOSED: - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.DISCONNECTED); - break; - - } - - }); - }; - - // Update connection state as client state changes - client.onstatechange = function clientStateChanged(clientState) { - $rootScope.$evalAsync(function updateClientState() { - - switch (clientState) { - - // Idle - case Guacamole.Client.State.IDLE: - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.IDLE); - break; - - // Connecting - case Guacamole.Client.State.CONNECTING: - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.CONNECTING); - break; - - // Connected + waiting - case Guacamole.Client.State.WAITING: - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.WAITING); - break; - - // Connected - case Guacamole.Client.State.CONNECTED: - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.CONNECTED); - - // Sync current clipboard data - clipboardService.getClipboard().then((data) => { - ManagedClient.setClipboard(managedClient, data); - }, angular.noop); - - // Begin streaming audio input if possible - requestAudioStream(client); - - // Update thumbnail with initial display contents - ManagedClient.updateThumbnail(managedClient); - break; - - // Update history during disconnect phases - case Guacamole.Client.State.DISCONNECTING: - case Guacamole.Client.State.DISCONNECTED: - ManagedClient.updateThumbnail(managedClient); - break; - - } - - }); - }; - - // Disconnect and update status when the client receives an error - client.onerror = function clientError(status) { - $rootScope.$apply(function handleClientError() { - - // Disconnect, if connected - client.disconnect(); - - // Update state - ManagedClientState.setConnectionState(managedClient.clientState, - ManagedClientState.ConnectionState.CLIENT_ERROR, - status.code); - - }); - }; - - // Update user count when a new user joins - client.onjoin = function userJoined(id, username) { - $rootScope.$apply(function usersChanged() { - - var connections = managedClient.users[username] || {}; - managedClient.users[username] = connections; - - managedClient.userCount++; - connections[id] = true; - - }); - }; - - // Update user count when a user leaves - client.onleave = function userLeft(id, username) { - $rootScope.$apply(function usersChanged() { - - var connections = managedClient.users[username] || {}; - managedClient.users[username] = connections; - - managedClient.userCount--; - delete connections[id]; - - // Delete user entry after no connections remain - if (_.isEmpty(connections)) - delete managedClient.users[username]; - - }); - }; - - // Automatically update the client thumbnail - client.onsync = function syncReceived() { - - var thumbnail = managedClient.thumbnail; - var timestamp = new Date().getTime(); - - // Update thumbnail if it doesn't exist or is old - if (!thumbnail || timestamp - thumbnail.timestamp >= THUMBNAIL_UPDATE_FREQUENCY) { - $rootScope.$apply(function updateClientThumbnail() { - ManagedClient.updateThumbnail(managedClient); - }); - } - - }; - - // A default onpipe implementation that will automatically defer any - // received pipe streams, automatically invoking any registered handlers - // that may already be set for the received name - client.onpipe = (stream, mimetype, name) => { - - // Defer the pipe stream - managedClient.deferredPipeStreams[name] = new DeferredPipeStream( - { stream, mimetype, name }); - - // Invoke the handler now, if set - const handler = managedClient.deferredPipeStreamHandlers[name]; - if (handler) { - - // Handle the stream, and clear from the deferred streams - handler(stream, mimetype, name); - delete managedClient.deferredPipeStreams[name]; - } - }; - - // Test for argument mutability whenever an argument value is - // received - client.onargv = function clientArgumentValueReceived(stream, mimetype, name) { - - // Ignore arguments which do not use a mimetype currently supported - // by the web application - if (mimetype !== 'text/plain') - return; - - var reader = new Guacamole.StringReader(stream); - - // Assemble received data into a single string - var value = ''; - reader.ontext = function textReceived(text) { - value += text; - }; - - // Test mutability once stream is finished, storing the current - // value for the argument only if it is mutable - reader.onend = function textComplete() { - ManagedArgument.getInstance(managedClient, name, value).then(function argumentIsMutable(argument) { - managedClient.arguments[name] = argument; - }, function ignoreImmutableArguments() {}); - }; - - }; - - // Handle any received clipboard data - client.onclipboard = function clientClipboardReceived(stream, mimetype) { - - var reader; - - // If the received data is text, read it as a simple string - if (/^text\//.exec(mimetype)) { - - reader = new Guacamole.StringReader(stream); - - // Assemble received data into a single string - var data = ''; - reader.ontext = function textReceived(text) { - data += text; - }; - - // Set clipboard contents once stream is finished - reader.onend = function textComplete() { - clipboardService.setClipboard(new ClipboardData({ - source : managedClient.id, - type : mimetype, - data : data - }))['catch'](angular.noop); - }; - - } - - // Otherwise read the clipboard data as a Blob - else { - reader = new Guacamole.BlobReader(stream, mimetype); - reader.onend = function blobComplete() { - clipboardService.setClipboard(new ClipboardData({ - source : managedClient.id, - type : mimetype, - data : reader.getBlob() - }))['catch'](angular.noop); - }; - } - - }; - - // Update level of multi-touch support when known - client.onmultitouch = function multiTouchSupportDeclared(layer, touches) { - managedClient.multiTouchSupport = touches; - }; - - // Update title when a "name" instruction is received - client.onname = function clientNameReceived(name) { - $rootScope.$apply(function updateClientTitle() { - managedClient.title = name; - }); - }; - - // Handle any received files - client.onfile = function clientFileReceived(stream, mimetype, filename) { - tunnelService.downloadStream(tunnel.uuid, stream, mimetype, filename); - }; - - // Handle any received filesystem objects - client.onfilesystem = function fileSystemReceived(object, name) { - $rootScope.$apply(function exposeFilesystem() { - managedClient.filesystems.push(ManagedFilesystem.getInstance(managedClient, object, name)); - }); - }; - - // Handle any received prompts - client.onrequired = function onrequired(parameters) { - $rootScope.$apply(function promptUser() { - managedClient.requiredParameters = {}; - angular.forEach(parameters, function populateParameter(name) { - managedClient.requiredParameters[name] = ''; - }); - }); - }; - - // Manage the client display - managedClient.managedDisplay = ManagedDisplay.getInstance(client.getDisplay()); - - // Parse connection details from ID - var clientIdentifier = ClientIdentifier.fromString(id); - - // Defer actually connecting the Guacamole client until - // ManagedClient.connect() is explicitly invoked - - // If using a connection, pull connection name and protocol information - if (clientIdentifier.type === ClientIdentifier.Types.CONNECTION) { - connectionService.getConnection(clientIdentifier.dataSource, clientIdentifier.id) - .then(function connectionRetrieved(connection) { - managedClient.name = managedClient.title = connection.name; - }, requestService.WARN); - } - - // If using a connection group, pull connection name - else if (clientIdentifier.type === ClientIdentifier.Types.CONNECTION_GROUP) { - connectionGroupService.getConnectionGroup(clientIdentifier.dataSource, clientIdentifier.id) - .then(function connectionGroupRetrieved(group) { - managedClient.name = managedClient.title = group.name; - }, requestService.WARN); - } - - // If using an active connection, pull corresponding connection, then - // pull connection name and protocol information from that - else if (clientIdentifier.type === ClientIdentifier.Types.ACTIVE_CONNECTION) { - activeConnectionService.getActiveConnection(clientIdentifier.dataSource, clientIdentifier.id) - .then(function activeConnectionRetrieved(activeConnection) { - - // Attempt to retrieve connection details only if the - // underlying connection is known - if (activeConnection.connectionIdentifier) { - connectionService.getConnection(clientIdentifier.dataSource, activeConnection.connectionIdentifier) - .then(function connectionRetrieved(connection) { - managedClient.name = managedClient.title = connection.name; - }, requestService.WARN); - } - - }, requestService.WARN); - } - - return managedClient; - - }; - - /** - * Connects the given ManagedClient instance to its associated connection - * or connection group. If the ManagedClient has already been connected, - * including if connected but subsequently disconnected, this function has - * no effect. - * - * @param {ManagedClient} managedClient - * The ManagedClient to connect. - * - * @param {number} [width] - * The optimal display width, in local CSS pixels. If omitted, the - * browser window width will be used. - * - * @param {number} [height] - * The optimal display height, in local CSS pixels. If omitted, the - * browser window height will be used. - */ - ManagedClient.connect = function connect(managedClient, width, height) { - - // Ignore if already connected - if (managedClient.clientState.connectionState !== ManagedClientState.ConnectionState.IDLE) - return; - - // Parse connection details from ID - const clientIdentifier = ClientIdentifier.fromString(managedClient.id); - - // Connect the Guacamole client - getConnectString(clientIdentifier, width, height) - .then(function connectClient(connectString) { - managedClient.client.connect(connectString); - }); - - }; - - /** - * Uploads the given file to the server through the given Guacamole client. - * The file transfer can be monitored through the corresponding entry in - * the uploads array of the given managedClient. - * - * @param {ManagedClient} managedClient - * The ManagedClient through which the file is to be uploaded. - * - * @param {File} file - * The file to upload. - * - * @param {ManagedFilesystem} [filesystem] - * The filesystem to upload the file to, if any. If not specified, the - * file will be sent as a generic Guacamole file stream. - * - * @param {ManagedFilesystem.File} [directory=filesystem.currentDirectory] - * The directory within the given filesystem to upload the file to. If - * not specified, but a filesystem is given, the current directory of - * that filesystem will be used. - */ - ManagedClient.uploadFile = function uploadFile(managedClient, file, filesystem, directory) { - - // Use generic Guacamole file streams by default - var object = null; - var streamName = null; - - // If a filesystem is given, determine the destination object and stream - if (filesystem) { - object = filesystem.object; - streamName = (directory || filesystem.currentDirectory).streamName + '/' + file.name; - } - - // Start and manage file upload - managedClient.uploads.push(ManagedFileUpload.getInstance(managedClient, file, object, streamName)); - - }; - - /** - * Sends the given clipboard data over the given Guacamole client, setting - * the contents of the remote clipboard to the data provided. If the given - * clipboard data was originally received from that client, the data is - * ignored and this function has no effect. - * - * @param {ManagedClient} managedClient - * The ManagedClient over which the given clipboard data is to be sent. - * - * @param {ClipboardData} data - * The clipboard data to send. - */ - ManagedClient.setClipboard = function setClipboard(managedClient, data) { - - // Ignore clipboard data that was received from this connection - if (data.source === managedClient.id) - return; - - var writer; - - // Create stream with proper mimetype - var stream = managedClient.client.createClipboardStream(data.type); - - // Send data as a string if it is stored as a string - if (typeof data.data === 'string') { - writer = new Guacamole.StringWriter(stream); - writer.sendText(data.data); - writer.sendEnd(); - } - - // Otherwise, assume the data is a File/Blob - else { - - // Write File/Blob asynchronously - writer = new Guacamole.BlobWriter(stream); - writer.oncomplete = function clipboardSent() { - writer.sendEnd(); - }; - - // Begin sending data - writer.sendBlob(data.data); - - } - - }; - - /** - * Assigns the given value to the connection parameter having the given - * name, updating the behavior of the connection in real-time. If the - * connection parameter is not editable, this function has no effect. - * - * @param {ManagedClient} managedClient - * The ManagedClient instance associated with the active connection - * being modified. - * - * @param {String} name - * The name of the connection parameter to modify. - * - * @param {String} value - * The value to attempt to assign to the given connection parameter. - */ - ManagedClient.setArgument = function setArgument(managedClient, name, value) { - var managedArgument = managedClient.arguments[name]; - managedArgument && ManagedArgument.setValue(managedArgument, value); - }; - - /** - * Sends the given connection parameter values using "argv" streams, - * updating the behavior of the connection in real-time if the server is - * expecting or requiring these parameters. - * - * @param {ManagedClient} managedClient - * The ManagedClient instance associated with the active connection - * being modified. - * - * @param {Object.} values - * The set of values to attempt to assign to corresponding connection - * parameters, where each object key is the connection parameter being - * set. - */ - ManagedClient.sendArguments = function sendArguments(managedClient, values) { - angular.forEach(values, function sendArgument(value, name) { - var stream = managedClient.client.createArgumentValueStream("text/plain", name); - var writer = new Guacamole.StringWriter(stream); - writer.sendText(value); - writer.sendEnd(); - }); - }; - - /** - * Retrieves the current values of all editable connection parameters as a - * set of name/value pairs suitable for use as the model of a form which - * edits those parameters. - * - * @param {ManagedClient} client - * The ManagedClient instance associated with the active connection - * whose parameter values are being retrieved. - * - * @returns {Object.} - * A new set of name/value pairs containing the current values of all - * editable parameters. - */ - ManagedClient.getArgumentModel = function getArgumentModel(client) { - - var model = {}; - - angular.forEach(client.arguments, function addModelEntry(managedArgument) { - model[managedArgument.name] = managedArgument.value; - }); - - return model; - - }; - - /** - * Produces a sharing link for the given ManagedClient using the given - * sharing profile. The resulting sharing link, and any required login - * information, can be retrieved from the shareLinks property - * of the given ManagedClient once the various underlying service calls - * succeed. - * - * @param {ManagedClient} client - * The ManagedClient which will be shared via the generated sharing - * link. - * - * @param {SharingProfile} sharingProfile - * The sharing profile to use to generate the sharing link. - * - * @returns {Promise} - * A Promise which is resolved once the sharing link has been - * successfully generated, and rejected if generating the link fails. - */ - ManagedClient.createShareLink = function createShareLink(client, sharingProfile) { - - // Retrieve sharing credentials for the sake of generating a share link - var credentialRequest = tunnelService.getSharingCredentials( - client.tunnel.uuid, sharingProfile.identifier); - - // Add a new share link once the credentials are ready - credentialRequest.then(function sharingCredentialsReceived(sharingCredentials) { - client.shareLinks[sharingProfile.identifier] = - ManagedShareLink.getInstance(sharingProfile, sharingCredentials); - }, requestService.WARN); - - return credentialRequest; - - }; - - /** - * Returns whether the given ManagedClient is being shared. A ManagedClient - * is shared if it has any associated share links. - * - * @param {ManagedClient} client - * The ManagedClient to check. - * - * @returns {Boolean} - * true if the ManagedClient has at least one associated share link, - * false otherwise. - */ - ManagedClient.isShared = function isShared(client) { - - // The connection is shared if at least one share link exists - for (var dummy in client.shareLinks) - return true; - - // No share links currently exist - return false; - - }; - - /** - * Returns whether the given client has any associated file transfers, - * regardless of those file transfers' state. - * - * @param {GuacamoleClient} client - * The client for which file transfers should be checked. - * - * @returns {boolean} - * true if there are any file transfers associated with the - * given client, false otherwise. - */ - ManagedClient.hasTransfers = function hasTransfers(client) { - return !!(client && client.uploads && client.uploads.length); - }; - - /** - * Store the thumbnail of the given managed client within the connection - * history under its associated ID. If the client is not connected, this - * function has no effect. - * - * @param {ManagedClient} managedClient - * The client whose history entry should be updated. - */ - ManagedClient.updateThumbnail = function updateThumbnail(managedClient) { - - var display = managedClient.client.getDisplay(); - - // Update stored thumbnail of previous connection - if (display && display.getWidth() > 0 && display.getHeight() > 0) { - - // Get screenshot - var canvas = display.flatten(); - - // Calculate scale of thumbnail (max 320x240, max zoom 100%) - var scale = Math.min(320 / canvas.width, 240 / canvas.height, 1); - - // Create thumbnail canvas - var thumbnail = $document[0].createElement("canvas"); - thumbnail.width = canvas.width*scale; - thumbnail.height = canvas.height*scale; - - // Scale screenshot to thumbnail - var context = thumbnail.getContext("2d"); - context.drawImage(canvas, - 0, 0, canvas.width, canvas.height, - 0, 0, thumbnail.width, thumbnail.height - ); - - // Store updated thumbnail within client - managedClient.thumbnail = new ManagedClientThumbnail({ - timestamp : new Date().getTime(), - canvas : thumbnail - }); - - // Update historical thumbnail - guacHistory.updateThumbnail(managedClient.id, thumbnail.toDataURL("image/png")); - - } - - }; - - - /** - * Register a handler that will be automatically invoked for any deferred - * pipe stream with the provided name, either when a pipe stream with a - * name matching a registered handler is received, or immediately when this - * function is called, if such a pipe stream has already been received. - * - * NOTE: Pipe streams are automatically deferred by the default onpipe - * implementation. To preserve this behavior when using a custom onpipe - * callback, make sure to defer to the default implementation as needed. - * - * @param {ManagedClient} managedClient - * The client for which the deferred pipe stream handler should be set. - * - * @param {String} name - * The name of the pipe stream that should be handeled by the provided - * handler. If another handler is already registered for this name, it - * will be replaced by the handler provided to this function. - * - * @param {Function} handler - * The handler that should handle any deferred pipe stream with the - * provided name. This function must take the same arguments as the - * standard onpipe handler - namely, the stream itself, the mimetype, - * and the name. - */ - ManagedClient.registerDeferredPipeHandler = function registerDeferredPipeHandler( - managedClient, name, handler) { - managedClient.deferredPipeStreamHandlers[name] = handler; - - // Invoke the handler now, if the pipestream has already been received - if (managedClient.deferredPipeStreams[name]) { - - // Invoke the handler with the deferred pipe stream - var deferredStream = managedClient.deferredPipeStreams[name]; - handler(deferredStream.stream, - deferredStream.mimetype, - deferredStream.name); - - // Clean up the now-consumed pipe stream - delete managedClient.deferredPipeStreams[name]; - } - }; - - /** - * Detach the provided deferred pipe stream handler, if it is currently - * registered for the provided pipe stream name. - * - * @param {String} name - * The name of the associated pipe stream for the handler that should - * be detached. - * - * @param {Function} handler - * The handler that should be detached. - * - * @param {ManagedClient} managedClient - * The client for which the deferred pipe stream handler should be - * detached. - */ - ManagedClient.detachDeferredPipeHandler = function detachDeferredPipeHandler( - managedClient, name, handler) { - - // Remove the handler if found - if (managedClient.deferredPipeStreamHandlers[name] === handler) - delete managedClient.deferredPipeStreamHandlers[name]; - }; - - return ManagedClient; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedClientGroup.js b/guacamole/src/main/frontend/src/app/client/types/ManagedClientGroup.js deleted file mode 100644 index cd42bdc75b..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedClientGroup.js +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedClientGroup class used by the guacClientManager service. - */ -angular.module('client').factory('ManagedClientGroup', ['$injector', function defineManagedClientGroup($injector) { - - /** - * Object which serves as a grouping of ManagedClients. Each - * ManagedClientGroup may be attached, detached, and reattached dynamically - * from different client views, with its contents automatically displayed - * in a tiled arrangment if needed. - * - * @constructor - * @param {ManagedClientGroup|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedClientGroup. - */ - const ManagedClientGroup = function ManagedClientGroup(template) { - - // Use empty object by default - template = template || {}; - - /** - * The time that this group was last brought to the foreground of - * the current tab, as the number of milliseconds elapsed since - * midnight of January 1, 1970 UTC. If the group has not yet been - * viewed, this will be 0. - * - * @type Number - */ - this.lastUsed = template.lastUsed || 0; - - /** - * Whether this ManagedClientGroup is currently attached to the client - * interface (true) or is running in the background (false). - * - * @type {boolean} - * @default false - */ - this.attached = template.attached || false; - - /** - * The clients that should be displayed within the client interface - * when this group is attached. - * - * @type {ManagedClient[]} - * @default [] - */ - this.clients = template.clients || []; - - /** - * The number of rows that should be used when arranging the clients - * within this group in a grid. By default, this value is automatically - * calculated from the number of clients. - * - * @type {number} - */ - this.rows = template.rows || ManagedClientGroup.getRows(this); - - /** - * The number of columns that should be used when arranging the clients - * within this group in a grid. By default, this value is automatically - * calculated from the number of clients. - * - * @type {number} - */ - this.columns = template.columns || ManagedClientGroup.getColumns(this); - - }; - - /** - * Updates the number of rows and columns stored within the given - * ManagedClientGroup such that the clients within the group are evenly - * distributed. This function should be called whenever the size of a - * group changes. - * - * @param {ManagedClientGroup} group - * The ManagedClientGroup that should be updated. - */ - ManagedClientGroup.recalculateTiles = function recalculateTiles(group) { - - const recalculated = new ManagedClientGroup({ - clients : group.clients - }); - - group.rows = recalculated.rows; - group.columns = recalculated.columns; - - }; - - /** - * Returns the unique ID representing the given ManagedClientGroup or set - * of client IDs. The ID of a ManagedClientGroup consists simply of the - * IDs of all its ManagedClients, separated by periods. - * - * @param {ManagedClientGroup|string[]} group - * The ManagedClientGroup or array of client IDs to determine the - * ManagedClientGroup ID of. - * - * @returns {string} - * The unique ID representing the given ManagedClientGroup, or the - * unique ID that would represent a ManagedClientGroup containing the - * clients with the given IDs. - */ - ManagedClientGroup.getIdentifier = function getIdentifier(group) { - - if (!_.isArray(group)) - group = _.map(group.clients, client => client.id); - - return group.join('.'); - - }; - - /** - * Returns an array of client identifiers for all clients contained within - * the given ManagedClientGroup. Order of the identifiers is preserved - * with respect to the order of the clients within the group. - * - * @param {ManagedClientGroup|string} group - * The ManagedClientGroup to retrieve the client identifiers from, - * or its ID. - * - * @returns {string[]} - * The client identifiers of all clients contained within the given - * ManagedClientGroup. - */ - ManagedClientGroup.getClientIdentifiers = function getClientIdentifiers(group) { - - if (_.isString(group)) - return group.split(/\./); - - return group.clients.map(client => client.id); - - }; - - /** - * Returns the number of columns that should be used to evenly arrange - * all provided clients in a tiled grid. - * - * @returns {Number} - * The number of columns that should be used for the grid of - * clients. - */ - ManagedClientGroup.getColumns = function getColumns(group) { - - if (!group.clients.length) - return 0; - - return Math.ceil(Math.sqrt(group.clients.length)); - - }; - - /** - * Returns the number of rows that should be used to evenly arrange all - * provided clients in a tiled grid. - * - * @returns {Number} - * The number of rows that should be used for the grid of clients. - */ - ManagedClientGroup.getRows = function getRows(group) { - - if (!group.clients.length) - return 0; - - return Math.ceil(group.clients.length / ManagedClientGroup.getColumns(group)); - - }; - - /** - * Returns the title which should be displayed as the page title if the - * given client group is attached to the interface. - * - * @param {ManagedClientGroup} group - * The ManagedClientGroup to determine the title of. - * - * @returns {string} - * The title of the given ManagedClientGroup. - */ - ManagedClientGroup.getTitle = function getTitle(group) { - - // Use client-specific title if only one client - if (group.clients.length === 1) - return group.clients[0].title; - - // With multiple clients, somehow combining multiple page titles would - // be confusing. Instead, use the combined names. - return ManagedClientGroup.getName(group); - - }; - - /** - * Returns the combined names of all clients within the given - * ManagedClientGroup, as determined by the names of the associated - * connections or connection groups. - * - * @param {ManagedClientGroup} group - * The ManagedClientGroup to determine the name of. - * - * @returns {string} - * The combined names of all clients within the given - * ManagedClientGroup. - */ - ManagedClientGroup.getName = function getName(group) { - - // Generate a name from ONLY the focused clients, unless there are no - // focused clients - let relevantClients = _.filter(group.clients, client => client.clientProperties.focused); - if (!relevantClients.length) - relevantClients = group.clients; - - return _.filter(relevantClients, (client => !!client.name)).map(client => client.name).join(', ') || '...'; - - }; - - /** - * A callback that is invoked for a ManagedClient within a ManagedClientGroup. - * - * @callback ManagedClientGroup~clientCallback - * @param {ManagedClient} client - * The relevant ManagedClient. - * - * @param {number} row - * The row number of the client within the tiled grid, where 0 is the - * first row. - * - * @param {number} column - * The column number of the client within the tiled grid, where 0 is - * the first column. - * - * @param {number} index - * The index of the client within the relevant - * {@link ManagedClientGroup#clients} array. - */ - - /** - * Loops through each of the clients associated with the given - * ManagedClientGroup, invoking the given callback for each client. - * - * @param {ManagedClientGroup} group - * The ManagedClientGroup to loop through. - * - * @param {ManagedClientGroup~clientCallback} callback - * The callback to invoke for each of the clients within the given - * ManagedClientGroup. - */ - ManagedClientGroup.forEach = function forEach(group, callback) { - let current = 0; - for (let row = 0; row < group.rows; row++) { - for (let column = 0; column < group.columns; column++) { - - callback(group.clients[current], row, column, current); - current++; - - if (current >= group.clients.length) - return; - - } - } - }; - - /** - * Returns whether the given ManagedClientGroup contains more than one - * client. - * - * @param {ManagedClientGroup} group - * The ManagedClientGroup to test. - * - * @returns {boolean} - * true if two or more clients are currently present in the given - * group, false otherwise. - */ - ManagedClientGroup.hasMultipleClients = function hasMultipleClients(group) { - return group && group.clients.length > 1; - }; - - /** - * Returns a two-dimensional array of all ManagedClients within the given - * group, arranged in the grid defined by {@link ManagedClientGroup#rows} - * and {@link ManagedClientGroup#columns}. If any grid cell lacks a - * corresponding client (because the number of clients does not divide - * evenly into a grid), that cell will be null. - * - * For the sake of AngularJS scope watches, the results of calling this - * function are cached and will always favor modifying an existing array - * over creating a new array, even for nested arrays. - * - * @param {ManagedClientGroup} group - * The ManagedClientGroup defining the tiled grid arrangement of - * ManagedClients. - * - * @returns {ManagedClient[][]} - * A two-dimensional array of all ManagedClients within the given - * group. - */ - ManagedClientGroup.getClientGrid = function getClientGrid(group) { - - let index = 0; - - // Operate on cached copy of grid - const clientGrid = group._grid || (group._grid = []); - - // Delete any rows in excess of the required size - clientGrid.splice(group.rows); - - for (let row = 0; row < group.rows; row++) { - - // Prefer to use existing column arrays, deleting any columns in - // excess of the required size - const currentRow = clientGrid[row] || (clientGrid[row] = []); - currentRow.splice(group.columns); - - for (let column = 0; column < group.columns; column++) { - currentRow[column] = group.clients[index++] || null; - } - - } - - return clientGrid; - - }; - - /** - * Verifies that focus is assigned to at least one client in the given - * group. If no client has focus, focus is assigned to the first client in - * the group. - * - * @param {ManagedClientGroup} group - * The group to verify. - */ - ManagedClientGroup.verifyFocus = function verifyFocus(group) { - - // Focus the first client if there are no clients focused - if (group.clients.length >= 1 && _.findIndex(group.clients, client => client.clientProperties.focused) === -1) { - group.clients[0].clientProperties.focused = true; - } - - }; - - return ManagedClientGroup; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedClientState.js b/guacamole/src/main/frontend/src/app/client/types/ManagedClientState.js deleted file mode 100644 index 10f71b4d29..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedClientState.js +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedClient class used by the guacClientManager service. - */ -angular.module('client').factory('ManagedClientState', [function defineManagedClientState() { - - /** - * Object which represents the state of a Guacamole client and its tunnel, - * including any error conditions. - * - * @constructor - * @param {ManagedClientState|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedClientState. - */ - var ManagedClientState = function ManagedClientState(template) { - - // Use empty object by default - template = template || {}; - - /** - * The current connection state. Valid values are described by - * ManagedClientState.ConnectionState. - * - * @type String - * @default ManagedClientState.ConnectionState.IDLE - */ - this.connectionState = template.connectionState || ManagedClientState.ConnectionState.IDLE; - - /** - * Whether the network connection used by the tunnel seems unstable. If - * the network connection is unstable, the remote desktop connection - * may perform poorly or disconnect. - * - * @type Boolean - * @default false - */ - this.tunnelUnstable = template.tunnelUnstable || false; - - /** - * The status code of the current error condition, if connectionState - * is CLIENT_ERROR or TUNNEL_ERROR. For all other connectionState - * values, this will be @link{Guacamole.Status.Code.SUCCESS}. - * - * @type Number - * @default Guacamole.Status.Code.SUCCESS - */ - this.statusCode = template.statusCode || Guacamole.Status.Code.SUCCESS; - - }; - - /** - * Valid connection state strings. Each state string is associated with a - * specific state of a Guacamole connection. - */ - ManagedClientState.ConnectionState = { - - /** - * The Guacamole connection has not yet been attempted. - * - * @type String - */ - IDLE : "IDLE", - - /** - * The Guacamole connection is being established. - * - * @type String - */ - CONNECTING : "CONNECTING", - - /** - * The Guacamole connection has been successfully established, and the - * client is now waiting for receipt of initial graphical data. - * - * @type String - */ - WAITING : "WAITING", - - /** - * The Guacamole connection has been successfully established, and - * initial graphical data has been received. - * - * @type String - */ - CONNECTED : "CONNECTED", - - /** - * The Guacamole connection has terminated successfully. No errors are - * indicated. - * - * @type String - */ - DISCONNECTED : "DISCONNECTED", - - /** - * The Guacamole connection has terminated due to an error reported by - * the client. The associated error code is stored in statusCode. - * - * @type String - */ - CLIENT_ERROR : "CLIENT_ERROR", - - /** - * The Guacamole connection has terminated due to an error reported by - * the tunnel. The associated error code is stored in statusCode. - * - * @type String - */ - TUNNEL_ERROR : "TUNNEL_ERROR" - - }; - - /** - * Sets the current client state and, if given, the associated status code. - * If an error is already represented, this function has no effect. If the - * client state was previously marked as unstable, that flag is implicitly - * cleared. - * - * @param {ManagedClientState} clientState - * The ManagedClientState to update. - * - * @param {String} connectionState - * The connection state to assign to the given ManagedClientState, as - * listed within ManagedClientState.ConnectionState. - * - * @param {Number} [statusCode] - * The status code to assign to the given ManagedClientState, if any, - * as listed within Guacamole.Status.Code. If no status code is - * specified, the status code of the ManagedClientState is not touched. - */ - ManagedClientState.setConnectionState = function(clientState, connectionState, statusCode) { - - // Do not set state after an error is registered - if (clientState.connectionState === ManagedClientState.ConnectionState.TUNNEL_ERROR - || clientState.connectionState === ManagedClientState.ConnectionState.CLIENT_ERROR) - return; - - // Update connection state - clientState.connectionState = connectionState; - clientState.tunnelUnstable = false; - - // Set status code, if given - if (statusCode) - clientState.statusCode = statusCode; - - }; - - /** - * Updates the given client state, setting whether the underlying tunnel - * is currently unstable. An unstable tunnel is not necessarily - * disconnected, but appears to be misbehaving and may be disconnected. - * - * @param {ManagedClientState} clientState - * The ManagedClientState to update. - * - * @param {Boolean} unstable - * Whether the underlying tunnel of the connection currently appears - * unstable. - */ - ManagedClientState.setTunnelUnstable = function setTunnelUnstable(clientState, unstable) { - clientState.tunnelUnstable = unstable; - }; - - return ManagedClientState; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedClientThumbnail.js b/guacamole/src/main/frontend/src/app/client/types/ManagedClientThumbnail.js deleted file mode 100644 index fd9b3dea5e..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedClientThumbnail.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedClientThumbnail class used by ManagedClient. - */ -angular.module('client').factory('ManagedClientThumbnail', [function defineManagedClientThumbnail() { - - /** - * Object which represents a thumbnail of the Guacamole client display, - * along with the time that the thumbnail was generated. - * - * @constructor - * @param {ManagedClientThumbnail|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedClientThumbnail. - */ - var ManagedClientThumbnail = function ManagedClientThumbnail(template) { - - // Use empty object by default - template = template || {}; - - /** - * The time that this thumbnail was generated, as the number of - * milliseconds elapsed since midnight of January 1, 1970 UTC. - * - * @type Number - */ - this.timestamp = template.timestamp; - - /** - * The thumbnail of the Guacamole client display. - * - * @type HTMLCanvasElement - */ - this.canvas = template.canvas; - - }; - - return ManagedClientThumbnail; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedDisplay.js b/guacamole/src/main/frontend/src/app/client/types/ManagedDisplay.js deleted file mode 100644 index fedefad5dc..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedDisplay.js +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedDisplay class used by the guacClientManager service. - */ -angular.module('client').factory('ManagedDisplay', ['$rootScope', - function defineManagedDisplay($rootScope) { - - /** - * Object which serves as a surrogate interface, encapsulating a Guacamole - * display while it is active, allowing it to be detached and reattached - * from different client views. - * - * @constructor - * @param {ManagedDisplay|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedDisplay. - */ - var ManagedDisplay = function ManagedDisplay(template) { - - // Use empty object by default - template = template || {}; - - /** - * The underlying Guacamole display. - * - * @type Guacamole.Display - */ - this.display = template.display; - - /** - * The current size of the Guacamole display. - * - * @type ManagedDisplay.Dimensions - */ - this.size = new ManagedDisplay.Dimensions(template.size); - - /** - * The current mouse cursor, if any. - * - * @type ManagedDisplay.Cursor - */ - this.cursor = template.cursor; - - }; - - /** - * Object which represents the size of the Guacamole display. - * - * @constructor - * @param {ManagedDisplay.Dimensions|Object} template - * The object whose properties should be copied within the new - * ManagedDisplay.Dimensions. - */ - ManagedDisplay.Dimensions = function Dimensions(template) { - - // Use empty object by default - template = template || {}; - - /** - * The current width of the Guacamole display, in pixels. - * - * @type Number - */ - this.width = template.width || 0; - - /** - * The current width of the Guacamole display, in pixels. - * - * @type Number - */ - this.height = template.height || 0; - - }; - - /** - * Object which represents a mouse cursor used by the Guacamole display. - * - * @constructor - * @param {ManagedDisplay.Cursor|Object} template - * The object whose properties should be copied within the new - * ManagedDisplay.Cursor. - */ - ManagedDisplay.Cursor = function Cursor(template) { - - // Use empty object by default - template = template || {}; - - /** - * The actual mouse cursor image. - * - * @type HTMLCanvasElement - */ - this.canvas = template.canvas; - - /** - * The X coordinate of the cursor hotspot. - * - * @type Number - */ - this.x = template.x; - - /** - * The Y coordinate of the cursor hotspot. - * - * @type Number - */ - this.y = template.y; - - }; - - /** - * Creates a new ManagedDisplay which represents the current state of the - * given Guacamole display. - * - * @param {Guacamole.Display} display - * The Guacamole display to represent. Changes to this display will - * affect this ManagedDisplay. - * - * @returns {ManagedDisplay} - * A new ManagedDisplay which represents the current state of the - * given Guacamole display. - */ - ManagedDisplay.getInstance = function getInstance(display) { - - var managedDisplay = new ManagedDisplay({ - display : display - }); - - // Store changes to display size - display.onresize = function setClientSize() { - $rootScope.$apply(function updateClientSize() { - managedDisplay.size = new ManagedDisplay.Dimensions({ - width : display.getWidth(), - height : display.getHeight() - }); - }); - }; - - // Store changes to display cursor - display.oncursor = function setClientCursor(canvas, x, y) { - $rootScope.$apply(function updateClientCursor() { - managedDisplay.cursor = new ManagedDisplay.Cursor({ - canvas : canvas, - x : x, - y : y - }); - }); - }; - - return managedDisplay; - - }; - - return ManagedDisplay; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedFileTransferState.js b/guacamole/src/main/frontend/src/app/client/types/ManagedFileTransferState.js deleted file mode 100644 index 1301cc7a91..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedFileTransferState.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedFileTransferState class used by the guacClientManager - * service. - */ -angular.module('client').factory('ManagedFileTransferState', [function defineManagedFileTransferState() { - - /** - * Object which represents the state of a Guacamole stream, including any - * error conditions. - * - * @constructor - * @param {ManagedFileTransferState|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedFileTransferState. - */ - var ManagedFileTransferState = function ManagedFileTransferState(template) { - - // Use empty object by default - template = template || {}; - - /** - * The current stream state. Valid values are described by - * ManagedFileTransferState.StreamState. - * - * @type String - * @default ManagedFileTransferState.StreamState.IDLE - */ - this.streamState = template.streamState || ManagedFileTransferState.StreamState.IDLE; - - /** - * The status code of the current error condition, if streamState - * is ERROR. For all other streamState values, this will be - * @link{Guacamole.Status.Code.SUCCESS}. - * - * @type Number - * @default Guacamole.Status.Code.SUCCESS - */ - this.statusCode = template.statusCode || Guacamole.Status.Code.SUCCESS; - - }; - - /** - * Valid stream state strings. Each state string is associated with a - * specific state of a Guacamole stream. - */ - ManagedFileTransferState.StreamState = { - - /** - * The stream has not yet been opened. - * - * @type String - */ - IDLE : "IDLE", - - /** - * The stream has been successfully established. Data can be sent or - * received. - * - * @type String - */ - OPEN : "OPEN", - - /** - * The stream has terminated successfully. No errors are indicated. - * - * @type String - */ - CLOSED : "CLOSED", - - /** - * The stream has terminated due to an error. The associated error code - * is stored in statusCode. - * - * @type String - */ - ERROR : "ERROR" - - }; - - /** - * Sets the current transfer state and, if given, the associated status - * code. If an error is already represented, this function has no effect. - * - * @param {ManagedFileTransferState} transferState - * The ManagedFileTransferState to update. - * - * @param {String} streamState - * The stream state to assign to the given ManagedFileTransferState, as - * listed within ManagedFileTransferState.StreamState. - * - * @param {Number} [statusCode] - * The status code to assign to the given ManagedFileTransferState, if - * any, as listed within Guacamole.Status.Code. If no status code is - * specified, the status code of the ManagedFileTransferState is not - * touched. - */ - ManagedFileTransferState.setStreamState = function setStreamState(transferState, streamState, statusCode) { - - // Do not set state after an error is registered - if (transferState.streamState === ManagedFileTransferState.StreamState.ERROR) - return; - - // Update stream state - transferState.streamState = streamState; - - // Set status code, if given - if (statusCode) - transferState.statusCode = statusCode; - - }; - - return ManagedFileTransferState; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedFileUpload.js b/guacamole/src/main/frontend/src/app/client/types/ManagedFileUpload.js deleted file mode 100644 index 95eef0c61f..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedFileUpload.js +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedFileUpload class used by the guacClientManager service. - */ -angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector', - function defineManagedFileUpload($rootScope, $injector) { - - // Required types - var Error = $injector.get('Error'); - var ManagedFileTransferState = $injector.get('ManagedFileTransferState'); - - // Required services - var requestService = $injector.get('requestService'); - var tunnelService = $injector.get('tunnelService'); - - /** - * Object which serves as a surrogate interface, encapsulating a Guacamole - * file upload while it is active, allowing it to be detached and - * reattached from different client views. - * - * @constructor - * @param {ManagedFileUpload|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedFileUpload. - */ - var ManagedFileUpload = function ManagedFileUpload(template) { - - // Use empty object by default - template = template || {}; - - /** - * The current state of the file transfer stream. - * - * @type ManagedFileTransferState - */ - this.transferState = template.transferState || new ManagedFileTransferState(); - - /** - * The mimetype of the file being transferred. - * - * @type String - */ - this.mimetype = template.mimetype; - - /** - * The filename of the file being transferred. - * - * @type String - */ - this.filename = template.filename; - - /** - * The number of bytes transferred so far. - * - * @type Number - */ - this.progress = template.progress; - - /** - * The total number of bytes in the file. - * - * @type Number - */ - this.length = template.length; - - }; - - /** - * Creates a new ManagedFileUpload which uploads the given file to the - * server through the given Guacamole client. - * - * @param {ManagedClient} managedClient - * The ManagedClient through which the file is to be uploaded. - * - * @param {File} file - * The file to upload. - * - * @param {Object} [object] - * The object to upload the file to, if any, such as a filesystem - * object. - * - * @param {String} [streamName] - * The name of the stream to upload the file to. If an object is given, - * this must be specified. - * - * @return {ManagedFileUpload} - * A new ManagedFileUpload object which can be used to track the - * progress of the upload. - */ - ManagedFileUpload.getInstance = function getInstance(managedClient, file, object, streamName) { - - var managedFileUpload = new ManagedFileUpload(); - - // Pull Guacamole.Tunnel and Guacamole.Client from given ManagedClient - var client = managedClient.client; - var tunnel = managedClient.tunnel; - - // Open file for writing - var stream; - if (!object) - stream = client.createFileStream(file.type, file.name); - - // If object/streamName specified, upload to that instead of a file - // stream - else - stream = object.createOutputStream(file.type, streamName); - - // Notify that the file transfer is pending - $rootScope.$evalAsync(function uploadStreamOpen() { - - // Init managed upload - managedFileUpload.filename = file.name; - managedFileUpload.mimetype = file.type; - managedFileUpload.progress = 0; - managedFileUpload.length = file.size; - - // Notify that stream is open - ManagedFileTransferState.setStreamState(managedFileUpload.transferState, - ManagedFileTransferState.StreamState.OPEN); - - }); - - // Upload file once stream is acknowledged - stream.onack = function beginUpload(status) { - - // Notify of any errors from the Guacamole server - if (status.isError()) { - $rootScope.$apply(function uploadStreamError() { - ManagedFileTransferState.setStreamState(managedFileUpload.transferState, - ManagedFileTransferState.StreamState.ERROR, - status.code); - }); - return; - } - - // Begin upload - tunnelService.uploadToStream(tunnel.uuid, stream, file, function uploadContinuing(length) { - $rootScope.$apply(function uploadStreamProgress() { - managedFileUpload.progress = length; - }); - }) - - // Notify if upload succeeds - .then(function uploadSuccessful() { - - // Upload complete - managedFileUpload.progress = file.size; - - // Close the stream - stream.sendEnd(); - ManagedFileTransferState.setStreamState(managedFileUpload.transferState, - ManagedFileTransferState.StreamState.CLOSED); - - // Notify of upload completion - $rootScope.$broadcast('guacUploadComplete', file.name); - }, - - // Notify if upload fails - requestService.createErrorCallback(function uploadFailed(error) { - - // Use provide status code if the error is coming from the stream - if (error.type === Error.Type.STREAM_ERROR) - ManagedFileTransferState.setStreamState(managedFileUpload.transferState, - ManagedFileTransferState.StreamState.ERROR, - error.statusCode); - - // Fail with internal error for all other causes - else - ManagedFileTransferState.setStreamState(managedFileUpload.transferState, - ManagedFileTransferState.StreamState.ERROR, - Guacamole.Status.Code.INTERNAL_ERROR); - - // Close the stream - stream.sendEnd(); - - })); - - // Ignore all further acks - stream.onack = null; - - - }; - - return managedFileUpload; - - }; - - return ManagedFileUpload; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedFilesystem.js b/guacamole/src/main/frontend/src/app/client/types/ManagedFilesystem.js deleted file mode 100644 index a81fcb1685..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedFilesystem.js +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedFilesystem class used by ManagedClient to represent - * available remote filesystems. - */ -angular.module('client').factory('ManagedFilesystem', ['$rootScope', '$injector', - function defineManagedFilesystem($rootScope, $injector) { - - // Required types - var tunnelService = $injector.get('tunnelService'); - - /** - * Object which serves as a surrogate interface, encapsulating a Guacamole - * filesystem object while it is active, allowing it to be detached and - * reattached from different client views. - * - * @constructor - * @param {ManagedFilesystem|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedFilesystem. - */ - var ManagedFilesystem = function ManagedFilesystem(template) { - - // Use empty object by default - template = template || {}; - - /** - * The client that originally received the "filesystem" instruction - * that resulted in the creation of this ManagedFilesystem. - * - * @type ManagedClient - */ - this.client = template.client; - - /** - * The Guacamole filesystem object, as received via a "filesystem" - * instruction. - * - * @type Guacamole.Object - */ - this.object = template.object; - - /** - * The declared, human-readable name of the filesystem - * - * @type String - */ - this.name = template.name; - - /** - * The root directory of the filesystem. - * - * @type ManagedFilesystem.File - */ - this.root = template.root; - - /** - * The current directory being viewed or manipulated within the - * filesystem. - * - * @type ManagedFilesystem.File - */ - this.currentDirectory = template.currentDirectory || template.root; - - }; - - /** - * Refreshes the contents of the given file, if that file is a directory. - * Only the immediate children of the file are refreshed. Files further - * down the directory tree are not refreshed. - * - * @param {ManagedFilesystem} filesystem - * The filesystem associated with the file being refreshed. - * - * @param {ManagedFilesystem.File} file - * The file being refreshed. - */ - ManagedFilesystem.refresh = function updateDirectory(filesystem, file) { - - // Do not attempt to refresh the contents of directories - if (file.mimetype !== Guacamole.Object.STREAM_INDEX_MIMETYPE) - return; - - // Request contents of given file - filesystem.object.requestInputStream(file.streamName, function handleStream(stream, mimetype) { - - // Ignore stream if mimetype is wrong - if (mimetype !== Guacamole.Object.STREAM_INDEX_MIMETYPE) { - stream.sendAck('Unexpected mimetype', Guacamole.Status.Code.UNSUPPORTED); - return; - } - - // Signal server that data is ready to be received - stream.sendAck('Ready', Guacamole.Status.Code.SUCCESS); - - // Read stream as JSON - var reader = new Guacamole.JSONReader(stream); - - // Acknowledge received JSON blobs - reader.onprogress = function onprogress() { - stream.sendAck("Received", Guacamole.Status.Code.SUCCESS); - }; - - // Reset contents of directory - reader.onend = function jsonReady() { - $rootScope.$evalAsync(function updateFileContents() { - - // Empty contents - file.files = {}; - - // Determine the expected filename prefix of each stream - var expectedPrefix = file.streamName; - if (expectedPrefix.charAt(expectedPrefix.length - 1) !== '/') - expectedPrefix += '/'; - - // For each received stream name - var mimetypes = reader.getJSON(); - for (var name in mimetypes) { - - // Assert prefix is correct - if (name.substring(0, expectedPrefix.length) !== expectedPrefix) - continue; - - // Extract filename from stream name - var filename = name.substring(expectedPrefix.length); - - // Deduce type from mimetype - var type = ManagedFilesystem.File.Type.NORMAL; - if (mimetypes[name] === Guacamole.Object.STREAM_INDEX_MIMETYPE) - type = ManagedFilesystem.File.Type.DIRECTORY; - - // Add file entry - file.files[filename] = new ManagedFilesystem.File({ - mimetype : mimetypes[name], - streamName : name, - type : type, - parent : file, - name : filename - }); - - } - - }); - }; - - }); - - }; - - /** - * Creates a new ManagedFilesystem instance from the given Guacamole.Object - * and human-readable name. Upon creation, a request to populate the - * contents of the root directory will be automatically dispatched. - * - * @param {ManagedClient} client - * The client that originally received the "filesystem" instruction - * that resulted in the creation of this ManagedFilesystem. - * - * @param {Guacamole.Object} object - * The Guacamole.Object defining the filesystem. - * - * @param {String} name - * A human-readable name for the filesystem. - * - * @returns {ManagedFilesystem} - * The newly-created ManagedFilesystem. - */ - ManagedFilesystem.getInstance = function getInstance(client, object, name) { - - // Init new filesystem object - var managedFilesystem = new ManagedFilesystem({ - client : client, - object : object, - name : name, - root : new ManagedFilesystem.File({ - mimetype : Guacamole.Object.STREAM_INDEX_MIMETYPE, - streamName : Guacamole.Object.ROOT_STREAM, - type : ManagedFilesystem.File.Type.DIRECTORY - }) - }); - - // Retrieve contents of root - ManagedFilesystem.refresh(managedFilesystem, managedFilesystem.root); - - return managedFilesystem; - - }; - - /** - * Downloads the given file from the server using the given Guacamole - * client and filesystem. The browser will automatically start the - * download upon completion of this function. - * - * @param {ManagedFilesystem} managedFilesystem - * The ManagedFilesystem from which the file is to be downloaded. Any - * path information provided must be relative to this filesystem. - * - * @param {String} path - * The full, absolute path of the file to download. - */ - ManagedFilesystem.downloadFile = function downloadFile(managedFilesystem, path) { - - // Request download - managedFilesystem.object.requestInputStream(path, function downloadStreamReceived(stream, mimetype) { - - // Parse filename from string - var filename = path.match(/(.*[\\/])?(.*)/)[2]; - - // Start download - tunnelService.downloadStream(managedFilesystem.client.tunnel.uuid, stream, mimetype, filename); - - }); - - }; - - /** - * Changes the current directory of the given filesystem, automatically - * refreshing the contents of that directory. - * - * @param {ManagedFilesystem} filesystem - * The filesystem whose current directory should be changed. - * - * @param {ManagedFilesystem.File} file - * The directory to change to. - */ - ManagedFilesystem.changeDirectory = function changeDirectory(filesystem, file) { - - // Refresh contents - ManagedFilesystem.refresh(filesystem, file); - - // Set current directory - filesystem.currentDirectory = file; - - }; - - /** - * A file within a ManagedFilesystem. Each ManagedFilesystem.File provides - * sufficient information for retrieval or replacement of the file's - * contents, as well as the file's name and type. - * - * @param {ManagedFilesystem|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedFilesystem.File. - */ - ManagedFilesystem.File = function File(template) { - - /** - * The mimetype of the data contained within this file. - * - * @type String - */ - this.mimetype = template.mimetype; - - /** - * The name of the stream representing this files contents within its - * associated filesystem object. - * - * @type String - */ - this.streamName = template.streamName; - - /** - * The type of this file. All legal file type strings are defined - * within ManagedFilesystem.File.Type. - * - * @type String - */ - this.type = template.type; - - /** - * The name of this file. - * - * @type String - */ - this.name = template.name; - - /** - * The parent directory of this file. In the case of the root - * directory, this will be null. - * - * @type ManagedFilesystem.File - */ - this.parent = template.parent; - - /** - * Map of all known files containined within this file by name. This is - * only applicable to directories. - * - * @type Object. - */ - this.files = template.files || {}; - - }; - - /** - * All legal type strings for a ManagedFilesystem.File. - * - * @type Object. - */ - ManagedFilesystem.File.Type = { - - /** - * A normal file. As ManagedFilesystem does not currently represent any - * other non-directory types of files, like symbolic links, this type - * string may be used for any non-directory file. - * - * @type String - */ - NORMAL : 'NORMAL', - - /** - * A directory. - * - * @type String - */ - DIRECTORY : 'DIRECTORY' - - }; - - return ManagedFilesystem; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/types/ManagedShareLink.js b/guacamole/src/main/frontend/src/app/client/types/ManagedShareLink.js deleted file mode 100644 index 6afa93d0ff..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/ManagedShareLink.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ManagedShareLink class used by ManagedClient to represent - * generated connection sharing links. - */ -angular.module('client').factory('ManagedShareLink', ['$injector', - function defineManagedShareLink($injector) { - - // Required types - var UserCredentials = $injector.get('UserCredentials'); - - /** - * Object which represents a link which can be used to gain access to an - * active Guacamole connection. - * - * @constructor - * @param {ManagedShareLink|Object} [template={}] - * The object whose properties should be copied within the new - * ManagedShareLink. - */ - var ManagedShareLink = function ManagedShareLink(template) { - - // Use empty object by default - template = template || {}; - - /** - * The human-readable display name of this share link. - * - * @type String - */ - this.name = template.name; - - /** - * The actual URL of the link which can be used to access the shared - * connection. - * - * @type String - */ - this.href = template.href; - - /** - * The sharing profile which was used to generate the share link. - * - * @type SharingProfile - */ - this.sharingProfile = template.sharingProfile; - - /** - * The credentials from which the share link was derived. - * - * @type UserCredentials - */ - this.sharingCredentials = template.sharingCredentials; - - }; - - /** - * Creates a new ManagedShareLink from a set of UserCredentials and the - * SharingProfile which was used to generate those UserCredentials. - * - * @param {SharingProfile} sharingProfile - * The SharingProfile which was used, via the REST API, to generate the - * given UserCredentials. - * - * @param {UserCredentials} sharingCredentials - * The UserCredentials object returned by the REST API in response to a - * request to share a connection using the given SharingProfile. - * - * @return {ManagedShareLink} - * A new ManagedShareLink object can be used to access the connection - * shared via the given SharingProfile and resulting UserCredentials. - */ - ManagedShareLink.getInstance = function getInstance(sharingProfile, sharingCredentials) { - - // Generate new share link using the given profile and credentials - return new ManagedShareLink({ - 'name' : sharingProfile.name, - 'href' : UserCredentials.getLink(sharingCredentials), - 'sharingProfile' : sharingProfile, - 'sharingCredentials' : sharingCredentials - }); - - }; - - return ManagedShareLink; - -}]); diff --git a/guacamole/src/main/frontend/src/app/client/types/TranslationResult.js b/guacamole/src/main/frontend/src/app/client/types/TranslationResult.js deleted file mode 100644 index 0a81511bb9..0000000000 --- a/guacamole/src/main/frontend/src/app/client/types/TranslationResult.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the TranslationResult class used by the guacTranslate service. This class contains - * both the translated message and the translation ID that generated the message, in the case - * where it's unknown whether a translation is defined or not. - */ - angular.module('client').factory('TranslationResult', [function defineTranslationResult() { - - /** - * Object which represents the result of a translation as returned from - * the guacTranslate service. - * - * @constructor - * @param {TranslationResult|Object} [template={}] - * The object whose properties should be copied within the new - * TranslationResult. - */ - const TranslationResult = function TranslationResult(template) { - - // Use empty object by default - template = template || {}; - - /** - * The translation ID. - * - * @type {String} - */ - this.id = template.id; - - /** - * The translated message. - * - * @type {String} - */ - this.message = template.message; - - }; - - return TranslationResult; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/clipboard/clipboardModule.js b/guacamole/src/main/frontend/src/app/clipboard/clipboardModule.js deleted file mode 100644 index b7528a4d33..0000000000 --- a/guacamole/src/main/frontend/src/app/clipboard/clipboardModule.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for code used to manipulate/observe the clipboard. - */ -angular.module('clipboard', []); diff --git a/guacamole/src/main/frontend/src/app/clipboard/directives/guacClipboard.js b/guacamole/src/main/frontend/src/app/clipboard/directives/guacClipboard.js deleted file mode 100644 index 315b08b5f8..0000000000 --- a/guacamole/src/main/frontend/src/app/clipboard/directives/guacClipboard.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive provides an editor for the clipboard content maintained by - * clipboardService. Changes to the clipboard by clipboardService will - * automatically be reflected in the editor, and changes in the editor will - * automatically be reflected in the clipboard by clipboardService. - */ -angular.module('clipboard').directive('guacClipboard', ['$injector', - function guacClipboard($injector) { - - // Required types - const ClipboardData = $injector.get('ClipboardData'); - - // Required services - const $window = $injector.get('$window'); - const clipboardService = $injector.get('clipboardService'); - - /** - * Configuration object for the guacClipboard directive. - * - * @type Object. - */ - var config = { - restrict : 'E', - replace : true, - templateUrl : 'app/clipboard/templates/guacClipboard.html' - }; - - // guacClipboard directive controller - config.controller = ['$scope', '$injector', '$element', - function guacClipboardController($scope, $injector, $element) { - - /** - * The DOM element which will contain the clipboard contents within the - * user interface provided by this directive. We populate the clipboard - * editor via this DOM element rather than updating a model so that we - * are prepared for future support of rich text contents. - * - * @type {!Element} - */ - var element = $element[0].querySelectorAll('.clipboard')[0]; - - /** - * Whether clipboard contents should be displayed in the clipboard - * editor. If false, clipboard contents will not be displayed until - * the user manually reveals them. - * - * @type {!boolean} - */ - $scope.contentsShown = false; - - /** - * Reveals the contents of the clipboard editor, automatically - * assigning input focus to the editor if possible. - */ - $scope.showContents = function showContents() { - $scope.contentsShown = true; - $window.setTimeout(function setFocus() { - element.focus(); - }, 0); - }; - - /** - * Rereads the contents of the clipboard field, updating the - * ClipboardData object on the scope as necessary. The type of data - * stored within the ClipboardData object will be heuristically - * determined from the HTML contents of the clipboard field. - */ - var updateClipboardData = function updateClipboardData() { - - // Read contents of clipboard textarea - clipboardService.setClipboard(new ClipboardData({ - type : 'text/plain', - data : element.value - })); - - }; - - /** - * Updates the contents of the clipboard editor to the given data. - * - * @param {ClipboardData} data - * The ClipboardData to display within the clipboard editor for - * editing. - */ - const updateClipboardEditor = function updateClipboardEditor(data) { - - // If the clipboard data is a string, render it as text - if (typeof data.data === 'string') - element.value = data.data; - - // Ignore other data types for now - - }; - - // Update the internally-stored clipboard data when events are fired - // that indicate the clipboard field may have been changed - element.addEventListener('input', updateClipboardData); - element.addEventListener('change', updateClipboardData); - - // Update remote clipboard if local clipboard changes - $scope.$on('guacClipboard', function clipboardChanged(event, data) { - updateClipboardEditor(data); - }); - - // Init clipboard editor with current clipboard contents - clipboardService.getClipboard().then((data) => { - updateClipboardEditor(data); - }, angular.noop); - - }]; - - return config; - -}]); diff --git a/guacamole/src/main/frontend/src/app/clipboard/services/clipboardService.js b/guacamole/src/main/frontend/src/app/clipboard/services/clipboardService.js deleted file mode 100644 index 4ec9d04b8b..0000000000 --- a/guacamole/src/main/frontend/src/app/clipboard/services/clipboardService.js +++ /dev/null @@ -1,625 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for maintaining and accessing clipboard data. If possible, this - * service will leverage the local clipboard. If the local clipboard is not - * available, an internal in-memory clipboard will be used instead. - */ -angular.module('clipboard').factory('clipboardService', ['$injector', - function clipboardService($injector) { - - // Get required services - const $q = $injector.get('$q'); - const $window = $injector.get('$window'); - const $rootScope = $injector.get('$rootScope'); - const sessionStorageFactory = $injector.get('sessionStorageFactory'); - - // Required types - const ClipboardData = $injector.get('ClipboardData'); - - /** - * Getter/setter which retrieves or sets the current stored clipboard - * contents. The stored clipboard contents are strictly internal to - * Guacamole, and may not reflect the local clipboard if local clipboard - * access is unavailable. - * - * @type Function - */ - const storedClipboardData = sessionStorageFactory.create(new ClipboardData()); - - var service = {}; - - /** - * The amount of time to wait before actually serving a request to read - * clipboard data, in milliseconds. Providing a reasonable delay between - * request and read attempt allows the cut/copy operation to settle, in - * case the data we are anticipating to be present is not actually present - * in the clipboard yet. - * - * @constant - * @type Number - */ - var CLIPBOARD_READ_DELAY = 100; - - /** - * The promise associated with the current pending clipboard read attempt. - * If no clipboard read is active, this will be null. - * - * @type Promise. - */ - var pendingRead = null; - - /** - * Reference to the window.document object. - * - * @private - * @type HTMLDocument - */ - var document = $window.document; - - /** - * The textarea that will be used to hold the local clipboard contents. - * - * @type Element - */ - var clipboardContent = document.createElement('textarea'); - - // Ensure clipboard target is selectable but not visible - clipboardContent.className = 'clipboard-service-target'; - - // Add clipboard target to DOM - document.body.appendChild(clipboardContent); - - /** - * Stops the propagation of the given event through the DOM tree. This is - * identical to invoking stopPropagation() on the event directly, except - * that this function is usable as an event handler itself. - * - * @param {Event} e - * The event whose propagation through the DOM tree should be stopped. - */ - var stopEventPropagation = function stopEventPropagation(e) { - e.stopPropagation(); - }; - - // Prevent events generated due to execCommand() from disturbing external things - clipboardContent.addEventListener('cut', stopEventPropagation); - clipboardContent.addEventListener('copy', stopEventPropagation); - clipboardContent.addEventListener('paste', stopEventPropagation); - clipboardContent.addEventListener('input', stopEventPropagation); - - /** - * A stack of past node selection ranges. A range convering the nodes - * currently selected within the document can be pushed onto this stack - * with pushSelection(), and the most recently pushed selection can be - * popped off the stack (and thus re-selected) with popSelection(). - * - * @type Range[] - */ - var selectionStack = []; - - /** - * Pushes the current selection range to the selection stack such that it - * can later be restored with popSelection(). - */ - var pushSelection = function pushSelection() { - - // Add a range representing the current selection to the stack - var selection = $window.getSelection(); - if (selection.getRangeAt && selection.rangeCount) - selectionStack.push(selection.getRangeAt(0)); - - }; - - /** - * Pops a selection range off the selection stack restoring the document's - * previous selection state. The selection range will be the most recent - * selection range pushed by pushSelection(). If there are no selection - * ranges currently on the stack, this function has no effect. - */ - var popSelection = function popSelection() { - - // Pull one selection range from the stack - var range = selectionStack.pop(); - if (!range) - return; - - // Replace any current selection with the retrieved selection - var selection = $window.getSelection(); - selection.removeAllRanges(); - selection.addRange(range); - - }; - - /** - * Selects all nodes within the given element. This will replace the - * current selection with a new selection range that covers the element's - * contents. If the original selection should be preserved, use - * pushSelection() and popSelection(). - * - * @param {Element} element - * The element whose contents should be selected. - */ - var selectAll = function selectAll(element) { - - // Use the select() function defined for input elements, if available - if (element.select) - element.select(); - - // Fallback to manual manipulation of the selection - else { - - // Generate a range which selects all nodes within the given element - var range = document.createRange(); - range.selectNodeContents(element); - - // Replace any current selection with the generated range - var selection = $window.getSelection(); - selection.removeAllRanges(); - selection.addRange(range); - - } - - }; - - /** - * Sets the local clipboard, if possible, to the given text. - * - * @param {ClipboardData} data - * The data to assign to the local clipboard should be set. - * - * @return {Promise} - * A promise that will resolve if setting the clipboard was successful, - * and will reject if it failed. - */ - const setLocalClipboard = function setLocalClipboard(data) { - - var deferred = $q.defer(); - - try { - - // Attempt to read the clipboard using the Asynchronous Clipboard - // API, if it's available - if (navigator.clipboard && navigator.clipboard.writeText) { - if (data.type === 'text/plain') { - navigator.clipboard.writeText(data.data).then(deferred.resolve, deferred.reject); - return deferred.promise; - } - } - - } - - // Ignore any hard failures to use Asynchronous Clipboard API, falling - // back to traditional document.execCommand() - catch (ignore) {} - - // Track the originally-focused element prior to changing focus - var originalElement = document.activeElement; - pushSelection(); - - // Copy the given value into the clipboard DOM element - if (typeof data.data === 'string') - clipboardContent.value = data.data; - else { - clipboardContent.innerHTML = ''; - var img = document.createElement('img'); - img.src = URL.createObjectURL(data.data); - clipboardContent.appendChild(img); - } - - // Select all data within the clipboard target - clipboardContent.focus(); - selectAll(clipboardContent); - - // Attempt to copy data from clipboard element into local clipboard - if (document.execCommand('copy')) - deferred.resolve(); - else - deferred.reject(); - - // Unfocus the clipboard DOM event to avoid mobile keyboard opening, - // restoring whichever element was originally focused - clipboardContent.blur(); - originalElement.focus(); - popSelection(); - - return deferred.promise; - }; - - /** - * Parses the given data URL, returning its decoded contents as a new Blob. - * If the URL is not a valid data URL, null will be returned instead. - * - * @param {String} url - * The data URL to parse. - * - * @returns {Blob} - * A new Blob containing the decoded contents of the data URL, or null - * if the URL is not a valid data URL. - */ - service.parseDataURL = function parseDataURL(url) { - - // Parse given string as a data URL - var result = /^data:([^;]*);base64,([a-zA-Z0-9+/]*[=]*)$/.exec(url); - if (!result) - return null; - - // Pull the mimetype and base64 contents of the data URL - var type = result[1]; - var data = $window.atob(result[2]); - - // Convert the decoded binary string into a typed array - var buffer = new Uint8Array(data.length); - for (var i = 0; i < data.length; i++) - buffer[i] = data.charCodeAt(i); - - // Produce a proper blob containing the data and type provided in - // the data URL - return new Blob([buffer], { type : type }); - - }; - - /** - * Returns the content of the given element as plain, unformatted text, - * preserving only individual characters and newlines. Formatting, images, - * etc. are not taken into account. - * - * @param {Element} element - * The element whose text content should be returned. - * - * @returns {String} - * The plain text contents of the given element, including newlines and - * spacing but otherwise without any formatting. - */ - service.getTextContent = function getTextContent(element) { - - var blocks = []; - var currentBlock = ''; - - // For each child of the given element - var current = element.firstChild; - while (current) { - - // Simply append the content of any text nodes - if (current.nodeType === Node.TEXT_NODE) - currentBlock += current.nodeValue; - - // Render
    as a newline character - else if (current.nodeName === 'BR') - currentBlock += '\n'; - - // Render as alt text, if available - else if (current.nodeName === 'IMG') - currentBlock += current.getAttribute('alt') || ''; - - // For all other nodes, handling depends on whether they are - // block-level elements - else { - - // If we are entering a new block context, start a new block if - // the current block is non-empty - if (currentBlock.length && $window.getComputedStyle(current).display === 'block') { - - // Trim trailing newline (would otherwise inflate the line count by 1) - if (currentBlock.substring(currentBlock.length - 1) === '\n') - currentBlock = currentBlock.substring(0, currentBlock.length - 1); - - // Finish current block and start a new block - blocks.push(currentBlock); - currentBlock = ''; - - } - - // Append the content of the current element to the current block - currentBlock += service.getTextContent(current); - - } - - current = current.nextSibling; - - } - - // Add any in-progress block - if (currentBlock.length) - blocks.push(currentBlock); - - // Combine all non-empty blocks, separated by newlines - return blocks.join('\n'); - - }; - - /** - * Replaces the current text content of the given element with the given - * text. To avoid affecting the position of the cursor within an editable - * element, or firing unnecessary DOM modification events, the underlying - * textContent property of the element is only touched if - * doing so would actually change the text. - * - * @param {Element} element - * The element whose text content should be changed. - * - * @param {String} text - * The text content to assign to the given element. - */ - service.setTextContent = function setTextContent(element, text) { - - // Strip out any images - $(element).find('img').remove(); - - // Reset text content only if doing so will actually change the content - if (service.getTextContent(element) !== text) - element.textContent = text; - - }; - - /** - * Returns the URL of the single image within the given element, if the - * element truly contains only one child and that child is an image. If the - * content of the element is mixed or not an image, null is returned. - * - * @param {Element} element - * The element whose image content should be retrieved. - * - * @returns {String} - * The URL of the image contained within the given element, if that - * element contains only a single child element which happens to be an - * image, or null if the content of the element is not purely an image. - */ - service.getImageContent = function getImageContent(element) { - - // Return the source of the single child element, if it is an image - var firstChild = element.firstChild; - if (firstChild && firstChild.nodeName === 'IMG' && !firstChild.nextSibling) - return firstChild.getAttribute('src'); - - // Otherwise, the content of this element is not simply an image - return null; - - }; - - /** - * Replaces the current contents of the given element with a single image - * having the given URL. To avoid affecting the position of the cursor - * within an editable element, or firing unnecessary DOM modification - * events, the content of the element is only touched if doing so would - * actually change content. - * - * @param {Element} element - * The element whose image content should be changed. - * - * @param {String} url - * The URL of the image which should be assigned as the contents of the - * given element. - */ - service.setImageContent = function setImageContent(element, url) { - - // Retrieve the URL of the current image contents, if any - var currentImage = service.getImageContent(element); - - // If the current contents are not the given image (or not an image - // at all), reassign the contents - if (currentImage !== url) { - - // Clear current contents - element.innerHTML = ''; - - // Add a new image as the sole contents of the element - var img = document.createElement('img'); - img.src = url; - element.appendChild(img); - - } - - }; - - /** - * Get the current value of the local clipboard. - * - * @return {Promise.} - * A promise that will resolve with the contents of the local clipboard - * if getting the clipboard was successful, and will reject if it - * failed. - */ - const getLocalClipboard = function getLocalClipboard() { - - // If the clipboard is already being read, do not overlap the read - // attempts; instead share the result across all requests - if (pendingRead) - return pendingRead; - - var deferred = $q.defer(); - - try { - - // Attempt to read the clipboard using the Asynchronous Clipboard - // API, if it's available - if (navigator.clipboard && navigator.clipboard.readText) { - - navigator.clipboard.readText().then(function textRead(text) { - deferred.resolve(new ClipboardData({ - type : 'text/plain', - data : text - })); - }, deferred.reject); - - return deferred.promise; - - } - - } - - // Ignore any hard failures to use Asynchronous Clipboard API, falling - // back to traditional document.execCommand() - catch (ignore) {} - - // Track the originally-focused element prior to changing focus - var originalElement = document.activeElement; - - /** - * Attempts to paste the clipboard contents into the - * currently-focused element. The promise related to the current - * attempt to read the clipboard will be resolved or rejected - * depending on whether the attempt to paste succeeds. - */ - var performPaste = function performPaste() { - - // Attempt paste local clipboard into clipboard DOM element - if (document.execCommand('paste')) { - - // If the pasted data is a single image, resolve with a blob - // containing that image - var currentImage = service.getImageContent(clipboardContent); - if (currentImage) { - - // Convert the image's data URL into a blob - var blob = service.parseDataURL(currentImage); - if (blob) { - deferred.resolve(new ClipboardData({ - type : blob.type, - data : blob - })); - } - - // Reject if conversion fails - else - deferred.reject(); - - } // end if clipboard is an image - - // Otherwise, assume the clipboard contains plain text - else - deferred.resolve(new ClipboardData({ - type : 'text/plain', - data : clipboardContent.value - })); - - } - - // Otherwise, reading from the clipboard has failed - else - deferred.reject(); - - }; - - // Mark read attempt as in progress, cleaning up event listener and - // selection once the paste attempt has completed - pendingRead = deferred.promise['finally'](function cleanupReadAttempt() { - - // Do not use future changes in focus - clipboardContent.removeEventListener('focus', performPaste); - - // Unfocus the clipboard DOM event to avoid mobile keyboard opening, - // restoring whichever element was originally focused - clipboardContent.blur(); - originalElement.focus(); - popSelection(); - - // No read is pending any longer - pendingRead = null; - - }); - - // Wait for the next event queue run before attempting to read - // clipboard data (in case the copy/cut has not yet completed) - $window.setTimeout(function deferredClipboardRead() { - - pushSelection(); - - // Ensure clipboard element is blurred (and that the "focus" event - // will fire) - clipboardContent.blur(); - clipboardContent.addEventListener('focus', performPaste); - - // Clear and select the clipboard DOM element - clipboardContent.value = ''; - clipboardContent.focus(); - selectAll(clipboardContent); - - // If focus failed to be set, we cannot read the clipboard - if (document.activeElement !== clipboardContent) - deferred.reject(); - - }, CLIPBOARD_READ_DELAY); - - return pendingRead; - - }; - - /** - * Returns the current value of the internal clipboard shared across all - * active Guacamole connections running within the current browser tab. If - * access to the local clipboard is available, the internal clipboard is - * first synchronized with the current local clipboard contents. If access - * to the local clipboard is unavailable, only the internal clipboard will - * be used. - * - * @return {Promise.} - * A promise that will resolve with the contents of the internal - * clipboard, first retrieving those contents from the local clipboard - * if permission to do so has been granted. This promise is always - * resolved. - */ - service.getClipboard = function getClipboard() { - return getLocalClipboard().then((data) => storedClipboardData(data), () => storedClipboardData()); - }; - - /** - * Sets the content of the internal clipboard shared across all active - * Guacamole connections running within the current browser tab. If - * access to the local clipboard is available, the local clipboard is - * first set to the provided clipboard content. If access to the local - * clipboard is unavailable, only the internal clipboard will be used. A - * "guacClipboard" event will be broadcast with the assigned data once the - * operation has completed. - * - * @param {ClipboardData} data - * The data to assign to the clipboard. - * - * @return {Promise} - * A promise that will resolve after the clipboard content has been - * set. This promise is always resolved. - */ - service.setClipboard = function setClipboard(data) { - return setLocalClipboard(data)['catch'](angular.noop).finally(() => { - - // Update internal clipboard and broadcast event notifying of - // updated contents - storedClipboardData(data); - $rootScope.$broadcast('guacClipboard', data); - - }); - }; - - /** - * Resynchronizes the local and internal clipboards, setting the contents - * of the internal clipboard to that of the local clipboard (if local - * clipboard access is granted) and broadcasting a "guacClipboard" event - * with the current internal clipboard contents for consumption by external - * components like the "guacClient" directive. - */ - service.resyncClipboard = function resyncClipboard() { - getLocalClipboard().then(function clipboardRead(data) { - return service.setClipboard(data); - }, angular.noop); - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/clipboard/styles/clipboard.css b/guacamole/src/main/frontend/src/app/clipboard/styles/clipboard.css deleted file mode 100644 index cec0c26503..0000000000 --- a/guacamole/src/main/frontend/src/app/clipboard/styles/clipboard.css +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.clipboard, .clipboard-service-target { - background: white; -} - -.clipboard { - position: relative; - border: 1px solid #AAA; - -moz-border-radius: 0.25em; - -webkit-border-radius: 0.25em; - -khtml-border-radius: 0.25em; - border-radius: 0.25em; - width: 100%; - height: 2in; - white-space: pre; - padding: 0.25em; -} - -.clipboard p, -.clipboard div { - margin: 0; -} - -.clipboard img { - max-width: 100%; - max-height: 100%; - display: block; - margin: 0 auto; - border: 1px solid black; - background: url('images/checker.svg'); -} - -.clipboard-service-target { - position: fixed; - left: -1em; - right: -1em; - width: 1em; - height: 1em; - white-space: pre; - overflow: hidden; -} - -.clipboard-editor { - position: relative; -} - -.clipboard-editor .clipboard { - overflow: auto; - font-size: 1em; -} - -.clipboard-editor .clipboard.clipboard-contents-hidden { - color: transparent; - overflow: hidden; -} - -.clipboard-editor .clipboard-contents-hidden-hint { - - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - - cursor: pointer; - - display: flex; - align-items: center; - -} - -.clipboard-editor .clipboard-contents-hidden-hint .clipboard-contents-hidden-hint-text { - - flex: 1; - - background: rgba(0, 0, 0, 0.125); - color: #888; - - padding: 0.5em; - overflow: hidden; - font-size: 0.9em; - text-align: center; - font-style: italic; - -} - -.clipboard-editor .clipboard-contents-hidden-hint:hover .clipboard-contents-hidden-hint-text { - text-decoration: underline; -} diff --git a/guacamole/src/main/frontend/src/app/clipboard/templates/guacClipboard.html b/guacamole/src/main/frontend/src/app/clipboard/templates/guacClipboard.html deleted file mode 100644 index 159ee356a1..0000000000 --- a/guacamole/src/main/frontend/src/app/clipboard/templates/guacClipboard.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - -
    -

    {{ 'CLIENT.ACTION_SHOW_CLIPBOARD' | translate }}

    -
    -
    diff --git a/guacamole/src/main/frontend/src/app/clipboard/types/ClipboardData.js b/guacamole/src/main/frontend/src/app/clipboard/types/ClipboardData.js deleted file mode 100644 index 34f699a29d..0000000000 --- a/guacamole/src/main/frontend/src/app/clipboard/types/ClipboardData.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ClipboardData class used for interchange between the - * guacClipboard directive, clipboardService service, etc. - */ -angular.module('clipboard').factory('ClipboardData', [function defineClipboardData() { - - /** - * Arbitrary data which can be contained by the clipboard. - * - * @constructor - * @param {ClipboardData|Object} [template={}] - * The object whose properties should be copied within the new - * ClipboardData. - */ - var ClipboardData = function ClipboardData(template) { - - // Use empty object by default - template = template || {}; - - /** - * The ID of the ManagedClient handling the remote desktop connection - * that originated this clipboard data, or null if the data originated - * from the clipboard editor or local clipboard. - * - * @type {string} - */ - this.source = template.source; - - /** - * The mimetype of the data currently stored within the clipboard. - * - * @type String - */ - this.type = template.type || 'text/plain'; - - /** - * The data currently stored within the clipboard. Depending on the - * nature of the stored data, this may be either a String, a Blob, or a - * File. - * - * @type String|Blob|File - */ - this.data = template.data || ''; - - }; - - return ClipboardData; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/directives/guacClick.js b/guacamole/src/main/frontend/src/app/element/directives/guacClick.js deleted file mode 100644 index 0847d3c538..0000000000 --- a/guacamole/src/main/frontend/src/app/element/directives/guacClick.js +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides handling of click and click-like touch events. - * The state of Shift and Ctrl modifiers is tracked through these click events - * to allow for specific handling of Shift+Click and Ctrl+Click. - */ -angular.module('element').directive('guacClick', [function guacClick() { - - return { - restrict: 'A', - - link: function linkGuacClick($scope, $element, $attrs) { - - /** - * A callback that is invoked by the guacClick directive when a - * click or click-like event is received. - * - * @callback guacClick~callback - * @param {boolean} shift - * Whether Shift was held down at the time the click occurred. - * - * @param {boolean} ctrl - * Whether Ctrl or Meta (the Mac "Command" key) was held down - * at the time the click occurred. - */ - - /** - * The callback to invoke when a click or click-like event is - * received on the associated element. - * - * @type guacClick~callback - */ - const guacClick = $scope.$eval($attrs.guacClick); - - /** - * The element which will register the click. - * - * @type Element - */ - const element = $element[0]; - - /** - * Whether either Shift key is currently pressed. - * - * @type boolean - */ - let shift = false; - - /** - * Whether either Ctrl key is currently pressed. To allow the - * Command key to be used on Mac platforms, this flag also - * considers the state of either Meta key. - * - * @type boolean - */ - let ctrl = false; - - /** - * Updates the state of the {@link shift} and {@link ctrl} flags - * based on which keys are currently marked as held down by the - * given Guacamole.Keyboard. - * - * @param {Guacamole.Keyboard} keyboard - * The Guacamole.Keyboard instance to read key states from. - */ - const updateModifiers = function updateModifiers(keyboard) { - - shift = !!( - keyboard.pressed[0xFFE1] // Left shift - || keyboard.pressed[0xFFE2] // Right shift - ); - - ctrl = !!( - keyboard.pressed[0xFFE3] // Left ctrl - || keyboard.pressed[0xFFE4] // Right ctrl - || keyboard.pressed[0xFFE7] // Left meta (command) - || keyboard.pressed[0xFFE8] // Right meta (command) - ); - - }; - - // Update tracking of modifier states for each key press - $scope.$on('guacKeydown', function keydownListener(event, keysym, keyboard) { - updateModifiers(keyboard); - }); - - // Update tracking of modifier states for each key release - $scope.$on('guacKeyup', function keyupListener(event, keysym, keyboard) { - updateModifiers(keyboard); - }); - - // Fire provided callback for each mouse-initiated "click" event ... - element.addEventListener('click', function elementClicked(e) { - if (element.contains(e.target)) - $scope.$apply(() => guacClick(shift, ctrl)); - }); - - // ... and for touch-initiated click-like events - element.addEventListener('touchstart', function elementClicked(e) { - if (element.contains(e.target)) - $scope.$apply(() => guacClick(shift, ctrl)); - }); - - } // end guacClick link function - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/directives/guacDrop.js b/guacamole/src/main/frontend/src/app/element/directives/guacDrop.js deleted file mode 100644 index 3f7070694f..0000000000 --- a/guacamole/src/main/frontend/src/app/element/directives/guacDrop.js +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which allows multiple files to be uploaded. Dragging files onto - * the associated element will call the provided callback function with any - * dragged files. - */ -angular.module('element').directive('guacDrop', ['$injector', function guacDrop($injector) { - - // Required services - const guacNotification = $injector.get('guacNotification'); - - return { - restrict: 'A', - - link: function linkGuacDrop($scope, $element, $attrs) { - - /** - * The function to call whenever files are dragged. The callback is - * provided a single parameter: the FileList containing all dragged - * files. - * - * @type Function - */ - const guacDrop = $scope.$eval($attrs.guacDrop); - - /** - * Any number of space-seperated classes to be applied to the - * element a drop is pending: when the user has dragged something - * over the element, but not yet dropped. These classes will be - * removed when a drop is not pending. - * - * @type String - */ - const guacDraggedClass = $scope.$eval($attrs.guacDraggedClass); - - /** - * Whether upload of multiple files should be allowed. If false, an - * error will be displayed explaining the restriction, otherwise - * any number of files may be dragged. Defaults to true if not set. - * - * @type Boolean - */ - const guacMultiple = 'guacMultiple' in $attrs - ? $scope.$eval($attrs.guacMultiple) : true; - - /** - * The element which will register drag event. - * - * @type Element - */ - const element = $element[0]; - - /** - * Applies any classes provided in the guacDraggedClass attribute. - * Further propagation and default behavior of the given event is - * automatically prevented. - * - * @param {Event} e - * The event related to the in-progress drag/drop operation. - */ - const notifyDragStart = function notifyDragStart(e) { - - e.preventDefault(); - e.stopPropagation(); - - // Skip further processing if no classes were provided - if (!guacDraggedClass) - return; - - // Add each provided class - guacDraggedClass.split(' ').forEach(classToApply => - element.classList.add(classToApply)); - - }; - - /** - * Removes any classes provided in the guacDraggedClass attribute. - * Further propagation and default behavior of the given event is - * automatically prevented. - * - * @param {Event} e - * The event related to the end of the drag/drop operation. - */ - const notifyDragEnd = function notifyDragEnd(e) { - - e.preventDefault(); - e.stopPropagation(); - - // Skip further processing if no classes were provided - if (!guacDraggedClass) - return; - - // Remove each provided class - guacDraggedClass.split(' ').forEach(classToRemove => - element.classList.remove(classToRemove)); - - }; - - // Add listeners to the drop target to ensure that the visual state - // stays up to date - element.addEventListener('dragenter', notifyDragStart); - element.addEventListener('dragover', notifyDragStart); - element.addEventListener('dragleave', notifyDragEnd); - - /** - * Event listener that will be invoked if the user drops anything - * onto the event. If a valid file is provided, the onFile callback - * provided to this directive will be called; otherwise an error - * will be displayed, if appropriate. - * - * @param {Event} e - * The drop event that triggered this handler. - */ - element.addEventListener('drop', e => { - - notifyDragEnd(e); - - const files = e.dataTransfer.files; - - // Ignore any non-files that are dragged into the drop area - if (files.length < 1) - return; - - // If multi-file upload is disabled, If more than one file was - // provided, print an error explaining the problem - if (!guacMultiple && files.length >= 2) { - - guacNotification.showStatus({ - className : 'error', - title : 'APP.DIALOG_HEADER_ERROR', - text: { key : 'APP.ERROR_SINGLE_FILE_ONLY'}, - - // Add a button to hide the error - actions : [{ - name : 'APP.ACTION_ACKNOWLEDGE', - callback : () => guacNotification.showStatus(false) - }] - }); - return; - - } - - // Invoke the callback with the files. Note that if guacMultiple - // is set to false, this will always be a single file. - guacDrop(files); - - }); - - } // end guacDrop link function - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/directives/guacFocus.js b/guacamole/src/main/frontend/src/app/element/directives/guacFocus.js deleted file mode 100644 index 5087e7f92c..0000000000 --- a/guacamole/src/main/frontend/src/app/element/directives/guacFocus.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which allows elements to be manually focused / blurred. - */ -angular.module('element').directive('guacFocus', ['$injector', function guacFocus($injector) { - - // Required services - var $parse = $injector.get('$parse'); - var $timeout = $injector.get('$timeout'); - - return { - restrict: 'A', - - link: function linkGuacFocus($scope, $element, $attrs) { - - /** - * Whether the element associated with this directive should be - * focussed. - * - * @type Boolean - */ - var guacFocus = $parse($attrs.guacFocus); - - /** - * The element which will be focused / blurred. - * - * @type Element - */ - var element = $element[0]; - - // Set/unset focus depending on value of guacFocus - $scope.$watch(guacFocus, function updateFocus(value) { - $timeout(function updateFocusAfterRender() { - if (value) - element.focus(); - else - element.blur(); - }); - }); - - } // end guacFocus link function - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/directives/guacMarker.js b/guacamole/src/main/frontend/src/app/element/directives/guacMarker.js deleted file mode 100644 index 3ca15bdcca..0000000000 --- a/guacamole/src/main/frontend/src/app/element/directives/guacMarker.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which stores a marker which refers to a specific element, - * allowing that element to be scrolled into view when desired. - */ -angular.module('element').directive('guacMarker', ['$injector', function guacMarker($injector) { - - // Required types - var Marker = $injector.get('Marker'); - - // Required services - var $parse = $injector.get('$parse'); - - return { - restrict: 'A', - - link: function linkGuacMarker($scope, $element, $attrs) { - - /** - * The property in which a new Marker should be stored. The new - * Marker will refer to the element associated with this directive. - * - * @type Marker - */ - var guacMarker = $parse($attrs.guacMarker); - - /** - * The element to associate with the new Marker. - * - * @type Element - */ - var element = $element[0]; - - // Assign new marker - guacMarker.assign($scope, new Marker(element)); - - } - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/directives/guacResize.js b/guacamole/src/main/frontend/src/app/element/directives/guacResize.js deleted file mode 100644 index 0d8794a778..0000000000 --- a/guacamole/src/main/frontend/src/app/element/directives/guacResize.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which calls a given callback when its associated element is - * resized. This will modify the internal DOM tree of the associated element, - * and the associated element MUST have position (for example, - * "position: relative"). - */ -angular.module('element').directive('guacResize', ['$document', function guacResize($document) { - - return { - restrict: 'A', - - link: function linkGuacResize($scope, $element, $attrs) { - - /** - * The function to call whenever the associated element is - * resized. The function will be passed the width and height of - * the element, in pixels. - * - * @type Function - */ - var guacResize = $scope.$eval($attrs.guacResize); - - /** - * The element which will monitored for size changes. - * - * @type Element - */ - var element = $element[0]; - - /** - * The resize sensor - an HTML object element. - * - * @type HTMLObjectElement - */ - var resizeSensor = $document[0].createElement('object'); - - /** - * The width of the associated element, in pixels. - * - * @type Number - */ - var lastWidth = element.offsetWidth; - - /** - * The height of the associated element, in pixels. - * - * @type Number - */ - var lastHeight = element.offsetHeight; - - /** - * Checks whether the size of the associated element has changed - * and, if so, calls the resize callback with the new width and - * height as parameters. - */ - var checkSize = function checkSize() { - - // Call callback only if size actually changed - if (element.offsetWidth !== lastWidth - || element.offsetHeight !== lastHeight) { - - // Call resize callback, if defined - if (guacResize) { - $scope.$evalAsync(function elementSizeChanged() { - guacResize(element.offsetWidth, element.offsetHeight); - }); - } - - // Update stored size - lastWidth = element.offsetWidth; - lastHeight = element.offsetHeight; - - } - - }; - - // Register event listener once window object exists - resizeSensor.onload = function resizeSensorReady() { - resizeSensor.contentDocument.defaultView.addEventListener('resize', checkSize); - checkSize(); - }; - - // Load blank contents - resizeSensor.className = 'resize-sensor'; - resizeSensor.type = 'text/html'; - resizeSensor.data = 'app/element/templates/blank.html'; - - // Add resize sensor to associated element - element.insertBefore(resizeSensor, element.firstChild); - - } // end guacResize link function - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/directives/guacScroll.js b/guacamole/src/main/frontend/src/app/element/directives/guacScroll.js deleted file mode 100644 index 630897d238..0000000000 --- a/guacamole/src/main/frontend/src/app/element/directives/guacScroll.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which allows elements to be manually scrolled, and for their - * scroll state to be observed. - */ -angular.module('element').directive('guacScroll', [function guacScroll() { - - return { - restrict: 'A', - - link: function linkGuacScroll($scope, $element, $attrs) { - - /** - * The current scroll state of the element. - * - * @type ScrollState - */ - var guacScroll = $scope.$eval($attrs.guacScroll); - - /** - * The element which is being scrolled, or monitored for changes - * in scroll. - * - * @type Element - */ - var element = $element[0]; - - /** - * Returns the current left edge of the scrolling rectangle. - * - * @returns {Number} - * The current left edge of the scrolling rectangle. - */ - var getScrollLeft = function getScrollLeft() { - return guacScroll.left; - }; - - /** - * Returns the current top edge of the scrolling rectangle. - * - * @returns {Number} - * The current top edge of the scrolling rectangle. - */ - var getScrollTop = function getScrollTop() { - return guacScroll.top; - }; - - // Update underlying scrollLeft property when left changes - $scope.$watch(getScrollLeft, function scrollLeftChanged(left) { - element.scrollLeft = left; - guacScroll.left = element.scrollLeft; - }); - - // Update underlying scrollTop property when top changes - $scope.$watch(getScrollTop, function scrollTopChanged(top) { - element.scrollTop = top; - guacScroll.top = element.scrollTop; - }); - - } // end guacScroll link function - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/directives/guacUpload.js b/guacamole/src/main/frontend/src/app/element/directives/guacUpload.js deleted file mode 100644 index d1c10a9daa..0000000000 --- a/guacamole/src/main/frontend/src/app/element/directives/guacUpload.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which allows files to be uploaded. Clicking on the associated - * element will result in a file selector dialog, which then calls the provided - * callback function with any chosen files. - */ -angular.module('element').directive('guacUpload', ['$document', function guacUpload($document) { - - return { - restrict: 'A', - - link: function linkGuacUpload($scope, $element, $attrs) { - - /** - * The function to call whenever files are chosen. The callback is - * provided a single parameter: the FileList containing all chosen - * files. - * - * @type Function - */ - const guacUpload = $scope.$eval($attrs.guacUpload); - - /** - * Whether upload of multiple files should be allowed. If false, the - * file dialog will only allow a single file to be chosen at once, - * otherwise any number of files may be chosen. Defaults to true if - * not set. - * - * @type Boolean - */ - const guacMultiple = 'guacMultiple' in $attrs - ? $scope.$eval($attrs.guacMultiple) : true; - - /** - * The element which will register the click. - * - * @type Element - */ - const element = $element[0]; - - /** - * Internal form, containing a single file input element. - * - * @type HTMLFormElement - */ - const form = $document[0].createElement('form'); - - /** - * Internal file input element. - * - * @type HTMLInputElement - */ - const input = $document[0].createElement('input'); - - // Init input element - input.type = 'file'; - input.multiple = guacMultiple; - - // Add input element to internal form - form.appendChild(input); - - // Notify of any chosen files - input.addEventListener('change', function filesSelected() { - $scope.$apply(function setSelectedFiles() { - - // Only set chosen files selection is not canceled - if (guacUpload && input.files.length > 0) - guacUpload(input.files); - - // Reset selection - form.reset(); - - }); - }); - - // Open file chooser when element is clicked - element.addEventListener('click', function elementClicked() { - input.click(); - }); - - } // end guacUpload link function - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/elementModule.js b/guacamole/src/main/frontend/src/app/element/elementModule.js deleted file mode 100644 index 0b564fb597..0000000000 --- a/guacamole/src/main/frontend/src/app/element/elementModule.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for manipulating element state, such as focus or scroll position, as - * well as handling browser events. - */ -angular.module('element', []); diff --git a/guacamole/src/main/frontend/src/app/element/styles/resize-sensor.css b/guacamole/src/main/frontend/src/app/element/styles/resize-sensor.css deleted file mode 100644 index 9f308eb471..0000000000 --- a/guacamole/src/main/frontend/src/app/element/styles/resize-sensor.css +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.resize-sensor { - height: 100%; - width: 100%; - position: absolute; - left: 0; - top: 0; - overflow: hidden; - border: none; - opacity: 0; - z-index: -1; -} diff --git a/guacamole/src/main/frontend/src/app/element/templates/blank.html b/guacamole/src/main/frontend/src/app/element/templates/blank.html deleted file mode 100644 index 47dc938be6..0000000000 --- a/guacamole/src/main/frontend/src/app/element/templates/blank.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - _ - - - diff --git a/guacamole/src/main/frontend/src/app/element/types/Marker.js b/guacamole/src/main/frontend/src/app/element/types/Marker.js deleted file mode 100644 index c1b47acb5f..0000000000 --- a/guacamole/src/main/frontend/src/app/element/types/Marker.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the Marker class definition. - */ -angular.module('element').factory('Marker', [function defineMarker() { - - /** - * Creates a new Marker which allows its associated element to be scolled - * into view as desired. - * - * @constructor - * @param {Element} element - * The element to associate with this marker. - */ - var Marker = function Marker(element) { - - /** - * Scrolls scrollable elements, or the window, as needed to bring the - * element associated with this marker into view. - */ - this.scrollIntoView = function scrollIntoView() { - element.scrollIntoView(); - }; - - }; - - return Marker; - -}]); diff --git a/guacamole/src/main/frontend/src/app/element/types/ScrollState.js b/guacamole/src/main/frontend/src/app/element/types/ScrollState.js deleted file mode 100644 index 89562432d0..0000000000 --- a/guacamole/src/main/frontend/src/app/element/types/ScrollState.js +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ScrollState class definition. - */ -angular.module('element').factory('ScrollState', [function defineScrollState() { - - /** - * Creates a new ScrollState, representing the current scroll position of - * an arbitrary element. This constructor initializes the properties of the - * new ScrollState with the corresponding properties of the given template. - * - * @constructor - * @param {ScrollState|Object} [template={}] - * The object whose properties should be copied within the new - * ScrollState. - */ - var ScrollState = function ScrollState(template) { - - // Use empty object by default - template = template || {}; - - /** - * The left edge of the view rectangle within the scrollable area. This - * value naturally increases as the user scrolls right. - * - * @type Number - */ - this.left = template.left || 0; - - /** - * The top edge of the view rectangle within the scrollable area. This - * value naturally increases as the user scrolls down. - * - * @type Number - */ - this.top = template.top || 0; - - }; - - return ScrollState; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/checkboxFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/checkboxFieldController.js deleted file mode 100644 index bb2676c5bb..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/checkboxFieldController.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for checkbox fields. - */ -angular.module('form').controller('checkboxFieldController', ['$scope', - function checkboxFieldController($scope) { - - // Update typed value when model is changed - $scope.$watch('model', function modelChanged(model) { - $scope.typedValue = (model === $scope.field.options[0]); - }); - - // Update string value in model when typed value is changed - $scope.$watch('typedValue', function typedValueChanged(typedValue) { - $scope.model = (typedValue ? $scope.field.options[0] : ''); - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/dateFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/dateFieldController.js deleted file mode 100644 index 31d85a8a8c..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/dateFieldController.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for date fields. - */ -angular.module('form').controller('dateFieldController', ['$scope', '$injector', - function dateFieldController($scope, $injector) { - - // Required services - var $filter = $injector.get('$filter'); - - /** - * Options which dictate the behavior of the input field model, as defined - * by https://docs.angularjs.org/api/ng/directive/ngModelOptions - * - * @type Object. - */ - $scope.modelOptions = { - - /** - * Space-delimited list of events on which the model will be updated. - * - * @type String - */ - updateOn : 'blur', - - /** - * The time zone to use when reading/writing the Date object of the - * model. - * - * @type String - */ - timezone : 'UTC' - - }; - - /** - * Parses the date components of the given string into a Date with only the - * date components set. The resulting Date will be in the UTC timezone, - * with the time left as midnight. The input string must be in the format - * YYYY-MM-DD (zero-padded). - * - * @param {String} str - * The date string to parse. - * - * @returns {Date} - * A Date object, in the UTC timezone, with only the date components - * set. - */ - var parseDate = function parseDate(str) { - - // Parse date, return blank if invalid - var parsedDate = new Date(str + 'T00:00Z'); - if (isNaN(parsedDate.getTime())) - return null; - - return parsedDate; - - }; - - // Update typed value when model is changed - $scope.$watch('model', function modelChanged(model) { - $scope.typedValue = (model ? parseDate(model) : null); - }); - - // Update string value in model when typed value is changed - $scope.$watch('typedValue', function typedValueChanged(typedValue) { - $scope.model = (typedValue ? $filter('date')(typedValue, 'yyyy-MM-dd', 'UTC') : ''); - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/languageFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/languageFieldController.js deleted file mode 100644 index b7669ffc9d..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/languageFieldController.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for the language field type. The language field type allows the - * user to select a language from the set of languages supported by the - * Guacamole web application. - */ -angular.module('form').controller('languageFieldController', ['$scope', '$injector', - function languageFieldController($scope, $injector) { - - // Required services - var languageService = $injector.get('languageService'); - var requestService = $injector.get('requestService'); - - /** - * A map of all available language keys to their human-readable - * names. - * - * @type Object. - */ - $scope.languages = null; - - // Retrieve defined languages - languageService.getLanguages().then(function languagesRetrieved(languages) { - $scope.languages = languages; - }, requestService.DIE); - - // Interpret undefined/null as empty string - $scope.$watch('model', function setModel(model) { - if (!model && model !== '') - $scope.model = ''; - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/numberFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/numberFieldController.js deleted file mode 100644 index 02da81bda2..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/numberFieldController.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for number fields. - */ -angular.module('form').controller('numberFieldController', ['$scope', - function numberFieldController($scope) { - - // Update typed value when model is changed - $scope.$watch('model', function modelChanged(model) { - $scope.typedValue = (model ? Number(model) : null); - }); - - // Update string value in model when typed value is changed - $scope.$watch('typedValue', function typedValueChanged(typedValue) { - $scope.model = ((typedValue || typedValue === 0) ? typedValue.toString() : ''); - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/passwordFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/passwordFieldController.js deleted file mode 100644 index 0725eb4fc1..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/passwordFieldController.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for password fields. - */ -angular.module('form').controller('passwordFieldController', ['$scope', - function passwordFieldController($scope) { - - /** - * The type to use for the input field. By default, the input field will - * have the type 'password', and thus will be masked. - * - * @type String - * @default 'password' - */ - $scope.passwordInputType = 'password'; - - /** - * Returns a string which describes the action the next call to - * togglePassword() will have. - * - * @return {String} - * A string which describes the action the next call to - * togglePassword() will have. - */ - $scope.getTogglePasswordHelpText = function getTogglePasswordHelpText() { - - // If password is hidden, togglePassword() will show the password - if ($scope.passwordInputType === 'password') - return 'FORM.HELP_SHOW_PASSWORD'; - - // If password is shown, togglePassword() will hide the password - return 'FORM.HELP_HIDE_PASSWORD'; - - }; - - /** - * Toggles visibility of the field contents, if this field is a - * password field. Initially, password contents are masked - * (invisible). - */ - $scope.togglePassword = function togglePassword() { - - // If password is hidden, show the password - if ($scope.passwordInputType === 'password') - $scope.passwordInputType = 'text'; - - // If password is shown, hide the password - else - $scope.passwordInputType = 'password'; - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/redirectFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/redirectFieldController.js deleted file mode 100644 index 3ec9326c79..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/redirectFieldController.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Controller for the redirect field, which redirects the user to the provided - * URL. - */ -angular.module('form').controller('redirectFieldController', ['$scope','$window', - function redirectFieldController($scope,$window) { - - /** - * Redirect the user to the provided URL. - */ - $window.location.href = $scope.field.redirectUrl; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/selectFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/selectFieldController.js deleted file mode 100644 index e780378451..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/selectFieldController.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for select fields. - */ -angular.module('form').controller('selectFieldController', ['$scope', '$injector', - function selectFieldController($scope, $injector) { - - // Interpret undefined/null as empty string - $scope.$watch('model', function setModel(model) { - if (!model && model !== '') - $scope.model = ''; - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/terminalColorSchemeFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/terminalColorSchemeFieldController.js deleted file mode 100644 index fb85a501d6..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/terminalColorSchemeFieldController.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for terminal color scheme fields. - */ -angular.module('form').controller('terminalColorSchemeFieldController', ['$scope', '$injector', - function terminalColorSchemeFieldController($scope, $injector) { - - // Required types - var ColorScheme = $injector.get('ColorScheme'); - - /** - * The currently selected color scheme. If a pre-defined color scheme is - * selected, this will be the connection parameter value associated with - * that color scheme. If a custom color scheme is selected, this will be - * the string "custom". - * - * @type String - */ - $scope.selectedColorScheme = ''; - - /** - * The current custom color scheme, if a custom color scheme has been - * specified. If no custom color scheme has yet been specified, this will - * be a ColorScheme instance that has been initialized to the default - * colors. - * - * @type ColorScheme - */ - $scope.customColorScheme = new ColorScheme(); - - /** - * The array of colors to include within the color picker as pre-defined - * options for convenience. - * - * @type String[] - */ - $scope.defaultPalette = new ColorScheme().colors; - - /** - * Whether the raw details of the custom color scheme should be shown. By - * default, such details are hidden. - * - * @type Boolean - */ - $scope.detailsShown = false; - - /** - * The palette indices of all colors which are considered low-intensity. - * - * @type Number[] - */ - $scope.lowIntensity = [ 0, 1, 2, 3, 4, 5, 6, 7 ]; - - /** - * The palette indices of all colors which are considered high-intensity. - * - * @type Number[] - */ - $scope.highIntensity = [ 8, 9, 10, 11, 12, 13, 14, 15 ]; - - /** - * The string value which is assigned to selectedColorScheme if a custom - * color scheme is selected. - * - * @constant - * @type String - */ - var CUSTOM_COLOR_SCHEME = 'custom'; - - /** - * Returns whether a custom color scheme has been selected. - * - * @returns {Boolean} - * true if a custom color scheme has been selected, false otherwise. - */ - $scope.isCustom = function isCustom() { - return $scope.selectedColorScheme === CUSTOM_COLOR_SCHEME; - }; - - /** - * Shows the raw details of the custom color scheme. If the details are - * already shown, this function has no effect. - */ - $scope.showDetails = function showDetails() { - $scope.detailsShown = true; - }; - - /** - * Hides the raw details of the custom color scheme. If the details are - * already hidden, this function has no effect. - */ - $scope.hideDetails = function hideDetails() { - $scope.detailsShown = false; - }; - - // Keep selected color scheme and custom color scheme in sync with changes - // to model - $scope.$watch('model', function modelChanged(model) { - if ($scope.selectedColorScheme === CUSTOM_COLOR_SCHEME || (model && !_.includes($scope.field.options, model))) { - $scope.customColorScheme = ColorScheme.fromString(model); - $scope.selectedColorScheme = CUSTOM_COLOR_SCHEME; - } - else - $scope.selectedColorScheme = model || ''; - }); - - // Keep model in sync with changes to selected color scheme - $scope.$watch('selectedColorScheme', function selectedColorSchemeChanged(selectedColorScheme) { - if (!selectedColorScheme) - $scope.model = ''; - else if (selectedColorScheme === CUSTOM_COLOR_SCHEME) - $scope.model = ColorScheme.toString($scope.customColorScheme); - else - $scope.model = selectedColorScheme; - }); - - // Keep model in sync with changes to custom color scheme - $scope.$watch('customColorScheme', function customColorSchemeChanged(customColorScheme) { - if ($scope.selectedColorScheme === CUSTOM_COLOR_SCHEME) - $scope.model = ColorScheme.toString(customColorScheme); - }, true); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/textFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/textFieldController.js deleted file mode 100644 index 8dd134ab5b..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/textFieldController.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for text fields. - */ -angular.module('form').controller('textFieldController', ['$scope', '$injector', - function textFieldController($scope, $injector) { - - /** - * The ID of the datalist element that should be associated with the text - * field, providing a set of known-good values. If no such values are - * defined, this will be null. - * - * @type String - */ - $scope.dataListId = null; - - // Generate unique ID for datalist, if applicable - if ($scope.field.options && $scope.field.options.length) - $scope.dataListId = $scope.fieldId + '-datalist'; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/timeFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/timeFieldController.js deleted file mode 100644 index 174ec601d2..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/timeFieldController.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for time fields. - */ -angular.module('form').controller('timeFieldController', ['$scope', '$injector', - function timeFieldController($scope, $injector) { - - // Required services - var $filter = $injector.get('$filter'); - - /** - * Options which dictate the behavior of the input field model, as defined - * by https://docs.angularjs.org/api/ng/directive/ngModelOptions - * - * @type Object. - */ - $scope.modelOptions = { - - /** - * Space-delimited list of events on which the model will be updated. - * - * @type String - */ - updateOn : 'blur', - - /** - * The time zone to use when reading/writing the Date object of the - * model. - * - * @type String - */ - timezone : 'UTC' - - }; - - /** - * Parses the time components of the given string into a Date with only the - * time components set. The resulting Date will be in the UTC timezone, - * with the date left as 1970-01-01. The input string must be in the format - * HH:MM:SS (zero-padded, 24-hour). - * - * @param {String} str - * The time string to parse. - * - * @returns {Date} - * A Date object, in the UTC timezone, with only the time components - * set. - */ - var parseTime = function parseTime(str) { - - // Parse time, return blank if invalid - var parsedDate = new Date('1970-01-01T' + str + 'Z'); - if (isNaN(parsedDate.getTime())) - return null; - - return parsedDate; - - }; - - // Update typed value when model is changed - $scope.$watch('model', function modelChanged(model) { - $scope.typedValue = (model ? parseTime(model) : null); - }); - - // Update string value in model when typed value is changed - $scope.$watch('typedValue', function typedValueChanged(typedValue) { - $scope.model = (typedValue ? $filter('date')(typedValue, 'HH:mm:ss', 'UTC') : ''); - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/controllers/timeZoneFieldController.js b/guacamole/src/main/frontend/src/app/form/controllers/timeZoneFieldController.js deleted file mode 100644 index 39f0c38ec6..0000000000 --- a/guacamole/src/main/frontend/src/app/form/controllers/timeZoneFieldController.js +++ /dev/null @@ -1,708 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * Controller for time zone fields. Time zone fields use IANA time zone - * database identifiers as the standard representation for each supported time - * zone. These identifiers are also legal Java time zone IDs. - */ -angular.module('form').controller('timeZoneFieldController', ['$scope', '$injector', - function timeZoneFieldController($scope, $injector) { - - /** - * Map of time zone regions to the map of all time zone name/ID pairs - * within those regions. - * - * @type Object.> - */ - $scope.timeZones = { - - "Africa" : { - "Abidjan" : "Africa/Abidjan", - "Accra" : "Africa/Accra", - "Addis Ababa" : "Africa/Addis_Ababa", - "Algiers" : "Africa/Algiers", - "Asmara" : "Africa/Asmara", - "Asmera" : "Africa/Asmera", - "Bamako" : "Africa/Bamako", - "Bangui" : "Africa/Bangui", - "Banjul" : "Africa/Banjul", - "Bissau" : "Africa/Bissau", - "Blantyre" : "Africa/Blantyre", - "Brazzaville" : "Africa/Brazzaville", - "Bujumbura" : "Africa/Bujumbura", - "Cairo" : "Africa/Cairo", - "Casablanca" : "Africa/Casablanca", - "Ceuta" : "Africa/Ceuta", - "Conakry" : "Africa/Conakry", - "Dakar" : "Africa/Dakar", - "Dar es Salaam" : "Africa/Dar_es_Salaam", - "Djibouti" : "Africa/Djibouti", - "Douala" : "Africa/Douala", - "El Aaiun" : "Africa/El_Aaiun", - "Freetown" : "Africa/Freetown", - "Gaborone" : "Africa/Gaborone", - "Harare" : "Africa/Harare", - "Johannesburg" : "Africa/Johannesburg", - "Juba" : "Africa/Juba", - "Kampala" : "Africa/Kampala", - "Khartoum" : "Africa/Khartoum", - "Kigali" : "Africa/Kigali", - "Kinshasa" : "Africa/Kinshasa", - "Lagos" : "Africa/Lagos", - "Libreville" : "Africa/Libreville", - "Lome" : "Africa/Lome", - "Luanda" : "Africa/Luanda", - "Lubumbashi" : "Africa/Lubumbashi", - "Lusaka" : "Africa/Lusaka", - "Malabo" : "Africa/Malabo", - "Maputo" : "Africa/Maputo", - "Maseru" : "Africa/Maseru", - "Mbabane" : "Africa/Mbabane", - "Mogadishu" : "Africa/Mogadishu", - "Monrovia" : "Africa/Monrovia", - "Nairobi" : "Africa/Nairobi", - "Ndjamena" : "Africa/Ndjamena", - "Niamey" : "Africa/Niamey", - "Nouakchott" : "Africa/Nouakchott", - "Ouagadougou" : "Africa/Ouagadougou", - "Porto-Novo" : "Africa/Porto-Novo", - "Sao Tome" : "Africa/Sao_Tome", - "Timbuktu" : "Africa/Timbuktu", - "Tripoli" : "Africa/Tripoli", - "Tunis" : "Africa/Tunis", - "Windhoek" : "Africa/Windhoek" - }, - - "America" : { - "Adak" : "America/Adak", - "Anchorage" : "America/Anchorage", - "Anguilla" : "America/Anguilla", - "Antigua" : "America/Antigua", - "Araguaina" : "America/Araguaina", - "Argentina / Buenos Aires" : "America/Argentina/Buenos_Aires", - "Argentina / Catamarca" : "America/Argentina/Catamarca", - "Argentina / Comodoro Rivadavia" : "America/Argentina/ComodRivadavia", - "Argentina / Cordoba" : "America/Argentina/Cordoba", - "Argentina / Jujuy" : "America/Argentina/Jujuy", - "Argentina / La Rioja" : "America/Argentina/La_Rioja", - "Argentina / Mendoza" : "America/Argentina/Mendoza", - "Argentina / Rio Gallegos" : "America/Argentina/Rio_Gallegos", - "Argentina / Salta" : "America/Argentina/Salta", - "Argentina / San Juan" : "America/Argentina/San_Juan", - "Argentina / San Luis" : "America/Argentina/San_Luis", - "Argentina / Tucuman" : "America/Argentina/Tucuman", - "Argentina / Ushuaia" : "America/Argentina/Ushuaia", - "Aruba" : "America/Aruba", - "Asuncion" : "America/Asuncion", - "Atikokan" : "America/Atikokan", - "Atka" : "America/Atka", - "Bahia" : "America/Bahia", - "Bahia Banderas" : "America/Bahia_Banderas", - "Barbados" : "America/Barbados", - "Belem" : "America/Belem", - "Belize" : "America/Belize", - "Blanc-Sablon" : "America/Blanc-Sablon", - "Boa Vista" : "America/Boa_Vista", - "Bogota" : "America/Bogota", - "Boise" : "America/Boise", - "Buenos Aires" : "America/Buenos_Aires", - "Cambridge Bay" : "America/Cambridge_Bay", - "Campo Grande" : "America/Campo_Grande", - "Cancun" : "America/Cancun", - "Caracas" : "America/Caracas", - "Catamarca" : "America/Catamarca", - "Cayenne" : "America/Cayenne", - "Cayman" : "America/Cayman", - "Chicago" : "America/Chicago", - "Chihuahua" : "America/Chihuahua", - "Coral Harbour" : "America/Coral_Harbour", - "Cordoba" : "America/Cordoba", - "Costa Rica" : "America/Costa_Rica", - "Creston" : "America/Creston", - "Cuiaba" : "America/Cuiaba", - "Curacao" : "America/Curacao", - "Danmarkshavn" : "America/Danmarkshavn", - "Dawson" : "America/Dawson", - "Dawson Creek" : "America/Dawson_Creek", - "Denver" : "America/Denver", - "Detroit" : "America/Detroit", - "Dominica" : "America/Dominica", - "Edmonton" : "America/Edmonton", - "Eirunepe" : "America/Eirunepe", - "El Salvador" : "America/El_Salvador", - "Ensenada" : "America/Ensenada", - "Fort Wayne" : "America/Fort_Wayne", - "Fortaleza" : "America/Fortaleza", - "Glace Bay" : "America/Glace_Bay", - "Godthab" : "America/Godthab", - "Goose Bay" : "America/Goose_Bay", - "Grand Turk" : "America/Grand_Turk", - "Grenada" : "America/Grenada", - "Guadeloupe" : "America/Guadeloupe", - "Guatemala" : "America/Guatemala", - "Guayaquil" : "America/Guayaquil", - "Guyana" : "America/Guyana", - "Halifax" : "America/Halifax", - "Havana" : "America/Havana", - "Hermosillo" : "America/Hermosillo", - "Indiana / Indianapolis" : "America/Indiana/Indianapolis", - "Indiana / Knox" : "America/Indiana/Knox", - "Indiana / Marengo" : "America/Indiana/Marengo", - "Indiana / Petersburg" : "America/Indiana/Petersburg", - "Indiana / Tell City" : "America/Indiana/Tell_City", - "Indiana / Vevay" : "America/Indiana/Vevay", - "Indiana / Vincennes" : "America/Indiana/Vincennes", - "Indiana / Winamac" : "America/Indiana/Winamac", - "Indianapolis" : "America/Indianapolis", - "Inuvik" : "America/Inuvik", - "Iqaluit" : "America/Iqaluit", - "Jamaica" : "America/Jamaica", - "Jujuy" : "America/Jujuy", - "Juneau" : "America/Juneau", - "Kentucky / Louisville" : "America/Kentucky/Louisville", - "Kentucky / Monticello" : "America/Kentucky/Monticello", - "Kralendijk" : "America/Kralendijk", - "La Paz" : "America/La_Paz", - "Lima" : "America/Lima", - "Los Angeles" : "America/Los_Angeles", - "Louisville" : "America/Louisville", - "Lower Princes" : "America/Lower_Princes", - "Maceio" : "America/Maceio", - "Managua" : "America/Managua", - "Manaus" : "America/Manaus", - "Marigot" : "America/Marigot", - "Martinique" : "America/Martinique", - "Matamoros" : "America/Matamoros", - "Mazatlan" : "America/Mazatlan", - "Mendoza" : "America/Mendoza", - "Menominee" : "America/Menominee", - "Merida" : "America/Merida", - "Metlakatla" : "America/Metlakatla", - "Mexico City" : "America/Mexico_City", - "Miquelon" : "America/Miquelon", - "Moncton" : "America/Moncton", - "Monterrey" : "America/Monterrey", - "Montevideo" : "America/Montevideo", - "Montreal" : "America/Montreal", - "Montserrat" : "America/Montserrat", - "Nassau" : "America/Nassau", - "New York" : "America/New_York", - "Nipigon" : "America/Nipigon", - "Nome" : "America/Nome", - "Noronha" : "America/Noronha", - "North Dakota / Beulah" : "America/North_Dakota/Beulah", - "North Dakota / Center" : "America/North_Dakota/Center", - "North Dakota / New Salem" : "America/North_Dakota/New_Salem", - "Ojinaga" : "America/Ojinaga", - "Panama" : "America/Panama", - "Pangnirtung" : "America/Pangnirtung", - "Paramaribo" : "America/Paramaribo", - "Phoenix" : "America/Phoenix", - "Port-au-Prince" : "America/Port-au-Prince", - "Port of Spain" : "America/Port_of_Spain", - "Porto Acre" : "America/Porto_Acre", - "Porto Velho" : "America/Porto_Velho", - "Puerto Rico" : "America/Puerto_Rico", - "Rainy River" : "America/Rainy_River", - "Rankin Inlet" : "America/Rankin_Inlet", - "Recife" : "America/Recife", - "Regina" : "America/Regina", - "Resolute" : "America/Resolute", - "Rio Branco" : "America/Rio_Branco", - "Rosario" : "America/Rosario", - "Santa Isabel" : "America/Santa_Isabel", - "Santarem" : "America/Santarem", - "Santiago" : "America/Santiago", - "Santo Domingo" : "America/Santo_Domingo", - "Sao Paulo" : "America/Sao_Paulo", - "Scoresbysund" : "America/Scoresbysund", - "Shiprock" : "America/Shiprock", - "Sitka" : "America/Sitka", - "St. Barthelemy" : "America/St_Barthelemy", - "St. Johns" : "America/St_Johns", - "St. Kitts" : "America/St_Kitts", - "St. Lucia" : "America/St_Lucia", - "St. Thomas" : "America/St_Thomas", - "St. Vincent" : "America/St_Vincent", - "Swift Current" : "America/Swift_Current", - "Tegucigalpa" : "America/Tegucigalpa", - "Thule" : "America/Thule", - "Thunder Bay" : "America/Thunder_Bay", - "Tijuana" : "America/Tijuana", - "Toronto" : "America/Toronto", - "Tortola" : "America/Tortola", - "Vancouver" : "America/Vancouver", - "Virgin" : "America/Virgin", - "Whitehorse" : "America/Whitehorse", - "Winnipeg" : "America/Winnipeg", - "Yakutat" : "America/Yakutat", - "Yellowknife" : "America/Yellowknife" - }, - - "Antarctica" : { - "Casey" : "Antarctica/Casey", - "Davis" : "Antarctica/Davis", - "Dumont d'Urville" : "Antarctica/DumontDUrville", - "Macquarie" : "Antarctica/Macquarie", - "Mawson" : "Antarctica/Mawson", - "McMurdo" : "Antarctica/McMurdo", - "Palmer" : "Antarctica/Palmer", - "Rothera" : "Antarctica/Rothera", - "South Pole" : "Antarctica/South_Pole", - "Syowa" : "Antarctica/Syowa", - "Troll" : "Antarctica/Troll", - "Vostok" : "Antarctica/Vostok" - }, - - "Arctic" : { - "Longyearbyen" : "Arctic/Longyearbyen" - }, - - "Asia" : { - "Aden" : "Asia/Aden", - "Almaty" : "Asia/Almaty", - "Amman" : "Asia/Amman", - "Anadyr" : "Asia/Anadyr", - "Aqtau" : "Asia/Aqtau", - "Aqtobe" : "Asia/Aqtobe", - "Ashgabat" : "Asia/Ashgabat", - "Ashkhabad" : "Asia/Ashkhabad", - "Baghdad" : "Asia/Baghdad", - "Bahrain" : "Asia/Bahrain", - "Baku" : "Asia/Baku", - "Bangkok" : "Asia/Bangkok", - "Beirut" : "Asia/Beirut", - "Bishkek" : "Asia/Bishkek", - "Brunei" : "Asia/Brunei", - "Calcutta" : "Asia/Calcutta", - "Chita" : "Asia/Chita", - "Choibalsan" : "Asia/Choibalsan", - "Chongqing" : "Asia/Chongqing", - "Colombo" : "Asia/Colombo", - "Dacca" : "Asia/Dacca", - "Damascus" : "Asia/Damascus", - "Dhaka" : "Asia/Dhaka", - "Dili" : "Asia/Dili", - "Dubai" : "Asia/Dubai", - "Dushanbe" : "Asia/Dushanbe", - "Gaza" : "Asia/Gaza", - "Harbin" : "Asia/Harbin", - "Hebron" : "Asia/Hebron", - "Ho Chi Minh" : "Asia/Ho_Chi_Minh", - "Hong Kong" : "Asia/Hong_Kong", - "Hovd" : "Asia/Hovd", - "Irkutsk" : "Asia/Irkutsk", - "Istanbul" : "Asia/Istanbul", - "Jakarta" : "Asia/Jakarta", - "Jayapura" : "Asia/Jayapura", - "Jerusalem" : "Asia/Jerusalem", - "Kabul" : "Asia/Kabul", - "Kamchatka" : "Asia/Kamchatka", - "Karachi" : "Asia/Karachi", - "Kashgar" : "Asia/Kashgar", - "Kathmandu" : "Asia/Kathmandu", - "Katmandu" : "Asia/Katmandu", - "Khandyga" : "Asia/Khandyga", - "Kolkata" : "Asia/Kolkata", - "Krasnoyarsk" : "Asia/Krasnoyarsk", - "Kuala Lumpur" : "Asia/Kuala_Lumpur", - "Kuching" : "Asia/Kuching", - "Kuwait" : "Asia/Kuwait", - "Macao" : "Asia/Macao", - "Macau" : "Asia/Macau", - "Magadan" : "Asia/Magadan", - "Makassar" : "Asia/Makassar", - "Manila" : "Asia/Manila", - "Muscat" : "Asia/Muscat", - "Nicosia" : "Asia/Nicosia", - "Novokuznetsk" : "Asia/Novokuznetsk", - "Novosibirsk" : "Asia/Novosibirsk", - "Omsk" : "Asia/Omsk", - "Oral" : "Asia/Oral", - "Phnom Penh" : "Asia/Phnom_Penh", - "Pontianak" : "Asia/Pontianak", - "Pyongyang" : "Asia/Pyongyang", - "Qatar" : "Asia/Qatar", - "Qyzylorda" : "Asia/Qyzylorda", - "Rangoon" : "Asia/Rangoon", - "Riyadh" : "Asia/Riyadh", - "Saigon" : "Asia/Saigon", - "Sakhalin" : "Asia/Sakhalin", - "Samarkand" : "Asia/Samarkand", - "Seoul" : "Asia/Seoul", - "Shanghai" : "Asia/Shanghai", - "Singapore" : "Asia/Singapore", - "Srednekolymsk" : "Asia/Srednekolymsk", - "Taipei" : "Asia/Taipei", - "Tashkent" : "Asia/Tashkent", - "Tbilisi" : "Asia/Tbilisi", - "Tehran" : "Asia/Tehran", - "Tel Aviv" : "Asia/Tel_Aviv", - "Thimbu" : "Asia/Thimbu", - "Thimphu" : "Asia/Thimphu", - "Tokyo" : "Asia/Tokyo", - "Ujung Pandang" : "Asia/Ujung_Pandang", - "Ulaanbaatar" : "Asia/Ulaanbaatar", - "Ulan Bator" : "Asia/Ulan_Bator", - "Urumqi" : "Asia/Urumqi", - "Ust-Nera" : "Asia/Ust-Nera", - "Vientiane" : "Asia/Vientiane", - "Vladivostok" : "Asia/Vladivostok", - "Yakutsk" : "Asia/Yakutsk", - "Yekaterinburg" : "Asia/Yekaterinburg", - "Yerevan" : "Asia/Yerevan" - }, - - "Atlantic" : { - "Azores" : "Atlantic/Azores", - "Bermuda" : "Atlantic/Bermuda", - "Canary" : "Atlantic/Canary", - "Cape Verde" : "Atlantic/Cape_Verde", - "Faeroe" : "Atlantic/Faeroe", - "Faroe" : "Atlantic/Faroe", - "Jan Mayen" : "Atlantic/Jan_Mayen", - "Madeira" : "Atlantic/Madeira", - "Reykjavik" : "Atlantic/Reykjavik", - "South Georgia" : "Atlantic/South_Georgia", - "St. Helena" : "Atlantic/St_Helena", - "Stanley" : "Atlantic/Stanley" - }, - - "Australia" : { - "Adelaide" : "Australia/Adelaide", - "Brisbane" : "Australia/Brisbane", - "Broken Hill" : "Australia/Broken_Hill", - "Canberra" : "Australia/Canberra", - "Currie" : "Australia/Currie", - "Darwin" : "Australia/Darwin", - "Eucla" : "Australia/Eucla", - "Hobart" : "Australia/Hobart", - "Lindeman" : "Australia/Lindeman", - "Lord Howe" : "Australia/Lord_Howe", - "Melbourne" : "Australia/Melbourne", - "North" : "Australia/North", - "Perth" : "Australia/Perth", - "Queensland" : "Australia/Queensland", - "South" : "Australia/South", - "Sydney" : "Australia/Sydney", - "Tasmania" : "Australia/Tasmania", - "Victoria" : "Australia/Victoria", - "West" : "Australia/West", - "Yancowinna" : "Australia/Yancowinna" - }, - - "Brazil" : { - "Acre" : "Brazil/Acre", - "Fernando de Noronha" : "Brazil/DeNoronha", - "East" : "Brazil/East", - "West" : "Brazil/West" - }, - - "Canada" : { - "Atlantic" : "Canada/Atlantic", - "Central" : "Canada/Central", - "Eastern" : "Canada/Eastern", - "Mountain" : "Canada/Mountain", - "Newfoundland" : "Canada/Newfoundland", - "Pacific" : "Canada/Pacific", - "Saskatchewan" : "Canada/Saskatchewan", - "Yukon" : "Canada/Yukon" - }, - - "Chile" : { - "Continental" : "Chile/Continental", - "Easter Island" : "Chile/EasterIsland" - }, - - "Europe" : { - "Amsterdam" : "Europe/Amsterdam", - "Andorra" : "Europe/Andorra", - "Athens" : "Europe/Athens", - "Belfast" : "Europe/Belfast", - "Belgrade" : "Europe/Belgrade", - "Berlin" : "Europe/Berlin", - "Bratislava" : "Europe/Bratislava", - "Brussels" : "Europe/Brussels", - "Bucharest" : "Europe/Bucharest", - "Budapest" : "Europe/Budapest", - "Busingen" : "Europe/Busingen", - "Chisinau" : "Europe/Chisinau", - "Copenhagen" : "Europe/Copenhagen", - "Dublin" : "Europe/Dublin", - "Gibraltar" : "Europe/Gibraltar", - "Guernsey" : "Europe/Guernsey", - "Helsinki" : "Europe/Helsinki", - "Isle of Man" : "Europe/Isle_of_Man", - "Istanbul" : "Europe/Istanbul", - "Jersey" : "Europe/Jersey", - "Kaliningrad" : "Europe/Kaliningrad", - "Kiev" : "Europe/Kiev", - "Lisbon" : "Europe/Lisbon", - "Ljubljana" : "Europe/Ljubljana", - "London" : "Europe/London", - "Luxembourg" : "Europe/Luxembourg", - "Madrid" : "Europe/Madrid", - "Malta" : "Europe/Malta", - "Mariehamn" : "Europe/Mariehamn", - "Minsk" : "Europe/Minsk", - "Monaco" : "Europe/Monaco", - "Moscow" : "Europe/Moscow", - "Nicosia" : "Europe/Nicosia", - "Oslo" : "Europe/Oslo", - "Paris" : "Europe/Paris", - "Podgorica" : "Europe/Podgorica", - "Prague" : "Europe/Prague", - "Riga" : "Europe/Riga", - "Rome" : "Europe/Rome", - "Samara" : "Europe/Samara", - "San Marino" : "Europe/San_Marino", - "Sarajevo" : "Europe/Sarajevo", - "Simferopol" : "Europe/Simferopol", - "Skopje" : "Europe/Skopje", - "Sofia" : "Europe/Sofia", - "Stockholm" : "Europe/Stockholm", - "Tallinn" : "Europe/Tallinn", - "Tirane" : "Europe/Tirane", - "Tiraspol" : "Europe/Tiraspol", - "Uzhgorod" : "Europe/Uzhgorod", - "Vaduz" : "Europe/Vaduz", - "Vatican" : "Europe/Vatican", - "Vienna" : "Europe/Vienna", - "Vilnius" : "Europe/Vilnius", - "Volgograd" : "Europe/Volgograd", - "Warsaw" : "Europe/Warsaw", - "Zagreb" : "Europe/Zagreb", - "Zaporozhye" : "Europe/Zaporozhye", - "Zurich" : "Europe/Zurich" - }, - - "GMT" : { - "GMT-14" : "Etc/GMT-14", - "GMT-13" : "Etc/GMT-13", - "GMT-12" : "Etc/GMT-12", - "GMT-11" : "Etc/GMT-11", - "GMT-10" : "Etc/GMT-10", - "GMT-9" : "Etc/GMT-9", - "GMT-8" : "Etc/GMT-8", - "GMT-7" : "Etc/GMT-7", - "GMT-6" : "Etc/GMT-6", - "GMT-5" : "Etc/GMT-5", - "GMT-4" : "Etc/GMT-4", - "GMT-3" : "Etc/GMT-3", - "GMT-2" : "Etc/GMT-2", - "GMT-1" : "Etc/GMT-1", - "GMT+0" : "Etc/GMT+0", - "GMT+1" : "Etc/GMT+1", - "GMT+2" : "Etc/GMT+2", - "GMT+3" : "Etc/GMT+3", - "GMT+4" : "Etc/GMT+4", - "GMT+5" : "Etc/GMT+5", - "GMT+6" : "Etc/GMT+6", - "GMT+7" : "Etc/GMT+7", - "GMT+8" : "Etc/GMT+8", - "GMT+9" : "Etc/GMT+9", - "GMT+10" : "Etc/GMT+10", - "GMT+11" : "Etc/GMT+11", - "GMT+12" : "Etc/GMT+12" - }, - - "Indian" : { - "Antananarivo" : "Indian/Antananarivo", - "Chagos" : "Indian/Chagos", - "Christmas" : "Indian/Christmas", - "Cocos" : "Indian/Cocos", - "Comoro" : "Indian/Comoro", - "Kerguelen" : "Indian/Kerguelen", - "Mahe" : "Indian/Mahe", - "Maldives" : "Indian/Maldives", - "Mauritius" : "Indian/Mauritius", - "Mayotte" : "Indian/Mayotte", - "Reunion" : "Indian/Reunion" - }, - - "Mexico" : { - "Baja Norte" : "Mexico/BajaNorte", - "Baja Sur" : "Mexico/BajaSur", - "General" : "Mexico/General" - }, - - "Pacific" : { - "Apia" : "Pacific/Apia", - "Auckland" : "Pacific/Auckland", - "Bougainville" : "Pacific/Bougainville", - "Chatham" : "Pacific/Chatham", - "Chuuk" : "Pacific/Chuuk", - "Easter" : "Pacific/Easter", - "Efate" : "Pacific/Efate", - "Enderbury" : "Pacific/Enderbury", - "Fakaofo" : "Pacific/Fakaofo", - "Fiji" : "Pacific/Fiji", - "Funafuti" : "Pacific/Funafuti", - "Galapagos" : "Pacific/Galapagos", - "Gambier" : "Pacific/Gambier", - "Guadalcanal" : "Pacific/Guadalcanal", - "Guam" : "Pacific/Guam", - "Honolulu" : "Pacific/Honolulu", - "Johnston" : "Pacific/Johnston", - "Kiritimati" : "Pacific/Kiritimati", - "Kosrae" : "Pacific/Kosrae", - "Kwajalein" : "Pacific/Kwajalein", - "Majuro" : "Pacific/Majuro", - "Marquesas" : "Pacific/Marquesas", - "Midway" : "Pacific/Midway", - "Nauru" : "Pacific/Nauru", - "Niue" : "Pacific/Niue", - "Norfolk" : "Pacific/Norfolk", - "Noumea" : "Pacific/Noumea", - "Pago Pago" : "Pacific/Pago_Pago", - "Palau" : "Pacific/Palau", - "Pitcairn" : "Pacific/Pitcairn", - "Pohnpei" : "Pacific/Pohnpei", - "Ponape" : "Pacific/Ponape", - "Port Moresby" : "Pacific/Port_Moresby", - "Rarotonga" : "Pacific/Rarotonga", - "Saipan" : "Pacific/Saipan", - "Samoa" : "Pacific/Samoa", - "Tahiti" : "Pacific/Tahiti", - "Tarawa" : "Pacific/Tarawa", - "Tongatapu" : "Pacific/Tongatapu", - "Truk" : "Pacific/Truk", - "Wake" : "Pacific/Wake", - "Wallis" : "Pacific/Wallis", - "Yap" : "Pacific/Yap" - } - - }; - - /** - * All selectable regions. - * - * @type String[] - */ - $scope.regions = (function collectRegions() { - - // Start with blank entry - var regions = [ '' ]; - - // Add each available region - for (var region in $scope.timeZones) - regions.push(region); - - return regions; - - })(); - - /** - * Direct mapping of all time zone IDs to the region containing that ID. - * - * @type Object. - */ - var timeZoneRegions = (function mapRegions() { - - var regions = {}; - - // For each available region - for (var region in $scope.timeZones) { - - // Get time zones within that region - var timeZonesInRegion = $scope.timeZones[region]; - - // For each of those time zones - for (var timeZoneName in timeZonesInRegion) { - - // Get corresponding ID - var timeZoneID = timeZonesInRegion[timeZoneName]; - - // Store region in map - regions[timeZoneID] = region; - - } - - } - - return regions; - - })(); - - /** - * Map of regions to the currently selected time zone for that region. - * Initially, all regions will be set to default selections (the first - * time zone, sorted lexicographically). - * - * @type Object. - */ - var selectedTimeZone = (function produceDefaultTimeZones() { - - var defaultTimeZone = {}; - - // For each available region - for (var region in $scope.timeZones) { - - // Get time zones within that region - var timeZonesInRegion = $scope.timeZones[region]; - - // No default initially - var defaultZoneName = null; - var defaultZoneID = null; - - // For each of those time zones - for (var timeZoneName in timeZonesInRegion) { - - // Get corresponding ID - var timeZoneID = timeZonesInRegion[timeZoneName]; - - // Set as default if earlier than existing default - if (!defaultZoneName || timeZoneName < defaultZoneName) { - defaultZoneName = timeZoneName; - defaultZoneID = timeZoneID; - } - - } - - // Store default zone - defaultTimeZone[region] = defaultZoneID; - - } - - return defaultTimeZone; - - })(); - - /** - * The name of the region currently selected. The selected region narrows - * which time zones are selectable. - * - * @type String - */ - $scope.region = ''; - - // Ensure corresponding region is selected - $scope.$watch('model', function setModel(model) { - $scope.region = timeZoneRegions[model] || ''; - selectedTimeZone[$scope.region] = model; - }); - - // Restore time zone selection when region changes - $scope.$watch('region', function restoreSelection(region) { - $scope.model = selectedTimeZone[region] || null; - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/directives/form.js b/guacamole/src/main/frontend/src/app/form/directives/form.js deleted file mode 100644 index 4de051bfd9..0000000000 --- a/guacamole/src/main/frontend/src/app/form/directives/form.js +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* global _ */ - -/** - * A directive that allows editing of a collection of fields. - */ -angular.module('form').directive('guacForm', [function form() { - - return { - // Element only - restrict: 'E', - replace: true, - scope: { - - /** - * The translation namespace of the translation strings that will - * be generated for all fields. This namespace is absolutely - * required. If this namespace is omitted, all generated - * translation strings will be placed within the MISSING_NAMESPACE - * namespace, as a warning. - * - * @type String - */ - namespace : '=', - - /** - * The form content to display. This may be a form, an array of - * forms, or a simple array of fields. - * - * @type Form[]|Form|Field[]|Field - */ - content : '=', - - /** - * The object which will receive all field values. Each field value - * will be assigned to the property of this object having the same - * name. - * - * @type Object. - */ - model : '=', - - /** - * Whether the contents of the form should be restricted to those - * fields/forms which match properties defined within the given - * model object. By default, all fields will be shown. - * - * @type Boolean - */ - modelOnly : '=', - - /** - * Whether the contents of the form should be rendered as disabled. - * By default, form fields are enabled. - * - * @type Boolean - */ - disabled : '=', - - /** - * The name of the field to be focused, if any. - * - * @type String - */ - focused : '=', - - /** - * The client associated with this form, if any. - * - * NOTE: If the provided client has any managed arguments in the - * pending state, any fields with the same name rendered by this - * form will be disabled. The fields will be re-enabled when guacd - * sends an updated argument with a the same name. - * - * @type ManagedClient - */ - client: '=' - - }, - templateUrl: 'app/form/templates/form.html', - controller: ['$scope', '$injector', function formController($scope, $injector) { - - // Required services - var formService = $injector.get('formService'); - var translationStringService = $injector.get('translationStringService'); - - /** - * The array of all forms to display. - * - * @type Form[] - */ - $scope.forms = []; - - /** - * The object which will receive all field values. Normally, this - * will be the object provided within the "model" attribute. If - * no such object has been provided, a blank model will be used - * instead as a placeholder, such that the fields of this form - * will have something to bind to. - * - * @type Object. - */ - $scope.values = {}; - - /** - * Produces the translation string for the section header of the - * given form. The translation string will be of the form: - * - * NAMESPACE.SECTION_HEADER_NAME - * - * where NAMESPACE is the namespace provided to the - * directive and NAME is the form name transformed - * via translationStringService.canonicalize(). - * - * @param {Form} form - * The form for which to produce the translation string. - * - * @returns {String} - * The translation string which produces the translated header - * of the form. - */ - $scope.getSectionHeader = function getSectionHeader(form) { - - // If no form, or no name, then no header - if (!form || !form.name) - return ''; - - return translationStringService.canonicalize($scope.namespace || 'MISSING_NAMESPACE') - + '.SECTION_HEADER_' + translationStringService.canonicalize(form.name); - - }; - - /** - * Returns an object as would be provided to the ngClass directive - * that defines the CSS classes that should be applied to the given - * form. - * - * @param {Form} form - * The form to generate the CSS classes for. - * - * @return {!Object.} - * The ngClass object defining the CSS classes for the given - * form. - */ - $scope.getFormClasses = function getFormClasses(form) { - return formService.getClasses('form-', form); - }; - - /** - * Determines whether the given object is a form, under the - * assumption that the object is either a form or a field. - * - * @param {Form|Field} obj - * The object to test. - * - * @returns {Boolean} - * true if the given object appears to be a form, false - * otherwise. - */ - var isForm = function isForm(obj) { - return !!('name' in obj && 'fields' in obj); - }; - - // Produce set of forms from any given content - $scope.$watch('content', function setContent(content) { - - // If no content provided, there are no forms - if (!content) { - $scope.forms = []; - return; - } - - // Ensure content is an array - if (!angular.isArray(content)) - content = [content]; - - // If content is an array of fields, convert to an array of forms - if (content.length && !isForm(content[0])) { - content = [{ - fields : content - }]; - } - - // Content is now an array of forms - $scope.forms = content; - - }); - - // Update string value and re-assign to model when field is changed - $scope.$watch('model', function setModel(model) { - - // Assign new model only if provided - if (model) - $scope.values = model; - - // Otherwise, use blank model - else - $scope.values = {}; - - }); - - /** - * Returns whether the given field should be focused or not. - * - * @param {Field} field - * The field to check. - * - * @returns {Boolean} - * true if the given field should be focused, false otherwise. - */ - $scope.isFocused = function isFocused(field) { - return field && (field.name === $scope.focused); - }; - - /** - * Returns whether the given field should be displayed to the - * current user. - * - * @param {Field} field - * The field to check. - * - * @returns {Boolean} - * true if the given field should be visible, false otherwise. - */ - $scope.isVisible = function isVisible(field) { - - // All fields are visible if contents are not restricted to - // model properties only - if (!$scope.modelOnly) - return true; - - // Otherwise, fields are only visible if they are present - // within the model - return field && (field.name in $scope.values); - - }; - - - /** - * Returns whether the given field should be disabled (read-only) - * when presented to the current user. - * - * @param {Field} field - * The field to check. - * - * @returns {Boolean} - * true if the given field should be disabled, false otherwise. - */ - $scope.isDisabled = function isDisabled(field) { - - /* - * The field is disabled if either the form as a whole is disabled, - * or if a client is provided to the directive, and the field is - * marked as pending. - */ - return $scope.disabled || - _.get($scope.client, ['arguments', field.name, 'pending']); - }; - - /** - * Returns whether at least one of the given fields should be - * displayed to the current user. - * - * @param {Field[]} fields - * The array of fields to check. - * - * @returns {Boolean} - * true if at least one field within the given array should be - * visible, false otherwise. - */ - $scope.containsVisible = function containsVisible(fields) { - - // If fields are defined, check whether at least one is visible - if (fields) { - for (var i = 0; i < fields.length; i++) { - if ($scope.isVisible(fields[i])) - return true; - } - } - - // Otherwise, there are no visible fields - return false; - - }; - - }] // end controller - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/directives/formField.js b/guacamole/src/main/frontend/src/app/form/directives/formField.js deleted file mode 100644 index 73ffb127e9..0000000000 --- a/guacamole/src/main/frontend/src/app/form/directives/formField.js +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * A directive that allows editing of a field. - */ -angular.module('form').directive('guacFormField', [function formField() { - - return { - // Element only - restrict: 'E', - replace: true, - scope: { - - /** - * The translation namespace of the translation strings that will - * be generated for this field. This namespace is absolutely - * required. If this namespace is omitted, all generated - * translation strings will be placed within the MISSING_NAMESPACE - * namespace, as a warning. - * - * @type String - */ - namespace : '=', - - /** - * The field to display. - * - * @type Field - */ - field : '=', - - /** - * The property which contains this fields current value. When this - * field changes, the property will be updated accordingly. - * - * @type String - */ - model : '=', - - /** - * Whether this field should be rendered as disabled. By default, - * form fields are enabled. - * - * @type Boolean - */ - disabled : '=', - - /** - * Whether this field should be focused. - * - * @type Boolean - */ - focused : '=', - - /** - * The client associated with this form field, if any. - * - * @type ManagedClient - */ - client: '=' - - }, - templateUrl: 'app/form/templates/formField.html', - controller: ['$scope', '$injector', '$element', function formFieldController($scope, $injector, $element) { - - // Required services - var $log = $injector.get('$log'); - var formService = $injector.get('formService'); - var translationStringService = $injector.get('translationStringService'); - - /** - * The element which should contain any compiled field content. The - * actual content of a field is dynamically determined by its type. - * - * @type Element[] - */ - var fieldContent = $element.find('.form-field'); - - /** - * An ID value which is reasonably likely to be unique relative to - * other elements on the page. This ID should be used to associate - * the relevant input element with the label provided by the - * guacFormField directive, if there is such an input element. - * - * @type String - */ - $scope.fieldId = 'guac-field-XXXXXXXXXXXXXXXX'.replace(/X/g, function getRandomCharacter() { - return Math.floor(Math.random() * 36).toString(36); - }) + '-' + new Date().getTime().toString(36); - - /** - * Produces the translation string for the header of the current - * field. The translation string will be of the form: - * - * NAMESPACE.FIELD_HEADER_NAME - * - * where NAMESPACE is the namespace provided to the - * directive and NAME is the field name transformed - * via translationStringService.canonicalize(). - * - * @returns {String} - * The translation string which produces the translated header - * of the field. - */ - $scope.getFieldHeader = function getFieldHeader() { - - // If no field, or no name, then no header - if (!$scope.field || !$scope.field.name) - return ''; - - return translationStringService.canonicalize($scope.namespace || 'MISSING_NAMESPACE') - + '.FIELD_HEADER_' + translationStringService.canonicalize($scope.field.name); - - }; - - /** - * Produces the translation string for the given field option - * value. The translation string will be of the form: - * - * NAMESPACE.FIELD_OPTION_NAME_VALUE - * - * where NAMESPACE is the namespace provided to the - * directive, NAME is the field name transformed - * via translationStringService.canonicalize(), and - * VALUE is the option value transformed via - * translationStringService.canonicalize() - * - * @param {String} value - * The name of the option value. - * - * @returns {String} - * The translation string which produces the translated name of the - * value specified. - */ - $scope.getFieldOption = function getFieldOption(value) { - - // If no field, or no value, then no corresponding translation string - if (!$scope.field || !$scope.field.name) - return ''; - - return translationStringService.canonicalize($scope.namespace || 'MISSING_NAMESPACE') - + '.FIELD_OPTION_' + translationStringService.canonicalize($scope.field.name) - + '_' + translationStringService.canonicalize(value || 'EMPTY'); - - }; - - /** - * Returns an object as would be provided to the ngClass directive - * that defines the CSS classes that should be applied to this - * field. - * - * @return {!Object.} - * The ngClass object defining the CSS classes for the current - * field. - */ - $scope.getFieldClasses = function getFieldClasses() { - return formService.getClasses('labeled-field-', $scope.field, { - empty: !$scope.model - }); - }; - - /** - * Returns whether the current field should be displayed. - * - * @returns {Boolean} - * true if the current field should be displayed, false - * otherwise. - */ - $scope.isFieldVisible = function isFieldVisible() { - return fieldContent[0].hasChildNodes(); - }; - - // Update field contents when field definition is changed - $scope.$watch('field', function setField(field) { - - // Reset contents - fieldContent.innerHTML = ''; - - // Append field content - if (field) { - formService.insertFieldElement(fieldContent[0], - field.type, $scope)['catch'](function fieldCreationFailed() { - $log.warn('Failed to retrieve field with type "' + field.type + '"'); - }); - } - - }); - - }] // end controller - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/directives/guacInputColor.js b/guacamole/src/main/frontend/src/app/form/directives/guacInputColor.js deleted file mode 100644 index 1762c3172e..0000000000 --- a/guacamole/src/main/frontend/src/app/form/directives/guacInputColor.js +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which implements a color input field. If the underlying color - * picker implementation cannot be used due to a lack of browser support, this - * directive will become read-only, functioning essentially as a color preview. - * - * @see colorPickerService - */ -angular.module('form').directive('guacInputColor', [function guacInputColor() { - - var config = { - restrict: 'E', - replace: true, - templateUrl: 'app/form/templates/guacInputColor.html', - transclude: true - }; - - config.scope = { - - /** - * The current selected color value, in standard 6-digit hexadecimal - * RGB notation. When the user selects a different color using this - * directive, this value will updated accordingly. - * - * @type String - */ - model: '=', - - /** - * An optional array of colors to include within the color picker as a - * convenient selection of pre-defined colors. The colors within the - * array must be in standard 6-digit hexadecimal RGB notation. - * - * @type String[] - */ - palette: '=' - - }; - - config.controller = ['$scope', '$element', '$injector', - function guacInputColorController($scope, $element, $injector) { - - // Required services - var colorPickerService = $injector.get('colorPickerService'); - - /** - * @borrows colorPickerService.isAvailable() - */ - $scope.isColorPickerAvailable = colorPickerService.isAvailable; - - /** - * Returns whether the color currently selected is "dark" in the sense - * that the color white will have higher contrast against it than the - * color black. - * - * @returns {Boolean} - * true if the currently selected color is relatively dark (white - * text would provide better contrast than black), false otherwise. - */ - $scope.isDark = function isDark() { - - // Assume not dark if color is invalid or undefined - var rgb = $scope.model && /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/.exec($scope.model); - if (!rgb) - return false; - - // Parse color component values as hexadecimal - var red = parseInt(rgb[1], 16); - var green = parseInt(rgb[2], 16); - var blue = parseInt(rgb[3], 16); - - // Convert RGB to luminance in HSL space (as defined by the - // relative luminance formula given by the W3C for accessibility) - var luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue; - - // Consider the background to be dark if white text over that - // background would provide better contrast than black - return luminance <= 153; // 153 is the component value 0.6 converted from 0-1 to the 0-255 range - - }; - - /** - * Prompts the user to choose a color by displaying a color selection - * dialog. If the user chooses a color, this directive's model is - * automatically updated. If the user cancels the dialog, the model is - * left untouched. - */ - $scope.selectColor = function selectColor() { - colorPickerService.selectColor($element[0], $scope.model, $scope.palette) - .then(function colorSelected(color) { - $scope.model = color; - }, angular.noop); - }; - - }]; - - return config; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/directives/guacLenientDate.js b/guacamole/src/main/frontend/src/app/form/directives/guacLenientDate.js deleted file mode 100644 index 6b46bfcae9..0000000000 --- a/guacamole/src/main/frontend/src/app/form/directives/guacLenientDate.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which modifies the parsing and formatting of ngModel when used - * on an HTML5 date input field, relaxing the otherwise strict parsing and - * validation behavior. The behavior of this directive for other input elements - * is undefined. - */ -angular.module('form').directive('guacLenientDate', ['$injector', - function guacLenientDate($injector) { - - // Required services - var $filter = $injector.get('$filter'); - - /** - * Directive configuration object. - * - * @type Object. - */ - var config = { - restrict : 'A', - require : 'ngModel' - }; - - // Linking function - config.link = function linkGuacLenientDate($scope, $element, $attrs, ngModel) { - - // Parse date strings leniently - ngModel.$parsers = [function parse(viewValue) { - - // If blank, return null - if (!viewValue) - return null; - - // Match basic date pattern - var match = /([0-9]*)(?:-([0-9]*)(?:-([0-9]*))?)?/.exec(viewValue); - if (!match) - return null; - - // Determine year, month, and day based on pattern - var year = parseInt(match[1] || '0') || new Date().getFullYear(); - var month = parseInt(match[2] || '0') || 1; - var day = parseInt(match[3] || '0') || 1; - - // Convert to Date object - var parsedDate = new Date(Date.UTC(year, month - 1, day)); - if (isNaN(parsedDate.getTime())) - return null; - - return parsedDate; - - }]; - - // Format date strings as "yyyy-MM-dd" - ngModel.$formatters = [function format(modelValue) { - return modelValue ? $filter('date')(modelValue, 'yyyy-MM-dd', 'UTC') : ''; - }]; - - }; - - return config; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/directives/guacLenientTime.js b/guacamole/src/main/frontend/src/app/form/directives/guacLenientTime.js deleted file mode 100644 index acdb53a671..0000000000 --- a/guacamole/src/main/frontend/src/app/form/directives/guacLenientTime.js +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which modifies the parsing and formatting of ngModel when used - * on an HTML5 time input field, relaxing the otherwise strict parsing and - * validation behavior. The behavior of this directive for other input elements - * is undefined. - */ -angular.module('form').directive('guacLenientTime', ['$injector', - function guacLenientTime($injector) { - - // Required services - var $filter = $injector.get('$filter'); - - /** - * Directive configuration object. - * - * @type Object. - */ - var config = { - restrict : 'A', - require : 'ngModel' - }; - - // Linking function - config.link = function linkGuacLenientTIme($scope, $element, $attrs, ngModel) { - - // Parse time strings leniently - ngModel.$parsers = [function parse(viewValue) { - - // If blank, return null - if (!viewValue) - return null; - - // Match basic time pattern - var match = /([0-9]*)(?::([0-9]*)(?::([0-9]*))?)?(?:\s*(a|p))?/.exec(viewValue.toLowerCase()); - if (!match) - return null; - - // Determine hour, minute, and second based on pattern - var hour = parseInt(match[1] || '0'); - var minute = parseInt(match[2] || '0'); - var second = parseInt(match[3] || '0'); - - // Handle AM/PM - if (match[4]) { - - // Interpret 12 AM as 00:00 and 12 PM as 12:00 - if (hour === 12) - hour = 0; - - // Increment hour to evening if PM - if (match[4] === 'p') - hour += 12; - - } - - // Wrap seconds and minutes into minutes and hours - minute += second / 60; second %= 60; - hour += minute / 60; minute %= 60; - - // Constrain hours to 0 - 23 - hour %= 24; - - // Convert to Date object - var parsedDate = new Date(Date.UTC(1970, 0, 1, hour, minute, second)); - if (isNaN(parsedDate.getTime())) - return null; - - return parsedDate; - - }]; - - // Format time strings as "HH:mm:ss" - ngModel.$formatters = [function format(modelValue) { - return modelValue ? $filter('date')(modelValue, 'HH:mm:ss', 'UTC') : ''; - }]; - - }; - - return config; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/formModule.js b/guacamole/src/main/frontend/src/app/form/formModule.js deleted file mode 100644 index 1135118424..0000000000 --- a/guacamole/src/main/frontend/src/app/form/formModule.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for displaying dynamic forms. - */ -angular.module('form', [ - 'locale', - 'rest' -]); diff --git a/guacamole/src/main/frontend/src/app/form/services/colorPickerService.js b/guacamole/src/main/frontend/src/app/form/services/colorPickerService.js deleted file mode 100644 index d8494a6a6c..0000000000 --- a/guacamole/src/main/frontend/src/app/form/services/colorPickerService.js +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import '@simonwep/pickr/dist/themes/monolith.min.css' - -/** - * A service for prompting the user to choose a color using the "Pickr" color - * picker. As the Pickr color picker might not be available if the JavaScript - * features it requires are not supported by the browser (Internet Explorer), - * the isAvailable() function should be used to test for usability. - */ -angular.module('form').provider('colorPickerService', function colorPickerServiceProvider() { - - /** - * A singleton instance of the "Pickr" color picker, shared by all users of - * this service. Pickr does not initialize synchronously, nor is it - * supported by all browsers. If Pickr is not yet initialized, or is - * unsupported, this will be null. - * - * @type {Pickr} - */ - var pickr = null; - - /** - * Whether Pickr has completed initialization. - * - * @type {Boolean} - */ - var pickrInitComplete = false; - - /** - * The HTML element to provide to Pickr as the root element. - * - * @type {HTMLDivElement} - */ - var pickerContainer = document.createElement('div'); - pickerContainer.className = 'shared-color-picker'; - - /** - * An instance of Deferred which represents an active request for the - * user to choose a color. The promise associated with the Deferred will - * be resolved with the chosen color once a color is chosen, and rejected - * if the request is cancelled or Pickr is not available. If no request is - * active, this will be null. - * - * @type {Deferred} - */ - var activeRequest = null; - - /** - * Resolves the current active request with the given color value. If no - * color value is provided, the active request is rejected. If no request - * is active, this function has no effect. - * - * @param {String} [color] - * The color value to resolve the active request with. - */ - var completeActiveRequest = function completeActiveRequest(color) { - if (activeRequest) { - - // Hide color picker, if shown - pickr.hide(); - - // Resolve/reject active request depending on value provided - if (color) - activeRequest.resolve(color); - else - activeRequest.reject(); - - // No active request - activeRequest = null; - - } - }; - - try { - pickr = Pickr.create({ - - // Bind color picker to the container element - el : pickerContainer, - - // Wrap color picker dialog in Guacamole-specific class for - // sake of additional styling - appClass : 'guac-input-color-picker', - - 'default' : '#000000', - - // Display color details as hex - defaultRepresentation : 'HEX', - - // Use "monolith" theme, as a nice balance between "nano" (does - // not work in Internet Explorer) and "classic" (too big) - theme : 'monolith', - - // Leverage the container element as the button which shows the - // picker, relying on our own styling for that button - useAsButton : true, - appendToBody : true, - - // Do not include opacity controls - lockOpacity : true, - - // Include a selection of palette entries for convenience and - // reference - swatches : [], - - components: { - - // Include hue and color preview controls - preview : true, - hue : true, - - // Display only a text color input field and the save and - // cancel buttons (no clear button) - interaction: { - input : true, - save : true, - cancel : true - } - - } - - }); - - // Hide color picker after user clicks "cancel" - pickr.on('cancel', function colorChangeCanceled() { - completeActiveRequest(); - }); - - // Keep model in sync with changes to the color picker - pickr.on('save', function colorChanged(color) { - completeActiveRequest(color.toHEXA().toString()); - activeRequest = null; - }); - - // Keep color picker in sync with changes to the model - pickr.on('init', function pickrReady() { - pickrInitComplete = true; - }); - } - catch (e) { - // If the "Pickr" color picker cannot be loaded (Internet Explorer), - // the available flag will remain set to false - } - - // Factory method required by provider - this.$get = ['$injector', function colorPickerServiceFactory($injector) { - - // Required services - var $q = $injector.get('$q'); - var $translate = $injector.get('$translate'); - - var service = {}; - - /** - * Promise which is resolved when Pickr initialization has completed - * and rejected if Pickr cannot be used. - * - * @type {Promise} - */ - var pickrPromise = (function getPickr() { - - var deferred = $q.defer(); - - // Resolve promise when Pickr has completed initialization - if (pickrInitComplete) - deferred.resolve(); - else if (pickr) - pickr.on('init', deferred.resolve); - - // Reject promise if Pickr cannot be used at all - else - deferred.reject(); - - return deferred.promise; - - })(); - - /** - * Returns whether the underlying color picker (Pickr) can be used by - * calling selectColor(). If the browser cannot support the color - * picker, false is returned. - * - * @returns {Boolean} - * true if the underlying color picker can be used by calling - * selectColor(), false otherwise. - */ - service.isAvailable = function isAvailable() { - return pickrInitComplete; - }; - - /** - * Prompts the user to choose a color, returning the color chosen via a - * Promise. - * - * @param {Element} element - * The element that the user interacted with to indicate their - * desire to choose a color. - * - * @param {String} current - * The color that should be selected by default, in standard - * 6-digit hexadecimal RGB format, including "#" prefix. - * - * @param {String[]} [palette] - * An array of color choices which should be exposed to the user - * within the color chooser for convenience. Each color must be in - * standard 6-digit hexadecimal RGB format, including "#" prefix. - * - * @returns {Promise.} - * A Promise which is resolved with the color chosen by the user, - * in standard 6-digit hexadecimal RGB format with "#" prefix, and - * rejected if the selection operation was cancelled or the color - * picker cannot be used. - */ - service.selectColor = function selectColor(element, current, palette) { - - // Show picker once the relevant translation strings have been - // retrieved and Pickr is ready for use - return $q.all({ - 'saveString' : $translate('APP.ACTION_SAVE'), - 'cancelString' : $translate('APP.ACTION_CANCEL'), - 'pickr' : pickrPromise - }).then(function dependenciesReady(deps) { - - // Cancel any active request - completeActiveRequest(); - - // Reset state of color picker to provided parameters - pickr.setColor(current); - element.appendChild(pickerContainer); - - // Assign translated strings to button text - var pickrRoot = pickr.getRoot(); - pickrRoot.interaction.save.value = deps.saveString; - pickrRoot.interaction.cancel.value = deps.cancelString; - - // Replace all color swatches with the palette of colors given - while (pickr.removeSwatch(0)) {} - angular.forEach(palette, pickr.addSwatch.bind(pickr)); - - // Show color picker and wait for user to complete selection - activeRequest = $q.defer(); - pickr.show(); - return activeRequest.promise; - - }); - - }; - - return service; - - }]; - -}); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/form/services/formService.js b/guacamole/src/main/frontend/src/app/form/services/formService.js deleted file mode 100644 index d2ac6be735..0000000000 --- a/guacamole/src/main/frontend/src/app/form/services/formService.js +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for maintaining form-related metadata and linking that data to - * corresponding controllers and templates. - */ -angular.module('form').provider('formService', function formServiceProvider() { - - /** - * Reference to the provider itself. - * - * @type formServiceProvider - */ - var provider = this; - - /** - * Map of all registered field type definitions by name. - * - * @type Object. - */ - this.fieldTypes = { - - /** - * Text field type. - * - * @see {@link Field.Type.TEXT} - * @type FieldType - */ - 'TEXT' : { - module : 'form', - controller : 'textFieldController', - templateUrl : 'app/form/templates/textField.html' - }, - - /** - * Email address field type. - * - * @see {@link Field.Type.EMAIL} - * @type FieldType - */ - 'EMAIL' : { - templateUrl : 'app/form/templates/emailField.html' - }, - - /** - * Numeric field type. - * - * @see {@link Field.Type.NUMERIC} - * @type FieldType - */ - 'NUMERIC' : { - module : 'form', - controller : 'numberFieldController', - templateUrl : 'app/form/templates/numberField.html' - }, - - /** - * Boolean field type. - * - * @see {@link Field.Type.BOOLEAN} - * @type FieldType - */ - 'BOOLEAN' : { - module : 'form', - controller : 'checkboxFieldController', - templateUrl : 'app/form/templates/checkboxField.html' - }, - - /** - * Username field type. Identical in principle to a text field, but may - * have different semantics. - * - * @see {@link Field.Type.USERNAME} - * @type FieldType - */ - 'USERNAME' : { - templateUrl : 'app/form/templates/usernameField.html' - }, - - /** - * Password field type. Similar to a text field, but the contents of - * the field are masked. - * - * @see {@link Field.Type.PASSWORD} - * @type FieldType - */ - 'PASSWORD' : { - module : 'form', - controller : 'passwordFieldController', - templateUrl : 'app/form/templates/passwordField.html' - }, - - /** - * Enumerated field type. The user is presented a finite list of values - * to choose from. - * - * @see {@link Field.Type.ENUM} - * @type FieldType - */ - 'ENUM' : { - module : 'form', - controller : 'selectFieldController', - templateUrl : 'app/form/templates/selectField.html' - }, - - /** - * Multiline field type. The user may enter multiple lines of text. - * - * @see {@link Field.Type.MULTILINE} - * @type FieldType - */ - 'MULTILINE' : { - templateUrl : 'app/form/templates/textAreaField.html' - }, - - /** - * Field type which allows selection of languages. The languages - * displayed are the set of languages supported by the Guacamole web - * application. Legal values are valid language IDs, as dictated by - * the filenames of Guacamole's available translations. - * - * @see {@link Field.Type.LANGUAGE} - * @type FieldType - */ - 'LANGUAGE' : { - module : 'form', - controller : 'languageFieldController', - templateUrl : 'app/form/templates/languageField.html' - }, - - /** - * Field type which allows selection of time zones. - * - * @see {@link Field.Type.TIMEZONE} - * @type FieldType - */ - 'TIMEZONE' : { - module : 'form', - controller : 'timeZoneFieldController', - templateUrl : 'app/form/templates/timeZoneField.html' - }, - - /** - * Field type which allows selection of individual dates. - * - * @see {@link Field.Type.DATE} - * @type FieldType - */ - 'DATE' : { - module : 'form', - controller : 'dateFieldController', - templateUrl : 'app/form/templates/dateField.html' - }, - - /** - * Field type which allows selection of times of day. - * - * @see {@link Field.Type.TIME} - * @type FieldType - */ - 'TIME' : { - module : 'form', - controller : 'timeFieldController', - templateUrl : 'app/form/templates/timeField.html' - }, - - /** - * Field type which allows selection of color schemes accepted by the - * Guacamole server terminal emulator and protocols which leverage it. - * - * @see {@link Field.Type.TERMINAL_COLOR_SCHEME} - * @type FieldType - */ - 'TERMINAL_COLOR_SCHEME' : { - module : 'form', - controller : 'terminalColorSchemeFieldController', - templateUrl : 'app/form/templates/terminalColorSchemeField.html' - }, - - /** - * Field type that supports redirecting the client browser to another - * URL. - * - * @see {@link Field.Type.REDIRECT} - * @type FieldType - */ - 'REDIRECT' : { - module : 'form', - controller : 'redirectFieldController', - templateUrl : 'app/form/templates/redirectField.html' - } - - }; - - /** - * Registers a new field type under the given name. - * - * @param {String} fieldTypeName - * The name which uniquely identifies the field type being registered. - * - * @param {FieldType} fieldType - * The field type definition to associate with the given name. - */ - this.registerFieldType = function registerFieldType(fieldTypeName, fieldType) { - - // Store field type - provider.fieldTypes[fieldTypeName] = fieldType; - - }; - - // Factory method required by provider - this.$get = ['$injector', function formServiceFactory($injector) { - - // Required services - var $compile = $injector.get('$compile'); - var $q = $injector.get('$q'); - var $templateRequest = $injector.get('$templateRequest'); - - /** - * Map of module name to the injector instance created for that module. - * - * @type {Object.} - */ - var injectors = {}; - - var service = {}; - - service.fieldTypes = provider.fieldTypes; - - /** - * Given the name of a module, returns an injector instance which - * injects dependencies within that module. A new injector may be - * created and initialized if no such injector has yet been requested. - * If the injector available to formService already includes the - * requested module, that injector will simply be returned. - * - * @param {String} module - * The name of the module to produce an injector for. - * - * @returns {injector} - * An injector instance which injects dependencies for the given - * module. - */ - var getInjector = function getInjector(module) { - - // Use the formService's injector if possible - if ($injector.modules[module]) - return $injector; - - // If the formService's injector does not include the requested - // module, create the necessary injector, reusing that injector for - // future calls - injectors[module] = injectors[module] || angular.injector(['ng', module]); - return injectors[module]; - - }; - - /** - * Given form content and an arbitrary prefix, returns a corresponding - * CSS class object as would be provided to the ngClass directive that - * assigns a content-specific CSS class based on the prefix and - * form/field name. Generated class names follow the lowercase with - * dashes naming convention. For example, if the prefix is "field-" and - * the provided content is a field with the name "Swap red/blue", the - * object { 'field-swap-red-blue' : true } would be returned. - * - * @param {!string} prefix - * The arbitrary prefix to prepend to the name of the generated CSS - * class. - * - * @param {!(Form|Field)} [content] - * The form or field whose name should be used to produce the CSS - * class name. - * - * @param {Object.} [object={}] - * The optional base ngClass object that should be used to provide - * additional name/value pairs within the returned object. - * - * @return {!Object.} - * The ngClass object based on the provided object and defining a - * CSS class name for the given content. - */ - service.getClasses = function getClasses(prefix, content, object) { - - // Default to no additional properties - object = object || {}; - - // Perform no transformation if there is no content or - // corresponding name - if (!content || !content.name) - return object; - - // Transform content name and prefix into lowercase-with-dashes - // CSS class name - var className = prefix + content.name.replace(/[^a-zA-Z0-9]+/g, '-').toLowerCase(); - - // Add CSS class name to provided base object (without touching - // base object) - var classes = angular.extend({}, object); - classes[className] = true; - return classes; - - }; - - /** - * Compiles and links the field associated with the given name to the given - * scope, producing a distinct and independent DOM Element which functions - * as an instance of that field. The scope object provided must include at - * least the following properties: - * - * namespace: - * A String which defines the unique namespace associated the - * translation strings used by the form using a field of this type. - * - * fieldId: - * A String value which is reasonably likely to be unique and may - * be used to associate the main element of the field with its - * label. - * - * field: - * The Field object that is being rendered, representing a field of - * this type. - * - * model: - * The current String value of the field, if any. - * - * disabled: - * A boolean value which is true if the field should be disabled. - * If false or undefined, the field should be enabled. - * - * @param {Element} fieldContainer - * The DOM Element whose contents should be replaced with the - * compiled field template. - * - * @param {String} fieldTypeName - * The name of the field type defining the nature of the element to be - * created. - * - * @param {Object} scope - * The scope to which the new element will be linked. - * - * @return {Promise.} - * A Promise which resolves to the compiled Element. If an error occurs - * while retrieving the field type, this Promise will be rejected. - */ - service.insertFieldElement = function insertFieldElement(fieldContainer, - fieldTypeName, scope) { - - // Ensure field type is defined - var fieldType = provider.fieldTypes[fieldTypeName]; - if (!fieldType) - return $q.reject(); - - var templateRequest; - - // Use raw HTML template if provided - if (fieldType.template) { - var deferredTemplate = $q.defer(); - deferredTemplate.resolve(fieldType.template); - templateRequest = deferredTemplate.promise; - } - - // If no raw HTML template is provided, retrieve template from URL - else if (fieldType.templateUrl) - templateRequest = $templateRequest(fieldType.templateUrl); - - // Otherwise, use empty template - else { - var emptyTemplate= $q.defer(); - emptyTemplate.resolve(''); - templateRequest = emptyTemplate.promise; - } - - // Defer compilation of template pending successful retrieval - var compiledTemplate = $q.defer(); - - // Resolve with compiled HTML upon success - templateRequest.then(function templateRetrieved(html) { - - // Insert template into DOM - fieldContainer.innerHTML = html; - - // Populate scope using defined controller - if (fieldType.module && fieldType.controller) { - var $controller = getInjector(fieldType.module).get('$controller'); - $controller(fieldType.controller, { - '$scope' : scope, - '$element' : angular.element(fieldContainer.childNodes) - }); - } - - // Compile DOM with populated scope - compiledTemplate.resolve($compile(fieldContainer.childNodes)(scope)); - - }) - - // Reject on failure - ['catch'](function templateError() { - compiledTemplate.reject(); - }); - - // Return promise which resolves to the compiled template - return compiledTemplate.promise; - - }; - - return service; - - }]; - -}); diff --git a/guacamole/src/main/frontend/src/app/form/styles/form-field.css b/guacamole/src/main/frontend/src/app/form/styles/form-field.css deleted file mode 100644 index a94b94a0de..0000000000 --- a/guacamole/src/main/frontend/src/app/form/styles/form-field.css +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* Keep toggle-password icon on same line */ -.form-field .password-field { - white-space: nowrap; -} - -/* Generic 1x1em icon/button */ -.form-field .password-field .icon.toggle-password { - - display: inline-block; - opacity: 0.5; - cursor: default; - - background-repeat: no-repeat; - background-size: 1em; - width: 1em; - height: 1em; - -} - -/* Icon for unmasking passwords */ -.form-field .password-field input[type=password] ~ .icon.toggle-password { - background-image: url('images/action-icons/guac-show-pass.svg'); -} - -/* Icon for masking passwords */ -.form-field .password-field input[type=text] ~ .icon.toggle-password { - background-image: url('images/action-icons/guac-hide-pass.svg'); -} diff --git a/guacamole/src/main/frontend/src/app/form/styles/form.css b/guacamole/src/main/frontend/src/app/form/styles/form.css deleted file mode 100644 index 963d31c1c7..0000000000 --- a/guacamole/src/main/frontend/src/app/form/styles/form.css +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.form table.fields th { - text-align: left; - font-weight: normal; - padding-right: 1em; -} diff --git a/guacamole/src/main/frontend/src/app/form/styles/redirect-field.css b/guacamole/src/main/frontend/src/app/form/styles/redirect-field.css deleted file mode 100644 index 8df06c66ea..0000000000 --- a/guacamole/src/main/frontend/src/app/form/styles/redirect-field.css +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.redirect-field-container { - height: 100%; - width: 100%; - position: fixed; - left: 0; - top: 0; - display: table; - background: white; -} - -.redirect-field { - width: 100%; - display: table-cell; - vertical-align: middle; - text-align: center; -} diff --git a/guacamole/src/main/frontend/src/app/form/styles/terminal-color-scheme-field.css b/guacamole/src/main/frontend/src/app/form/styles/terminal-color-scheme-field.css deleted file mode 100644 index 01eac1ac7f..0000000000 --- a/guacamole/src/main/frontend/src/app/form/styles/terminal-color-scheme-field.css +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.terminal-color-scheme-field { - max-width: 320px; -} - -.terminal-color-scheme-field select { - width: 100%; -} - -.terminal-color-scheme-field .custom-color-scheme { - background: #EEE; - padding: 0.5em; - border: 1px solid silver; - border-spacing: 0; - margin-top: -2px; - width: 100%; -} - -.terminal-color-scheme-field .custom-color-scheme-section { - display: -ms-flexbox; - display: -moz-box; - display: -webkit-box; - display: -webkit-flex; - display: flex; -} - -.terminal-color-scheme-field .guac-input-color { - - display: block; - margin: 2px; - width: 1.5em; - height: 1.5em; - min-width: 1.25em; - border-radius: 0.15em; - line-height: 1.5em; - text-align: center; - font-size: 0.75em; - cursor: pointer; - color: black; - - -ms-flex: 1; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1; - flex: 1; - -} - -.terminal-color-scheme-field .guac-input-color.read-only { - cursor: not-allowed; -} - -.terminal-color-scheme-field .guac-input-color.dark { - color: white; -} - -.terminal-color-scheme-field .palette .guac-input-color { - font-weight: bold; -} - -/* Hide palette numbers unless color scheme details are visible */ -.terminal-color-scheme-field.custom-color-scheme-details-hidden .custom-color-scheme .palette .guac-input-color { - color: transparent; -} - -/* - * Custom color scheme details header - */ - -.terminal-color-scheme-field .custom-color-scheme-details-header { - font-size: 0.8em; - margin: 0.5em 0; - padding: 0; -} - -.terminal-color-scheme-field .custom-color-scheme-details-header::before { - content: '▸ '; -} - -.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-details-header::before { - content: '▾ '; -} - -/* - * Details show/hide link - */ - -/* Render show/hide as a link */ -.terminal-color-scheme-field .custom-color-scheme-hide-details, -.terminal-color-scheme-field .custom-color-scheme-show-details { - color: blue; - text-decoration: underline; - cursor: pointer; - margin: 0 0.25em; - font-weight: normal; -} - -.terminal-color-scheme-field .custom-color-scheme-hide-details { - display: none; -} - -.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-hide-details { - display: inline; -} - -.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-show-details { - display: none; -} - -/* - * Color scheme details - */ - -.terminal-color-scheme-field .custom-color-scheme-details { - display: none; -} - -.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-details { - display: block; - width: 100%; - margin: 0.5em 0; -} - -/* - * Color picker - */ - -/* Increase width of color picker to allow two even rows of eight color - * swatches */ -.guac-input-color-picker[data-theme="monolith"] { - width: 16.25em; -} - -/* Remove Guacamole-specific styles inherited from the generic button rules */ -.guac-input-color-picker[data-theme="monolith"] button { - min-width: 0; - padding: 0; - margin: 0; - box-shadow: none; -} diff --git a/guacamole/src/main/frontend/src/app/form/templates/checkboxField.html b/guacamole/src/main/frontend/src/app/form/templates/checkboxField.html deleted file mode 100644 index 39d1f6b7d0..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/checkboxField.html +++ /dev/null @@ -1,10 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/dateField.html b/guacamole/src/main/frontend/src/app/form/templates/dateField.html deleted file mode 100644 index 93a231f354..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/dateField.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/emailField.html b/guacamole/src/main/frontend/src/app/form/templates/emailField.html deleted file mode 100644 index c5170b796a..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/emailField.html +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/form/templates/form.html b/guacamole/src/main/frontend/src/app/form/templates/form.html deleted file mode 100644 index 642c57783d..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/form.html +++ /dev/null @@ -1,21 +0,0 @@ -
    -
    - - -

    {{getSectionHeader(form) | translate}}

    - - -
    - -
    - -
    -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/formField.html b/guacamole/src/main/frontend/src/app/form/templates/formField.html deleted file mode 100644 index 8534515a22..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/formField.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - - -
    - -
    - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/guacInputColor.html b/guacamole/src/main/frontend/src/app/form/templates/guacInputColor.html deleted file mode 100644 index eae1f66996..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/guacInputColor.html +++ /dev/null @@ -1,11 +0,0 @@ -
    - -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/form/templates/languageField.html b/guacamole/src/main/frontend/src/app/form/templates/languageField.html deleted file mode 100644 index a19d21cd0c..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/languageField.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/numberField.html b/guacamole/src/main/frontend/src/app/form/templates/numberField.html deleted file mode 100644 index 1bf58a1758..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/numberField.html +++ /dev/null @@ -1,10 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/passwordField.html b/guacamole/src/main/frontend/src/app/form/templates/passwordField.html deleted file mode 100644 index 17cfc0a6cc..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/passwordField.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - -
    -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/redirectField.html b/guacamole/src/main/frontend/src/app/form/templates/redirectField.html deleted file mode 100644 index 2dffa634af..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/redirectField.html +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    -

    -

    -
    -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/form/templates/selectField.html b/guacamole/src/main/frontend/src/app/form/templates/selectField.html deleted file mode 100644 index 635527557d..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/selectField.html +++ /dev/null @@ -1,8 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/terminalColorSchemeField.html b/guacamole/src/main/frontend/src/app/form/templates/terminalColorSchemeField.html deleted file mode 100644 index 027f4e751c..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/terminalColorSchemeField.html +++ /dev/null @@ -1,65 +0,0 @@ -
    - - - - - -
    - - -
    - - {{ 'COLOR_SCHEME.FIELD_HEADER_FOREGROUND' | translate }} - -
    - - -
    - - {{ 'COLOR_SCHEME.FIELD_HEADER_BACKGROUND' | translate }} - -
    - - -
    - - {{ index }} - -
    - - -
    - - {{ index }} - -
    - -
    - - -

    - {{'COLOR_SCHEME.SECTION_HEADER_DETAILS' | translate}} - {{'COLOR_SCHEME.ACTION_SHOW_DETAILS' | translate}} - {{'COLOR_SCHEME.ACTION_HIDE_DETAILS' | translate}} -

    - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/textAreaField.html b/guacamole/src/main/frontend/src/app/form/templates/textAreaField.html deleted file mode 100644 index 4e63eb53ef..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/textAreaField.html +++ /dev/null @@ -1,9 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/textField.html b/guacamole/src/main/frontend/src/app/form/templates/textField.html deleted file mode 100644 index fac7b38189..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/textField.html +++ /dev/null @@ -1,15 +0,0 @@ -
    - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/timeField.html b/guacamole/src/main/frontend/src/app/form/templates/timeField.html deleted file mode 100644 index 0b33f5fb17..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/timeField.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/timeZoneField.html b/guacamole/src/main/frontend/src/app/form/templates/timeZoneField.html deleted file mode 100644 index 690bf68a48..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/timeZoneField.html +++ /dev/null @@ -1,18 +0,0 @@ -
    - - - - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/form/templates/usernameField.html b/guacamole/src/main/frontend/src/app/form/templates/usernameField.html deleted file mode 100644 index 6a5c664d4a..0000000000 --- a/guacamole/src/main/frontend/src/app/form/templates/usernameField.html +++ /dev/null @@ -1,10 +0,0 @@ -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/form/types/ColorScheme.js b/guacamole/src/main/frontend/src/app/form/types/ColorScheme.js deleted file mode 100644 index f51a667f9e..0000000000 --- a/guacamole/src/main/frontend/src/app/form/types/ColorScheme.js +++ /dev/null @@ -1,949 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ColorScheme class. - */ -angular.module('form').factory('ColorScheme', [function defineColorScheme() { - - /** - * Intermediate representation of a custom color scheme which can be - * converted to the color scheme format used by Guacamole's terminal - * emulator. All colors must be represented in the six-digit hexadecimal - * RGB notation used by HTML ("#000000" for black, etc.). - * - * @constructor - * @param {ColorScheme|Object} [template={}] - * The object whose properties should be copied within the new - * ColorScheme. - */ - var ColorScheme = function ColorScheme(template) { - - // Use empty object by default - template = template || {}; - - /** - * The terminal background color. This will be the default foreground - * color of the Guacamole terminal emulator ("#000000") by default. - * - * @type {String} - */ - this.background = template.background || '#000000'; - - /** - * The terminal foreground color. This will be the default foreground - * color of the Guacamole terminal emulator ("#999999") by default. - * - * @type {String} - */ - this.foreground = template.foreground || '#999999'; - - /** - * The terminal color palette. Default values are provided for the - * normal 16 terminal colors using the default values of the Guacamole - * terminal emulator, however the terminal emulator and this - * representation support up to 256 colors. - * - * @type {String[]} - */ - this.colors = template.colors || [ - - // Normal colors - '#000000', // Black - '#993E3E', // Red - '#3E993E', // Green - '#99993E', // Brown - '#3E3E99', // Blue - '#993E99', // Magenta - '#3E9999', // Cyan - '#999999', // White - - // Intense colors - '#3E3E3E', // Black - '#FF6767', // Red - '#67FF67', // Green - '#FFFF67', // Brown - '#6767FF', // Blue - '#FF67FF', // Magenta - '#67FFFF', // Cyan - '#FFFFFF' // White - - ]; - - /** - * The string which was parsed to produce this ColorScheme instance, if - * ColorScheme.fromString() was used to produce this ColorScheme. - * - * @private - * @type {String} - */ - this._originalString = template._originalString; - - }; - - /** - * Given a color string in the standard 6-digit hexadecimal RGB format, - * returns a X11 color spec which represents the same color. - * - * @param {String} color - * The hexadecimal color string to convert. - * - * @returns {String} - * The X11 color spec representing the same color as the given - * hexadecimal string, or null if the given string is not a valid - * 6-digit hexadecimal RGB color. - */ - var fromHexColor = function fromHexColor(color) { - - var groups = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/.exec(color); - if (!groups) - return null; - - return 'rgb:' + groups[1] + '/' + groups[2] + '/' + groups[3]; - - }; - - /** - * Parses the same subset of the X11 color spec supported by the Guacamole - * terminal emulator (the "rgb:*" format), returning the equivalent 6-digit - * hexadecimal color string supported by the ColorScheme representation. - * The X11 color spec defined by Xlib's XParseColor(). The human-readable - * color names supported by the Guacamole terminal emulator (the same color - * names as supported by xterm) may also be used. - * - * @param {String} color - * The X11 color spec to parse, or the name of a known named color. - * - * @returns {String} - * The 6-digit hexadecimal color string which represents the same color - * as the given X11 color spec/name, or null if the given spec/name is - * invalid. - */ - var toHexColor = function toHexColor(color) { - - /** - * Shifts or truncates the given hexadecimal string such that it - * contains exactly two hexadecimal digits, as required by any - * individual color component of the 6-digit hexadecimal RGB format. - * - * @param {String} component - * The hexadecimal string to shift or truncate to two digits. - * - * @returns {String} - * A new 2-digit hexadecimal string containing the same digits as - * the provided string, shifted or truncated as necessary to fit - * within the 2-digit length limit. - */ - var toHexComponent = function toHexComponent(component) { - return (component + '0').substring(0, 2).toUpperCase(); - }; - - // Attempt to parse any non-RGB color as a named color - var groups = /^rgb:([0-9A-Fa-f]{1,4})\/([0-9A-Fa-f]{1,4})\/([0-9A-Fa-f]{1,4})$/.exec(color); - if (!groups) - return ColorScheme.NAMED_COLORS[color.toLowerCase()] || null; - - // Convert to standard 6-digit hexadecimal RGB format - return '#' + toHexComponent(groups[1]) + toHexComponent(groups[2]) + toHexComponent(groups[3]); - - }; - - /** - * Converts the given string representation of a color scheme which is - * supported by the Guacamole terminal emulator to a corresponding, - * intermediate ColorScheme object. - * - * @param {String} str - * An arbitrary color scheme, in the string format supported by the - * Guacamole terminal emulator. - * - * @returns {ColorScheme} - * A new ColorScheme instance which represents the same color scheme as - * the given string. - */ - ColorScheme.fromString = function fromString(str) { - - var scheme = new ColorScheme({ _originalString : str }); - - // For each semicolon-separated statement in the provided color scheme - var statements = str.split(/;/); - for (var i = 0; i < statements.length; i++) { - - // Skip any statements which cannot be parsed - var statement = statements[i]; - var groups = /^\s*(background|foreground|color([0-9]+))\s*:\s*(\S*)\s*$/.exec(statement); - if (!groups) - continue; - - // If the statement is valid and contains a valid color, map that - // color to the appropriate property of the ColorScheme object - var color = toHexColor(groups[3]); - if (color) { - if (groups[1] === 'background') - scheme.background = color; - else if (groups[1] === 'foreground') - scheme.foreground = color; - else - scheme.colors[parseInt(groups[2])] = color; - } - - } - - return scheme; - - }; - - /** - * Returns whether the two given color schemes define the exact same - * colors. - * - * @param {ColorScheme} a - * The first ColorScheme to compare. - * - * @param {ColorScheme} b - * The second ColorScheme to compare. - * - * @returns {Boolean} - * true if both color schemes contain the same colors, false otherwise. - */ - ColorScheme.equals = function equals(a, b) { - return a.foreground === b.foreground - && a.background === b.background - && _.isEqual(a.colors, b.colors); - }; - - /** - * Converts the given ColorScheme to a string representation which is - * supported by the Guacamole terminal emulator. - * - * @param {ColorScheme} scheme - * The ColorScheme to convert to a string. - * - * @returns {String} - * The given color scheme, converted to the string format supported by - * the Guacamole terminal emulator. - */ - ColorScheme.toString = function toString(scheme) { - - // Use originally-provided string if it equates to the exact same color scheme - if (!_.isUndefined(scheme._originalString) && ColorScheme.equals(scheme, ColorScheme.fromString(scheme._originalString))) - return scheme._originalString; - - // Add background and foreground - var str = 'background: ' + fromHexColor(scheme.background) + ';\n' - + 'foreground: ' + fromHexColor(scheme.foreground) + ';'; - - // Add color definitions for each palette entry - for (var index in scheme.colors) - str += '\ncolor' + index + ': ' + fromHexColor(scheme.colors[index]) + ';'; - - return str; - - }; - - /** - * The set of all named colors supported by the Guacamole terminal - * emulator and their corresponding 6-digit hexadecimal RGB - * representations. This set should contain all colors supported by xterm. - * - * @constant - * @type {Object.} - */ - ColorScheme.NAMED_COLORS = { - 'aliceblue' : '#F0F8FF', - 'antiquewhite' : '#FAEBD7', - 'antiquewhite1' : '#FFEFDB', - 'antiquewhite2' : '#EEDFCC', - 'antiquewhite3' : '#CDC0B0', - 'antiquewhite4' : '#8B8378', - 'aqua' : '#00FFFF', - 'aquamarine' : '#7FFFD4', - 'aquamarine1' : '#7FFFD4', - 'aquamarine2' : '#76EEC6', - 'aquamarine3' : '#66CDAA', - 'aquamarine4' : '#458B74', - 'azure' : '#F0FFFF', - 'azure1' : '#F0FFFF', - 'azure2' : '#E0EEEE', - 'azure3' : '#C1CDCD', - 'azure4' : '#838B8B', - 'beige' : '#F5F5DC', - 'bisque' : '#FFE4C4', - 'bisque1' : '#FFE4C4', - 'bisque2' : '#EED5B7', - 'bisque3' : '#CDB79E', - 'bisque4' : '#8B7D6B', - 'black' : '#000000', - 'blanchedalmond' : '#FFEBCD', - 'blue' : '#0000FF', - 'blue1' : '#0000FF', - 'blue2' : '#0000EE', - 'blue3' : '#0000CD', - 'blue4' : '#00008B', - 'blueviolet' : '#8A2BE2', - 'brown' : '#A52A2A', - 'brown1' : '#FF4040', - 'brown2' : '#EE3B3B', - 'brown3' : '#CD3333', - 'brown4' : '#8B2323', - 'burlywood' : '#DEB887', - 'burlywood1' : '#FFD39B', - 'burlywood2' : '#EEC591', - 'burlywood3' : '#CDAA7D', - 'burlywood4' : '#8B7355', - 'cadetblue' : '#5F9EA0', - 'cadetblue1' : '#98F5FF', - 'cadetblue2' : '#8EE5EE', - 'cadetblue3' : '#7AC5CD', - 'cadetblue4' : '#53868B', - 'chartreuse' : '#7FFF00', - 'chartreuse1' : '#7FFF00', - 'chartreuse2' : '#76EE00', - 'chartreuse3' : '#66CD00', - 'chartreuse4' : '#458B00', - 'chocolate' : '#D2691E', - 'chocolate1' : '#FF7F24', - 'chocolate2' : '#EE7621', - 'chocolate3' : '#CD661D', - 'chocolate4' : '#8B4513', - 'coral' : '#FF7F50', - 'coral1' : '#FF7256', - 'coral2' : '#EE6A50', - 'coral3' : '#CD5B45', - 'coral4' : '#8B3E2F', - 'cornflowerblue' : '#6495ED', - 'cornsilk' : '#FFF8DC', - 'cornsilk1' : '#FFF8DC', - 'cornsilk2' : '#EEE8CD', - 'cornsilk3' : '#CDC8B1', - 'cornsilk4' : '#8B8878', - 'crimson' : '#DC143C', - 'cyan' : '#00FFFF', - 'cyan1' : '#00FFFF', - 'cyan2' : '#00EEEE', - 'cyan3' : '#00CDCD', - 'cyan4' : '#008B8B', - 'darkblue' : '#00008B', - 'darkcyan' : '#008B8B', - 'darkgoldenrod' : '#B8860B', - 'darkgoldenrod1' : '#FFB90F', - 'darkgoldenrod2' : '#EEAD0E', - 'darkgoldenrod3' : '#CD950C', - 'darkgoldenrod4' : '#8B6508', - 'darkgray' : '#A9A9A9', - 'darkgreen' : '#006400', - 'darkgrey' : '#A9A9A9', - 'darkkhaki' : '#BDB76B', - 'darkmagenta' : '#8B008B', - 'darkolivegreen' : '#556B2F', - 'darkolivegreen1' : '#CAFF70', - 'darkolivegreen2' : '#BCEE68', - 'darkolivegreen3' : '#A2CD5A', - 'darkolivegreen4' : '#6E8B3D', - 'darkorange' : '#FF8C00', - 'darkorange1' : '#FF7F00', - 'darkorange2' : '#EE7600', - 'darkorange3' : '#CD6600', - 'darkorange4' : '#8B4500', - 'darkorchid' : '#9932CC', - 'darkorchid1' : '#BF3EFF', - 'darkorchid2' : '#B23AEE', - 'darkorchid3' : '#9A32CD', - 'darkorchid4' : '#68228B', - 'darkred' : '#8B0000', - 'darksalmon' : '#E9967A', - 'darkseagreen' : '#8FBC8F', - 'darkseagreen1' : '#C1FFC1', - 'darkseagreen2' : '#B4EEB4', - 'darkseagreen3' : '#9BCD9B', - 'darkseagreen4' : '#698B69', - 'darkslateblue' : '#483D8B', - 'darkslategray' : '#2F4F4F', - 'darkslategray1' : '#97FFFF', - 'darkslategray2' : '#8DEEEE', - 'darkslategray3' : '#79CDCD', - 'darkslategray4' : '#528B8B', - 'darkslategrey' : '#2F4F4F', - 'darkturquoise' : '#00CED1', - 'darkviolet' : '#9400D3', - 'deeppink' : '#FF1493', - 'deeppink1' : '#FF1493', - 'deeppink2' : '#EE1289', - 'deeppink3' : '#CD1076', - 'deeppink4' : '#8B0A50', - 'deepskyblue' : '#00BFFF', - 'deepskyblue1' : '#00BFFF', - 'deepskyblue2' : '#00B2EE', - 'deepskyblue3' : '#009ACD', - 'deepskyblue4' : '#00688B', - 'dimgray' : '#696969', - 'dimgrey' : '#696969', - 'dodgerblue' : '#1E90FF', - 'dodgerblue1' : '#1E90FF', - 'dodgerblue2' : '#1C86EE', - 'dodgerblue3' : '#1874CD', - 'dodgerblue4' : '#104E8B', - 'firebrick' : '#B22222', - 'firebrick1' : '#FF3030', - 'firebrick2' : '#EE2C2C', - 'firebrick3' : '#CD2626', - 'firebrick4' : '#8B1A1A', - 'floralwhite' : '#FFFAF0', - 'forestgreen' : '#228B22', - 'fuchsia' : '#FF00FF', - 'gainsboro' : '#DCDCDC', - 'ghostwhite' : '#F8F8FF', - 'gold' : '#FFD700', - 'gold1' : '#FFD700', - 'gold2' : '#EEC900', - 'gold3' : '#CDAD00', - 'gold4' : '#8B7500', - 'goldenrod' : '#DAA520', - 'goldenrod1' : '#FFC125', - 'goldenrod2' : '#EEB422', - 'goldenrod3' : '#CD9B1D', - 'goldenrod4' : '#8B6914', - 'gray' : '#BEBEBE', - 'gray0' : '#000000', - 'gray1' : '#030303', - 'gray10' : '#1A1A1A', - 'gray100' : '#FFFFFF', - 'gray11' : '#1C1C1C', - 'gray12' : '#1F1F1F', - 'gray13' : '#212121', - 'gray14' : '#242424', - 'gray15' : '#262626', - 'gray16' : '#292929', - 'gray17' : '#2B2B2B', - 'gray18' : '#2E2E2E', - 'gray19' : '#303030', - 'gray2' : '#050505', - 'gray20' : '#333333', - 'gray21' : '#363636', - 'gray22' : '#383838', - 'gray23' : '#3B3B3B', - 'gray24' : '#3D3D3D', - 'gray25' : '#404040', - 'gray26' : '#424242', - 'gray27' : '#454545', - 'gray28' : '#474747', - 'gray29' : '#4A4A4A', - 'gray3' : '#080808', - 'gray30' : '#4D4D4D', - 'gray31' : '#4F4F4F', - 'gray32' : '#525252', - 'gray33' : '#545454', - 'gray34' : '#575757', - 'gray35' : '#595959', - 'gray36' : '#5C5C5C', - 'gray37' : '#5E5E5E', - 'gray38' : '#616161', - 'gray39' : '#636363', - 'gray4' : '#0A0A0A', - 'gray40' : '#666666', - 'gray41' : '#696969', - 'gray42' : '#6B6B6B', - 'gray43' : '#6E6E6E', - 'gray44' : '#707070', - 'gray45' : '#737373', - 'gray46' : '#757575', - 'gray47' : '#787878', - 'gray48' : '#7A7A7A', - 'gray49' : '#7D7D7D', - 'gray5' : '#0D0D0D', - 'gray50' : '#7F7F7F', - 'gray51' : '#828282', - 'gray52' : '#858585', - 'gray53' : '#878787', - 'gray54' : '#8A8A8A', - 'gray55' : '#8C8C8C', - 'gray56' : '#8F8F8F', - 'gray57' : '#919191', - 'gray58' : '#949494', - 'gray59' : '#969696', - 'gray6' : '#0F0F0F', - 'gray60' : '#999999', - 'gray61' : '#9C9C9C', - 'gray62' : '#9E9E9E', - 'gray63' : '#A1A1A1', - 'gray64' : '#A3A3A3', - 'gray65' : '#A6A6A6', - 'gray66' : '#A8A8A8', - 'gray67' : '#ABABAB', - 'gray68' : '#ADADAD', - 'gray69' : '#B0B0B0', - 'gray7' : '#121212', - 'gray70' : '#B3B3B3', - 'gray71' : '#B5B5B5', - 'gray72' : '#B8B8B8', - 'gray73' : '#BABABA', - 'gray74' : '#BDBDBD', - 'gray75' : '#BFBFBF', - 'gray76' : '#C2C2C2', - 'gray77' : '#C4C4C4', - 'gray78' : '#C7C7C7', - 'gray79' : '#C9C9C9', - 'gray8' : '#141414', - 'gray80' : '#CCCCCC', - 'gray81' : '#CFCFCF', - 'gray82' : '#D1D1D1', - 'gray83' : '#D4D4D4', - 'gray84' : '#D6D6D6', - 'gray85' : '#D9D9D9', - 'gray86' : '#DBDBDB', - 'gray87' : '#DEDEDE', - 'gray88' : '#E0E0E0', - 'gray89' : '#E3E3E3', - 'gray9' : '#171717', - 'gray90' : '#E5E5E5', - 'gray91' : '#E8E8E8', - 'gray92' : '#EBEBEB', - 'gray93' : '#EDEDED', - 'gray94' : '#F0F0F0', - 'gray95' : '#F2F2F2', - 'gray96' : '#F5F5F5', - 'gray97' : '#F7F7F7', - 'gray98' : '#FAFAFA', - 'gray99' : '#FCFCFC', - 'green' : '#00FF00', - 'green1' : '#00FF00', - 'green2' : '#00EE00', - 'green3' : '#00CD00', - 'green4' : '#008B00', - 'greenyellow' : '#ADFF2F', - 'grey' : '#BEBEBE', - 'grey0' : '#000000', - 'grey1' : '#030303', - 'grey10' : '#1A1A1A', - 'grey100' : '#FFFFFF', - 'grey11' : '#1C1C1C', - 'grey12' : '#1F1F1F', - 'grey13' : '#212121', - 'grey14' : '#242424', - 'grey15' : '#262626', - 'grey16' : '#292929', - 'grey17' : '#2B2B2B', - 'grey18' : '#2E2E2E', - 'grey19' : '#303030', - 'grey2' : '#050505', - 'grey20' : '#333333', - 'grey21' : '#363636', - 'grey22' : '#383838', - 'grey23' : '#3B3B3B', - 'grey24' : '#3D3D3D', - 'grey25' : '#404040', - 'grey26' : '#424242', - 'grey27' : '#454545', - 'grey28' : '#474747', - 'grey29' : '#4A4A4A', - 'grey3' : '#080808', - 'grey30' : '#4D4D4D', - 'grey31' : '#4F4F4F', - 'grey32' : '#525252', - 'grey33' : '#545454', - 'grey34' : '#575757', - 'grey35' : '#595959', - 'grey36' : '#5C5C5C', - 'grey37' : '#5E5E5E', - 'grey38' : '#616161', - 'grey39' : '#636363', - 'grey4' : '#0A0A0A', - 'grey40' : '#666666', - 'grey41' : '#696969', - 'grey42' : '#6B6B6B', - 'grey43' : '#6E6E6E', - 'grey44' : '#707070', - 'grey45' : '#737373', - 'grey46' : '#757575', - 'grey47' : '#787878', - 'grey48' : '#7A7A7A', - 'grey49' : '#7D7D7D', - 'grey5' : '#0D0D0D', - 'grey50' : '#7F7F7F', - 'grey51' : '#828282', - 'grey52' : '#858585', - 'grey53' : '#878787', - 'grey54' : '#8A8A8A', - 'grey55' : '#8C8C8C', - 'grey56' : '#8F8F8F', - 'grey57' : '#919191', - 'grey58' : '#949494', - 'grey59' : '#969696', - 'grey6' : '#0F0F0F', - 'grey60' : '#999999', - 'grey61' : '#9C9C9C', - 'grey62' : '#9E9E9E', - 'grey63' : '#A1A1A1', - 'grey64' : '#A3A3A3', - 'grey65' : '#A6A6A6', - 'grey66' : '#A8A8A8', - 'grey67' : '#ABABAB', - 'grey68' : '#ADADAD', - 'grey69' : '#B0B0B0', - 'grey7' : '#121212', - 'grey70' : '#B3B3B3', - 'grey71' : '#B5B5B5', - 'grey72' : '#B8B8B8', - 'grey73' : '#BABABA', - 'grey74' : '#BDBDBD', - 'grey75' : '#BFBFBF', - 'grey76' : '#C2C2C2', - 'grey77' : '#C4C4C4', - 'grey78' : '#C7C7C7', - 'grey79' : '#C9C9C9', - 'grey8' : '#141414', - 'grey80' : '#CCCCCC', - 'grey81' : '#CFCFCF', - 'grey82' : '#D1D1D1', - 'grey83' : '#D4D4D4', - 'grey84' : '#D6D6D6', - 'grey85' : '#D9D9D9', - 'grey86' : '#DBDBDB', - 'grey87' : '#DEDEDE', - 'grey88' : '#E0E0E0', - 'grey89' : '#E3E3E3', - 'grey9' : '#171717', - 'grey90' : '#E5E5E5', - 'grey91' : '#E8E8E8', - 'grey92' : '#EBEBEB', - 'grey93' : '#EDEDED', - 'grey94' : '#F0F0F0', - 'grey95' : '#F2F2F2', - 'grey96' : '#F5F5F5', - 'grey97' : '#F7F7F7', - 'grey98' : '#FAFAFA', - 'grey99' : '#FCFCFC', - 'honeydew' : '#F0FFF0', - 'honeydew1' : '#F0FFF0', - 'honeydew2' : '#E0EEE0', - 'honeydew3' : '#C1CDC1', - 'honeydew4' : '#838B83', - 'hotpink' : '#FF69B4', - 'hotpink1' : '#FF6EB4', - 'hotpink2' : '#EE6AA7', - 'hotpink3' : '#CD6090', - 'hotpink4' : '#8B3A62', - 'indianred' : '#CD5C5C', - 'indianred1' : '#FF6A6A', - 'indianred2' : '#EE6363', - 'indianred3' : '#CD5555', - 'indianred4' : '#8B3A3A', - 'indigo' : '#4B0082', - 'ivory' : '#FFFFF0', - 'ivory1' : '#FFFFF0', - 'ivory2' : '#EEEEE0', - 'ivory3' : '#CDCDC1', - 'ivory4' : '#8B8B83', - 'khaki' : '#F0E68C', - 'khaki1' : '#FFF68F', - 'khaki2' : '#EEE685', - 'khaki3' : '#CDC673', - 'khaki4' : '#8B864E', - 'lavender' : '#E6E6FA', - 'lavenderblush' : '#FFF0F5', - 'lavenderblush1' : '#FFF0F5', - 'lavenderblush2' : '#EEE0E5', - 'lavenderblush3' : '#CDC1C5', - 'lavenderblush4' : '#8B8386', - 'lawngreen' : '#7CFC00', - 'lemonchiffon' : '#FFFACD', - 'lemonchiffon1' : '#FFFACD', - 'lemonchiffon2' : '#EEE9BF', - 'lemonchiffon3' : '#CDC9A5', - 'lemonchiffon4' : '#8B8970', - 'lightblue' : '#ADD8E6', - 'lightblue1' : '#BFEFFF', - 'lightblue2' : '#B2DFEE', - 'lightblue3' : '#9AC0CD', - 'lightblue4' : '#68838B', - 'lightcoral' : '#F08080', - 'lightcyan' : '#E0FFFF', - 'lightcyan1' : '#E0FFFF', - 'lightcyan2' : '#D1EEEE', - 'lightcyan3' : '#B4CDCD', - 'lightcyan4' : '#7A8B8B', - 'lightgoldenrod' : '#EEDD82', - 'lightgoldenrod1' : '#FFEC8B', - 'lightgoldenrod2' : '#EEDC82', - 'lightgoldenrod3' : '#CDBE70', - 'lightgoldenrod4' : '#8B814C', - 'lightgoldenrodyellow' : '#FAFAD2', - 'lightgray' : '#D3D3D3', - 'lightgreen' : '#90EE90', - 'lightgrey' : '#D3D3D3', - 'lightpink' : '#FFB6C1', - 'lightpink1' : '#FFAEB9', - 'lightpink2' : '#EEA2AD', - 'lightpink3' : '#CD8C95', - 'lightpink4' : '#8B5F65', - 'lightsalmon' : '#FFA07A', - 'lightsalmon1' : '#FFA07A', - 'lightsalmon2' : '#EE9572', - 'lightsalmon3' : '#CD8162', - 'lightsalmon4' : '#8B5742', - 'lightseagreen' : '#20B2AA', - 'lightskyblue' : '#87CEFA', - 'lightskyblue1' : '#B0E2FF', - 'lightskyblue2' : '#A4D3EE', - 'lightskyblue3' : '#8DB6CD', - 'lightskyblue4' : '#607B8B', - 'lightslateblue' : '#8470FF', - 'lightslategray' : '#778899', - 'lightslategrey' : '#778899', - 'lightsteelblue' : '#B0C4DE', - 'lightsteelblue1' : '#CAE1FF', - 'lightsteelblue2' : '#BCD2EE', - 'lightsteelblue3' : '#A2B5CD', - 'lightsteelblue4' : '#6E7B8B', - 'lightyellow' : '#FFFFE0', - 'lightyellow1' : '#FFFFE0', - 'lightyellow2' : '#EEEED1', - 'lightyellow3' : '#CDCDB4', - 'lightyellow4' : '#8B8B7A', - 'lime' : '#00FF00', - 'limegreen' : '#32CD32', - 'linen' : '#FAF0E6', - 'magenta' : '#FF00FF', - 'magenta1' : '#FF00FF', - 'magenta2' : '#EE00EE', - 'magenta3' : '#CD00CD', - 'magenta4' : '#8B008B', - 'maroon' : '#B03060', - 'maroon1' : '#FF34B3', - 'maroon2' : '#EE30A7', - 'maroon3' : '#CD2990', - 'maroon4' : '#8B1C62', - 'mediumaquamarine' : '#66CDAA', - 'mediumblue' : '#0000CD', - 'mediumorchid' : '#BA55D3', - 'mediumorchid1' : '#E066FF', - 'mediumorchid2' : '#D15FEE', - 'mediumorchid3' : '#B452CD', - 'mediumorchid4' : '#7A378B', - 'mediumpurple' : '#9370DB', - 'mediumpurple1' : '#AB82FF', - 'mediumpurple2' : '#9F79EE', - 'mediumpurple3' : '#8968CD', - 'mediumpurple4' : '#5D478B', - 'mediumseagreen' : '#3CB371', - 'mediumslateblue' : '#7B68EE', - 'mediumspringgreen' : '#00FA9A', - 'mediumturquoise' : '#48D1CC', - 'mediumvioletred' : '#C71585', - 'midnightblue' : '#191970', - 'mintcream' : '#F5FFFA', - 'mistyrose' : '#FFE4E1', - 'mistyrose1' : '#FFE4E1', - 'mistyrose2' : '#EED5D2', - 'mistyrose3' : '#CDB7B5', - 'mistyrose4' : '#8B7D7B', - 'moccasin' : '#FFE4B5', - 'navajowhite' : '#FFDEAD', - 'navajowhite1' : '#FFDEAD', - 'navajowhite2' : '#EECFA1', - 'navajowhite3' : '#CDB38B', - 'navajowhite4' : '#8B795E', - 'navy' : '#000080', - 'navyblue' : '#000080', - 'oldlace' : '#FDF5E6', - 'olive' : '#808000', - 'olivedrab' : '#6B8E23', - 'olivedrab1' : '#C0FF3E', - 'olivedrab2' : '#B3EE3A', - 'olivedrab3' : '#9ACD32', - 'olivedrab4' : '#698B22', - 'orange' : '#FFA500', - 'orange1' : '#FFA500', - 'orange2' : '#EE9A00', - 'orange3' : '#CD8500', - 'orange4' : '#8B5A00', - 'orangered' : '#FF4500', - 'orangered1' : '#FF4500', - 'orangered2' : '#EE4000', - 'orangered3' : '#CD3700', - 'orangered4' : '#8B2500', - 'orchid' : '#DA70D6', - 'orchid1' : '#FF83FA', - 'orchid2' : '#EE7AE9', - 'orchid3' : '#CD69C9', - 'orchid4' : '#8B4789', - 'palegoldenrod' : '#EEE8AA', - 'palegreen' : '#98FB98', - 'palegreen1' : '#9AFF9A', - 'palegreen2' : '#90EE90', - 'palegreen3' : '#7CCD7C', - 'palegreen4' : '#548B54', - 'paleturquoise' : '#AFEEEE', - 'paleturquoise1' : '#BBFFFF', - 'paleturquoise2' : '#AEEEEE', - 'paleturquoise3' : '#96CDCD', - 'paleturquoise4' : '#668B8B', - 'palevioletred' : '#DB7093', - 'palevioletred1' : '#FF82AB', - 'palevioletred2' : '#EE799F', - 'palevioletred3' : '#CD6889', - 'palevioletred4' : '#8B475D', - 'papayawhip' : '#FFEFD5', - 'peachpuff' : '#FFDAB9', - 'peachpuff1' : '#FFDAB9', - 'peachpuff2' : '#EECBAD', - 'peachpuff3' : '#CDAF95', - 'peachpuff4' : '#8B7765', - 'peru' : '#CD853F', - 'pink' : '#FFC0CB', - 'pink1' : '#FFB5C5', - 'pink2' : '#EEA9B8', - 'pink3' : '#CD919E', - 'pink4' : '#8B636C', - 'plum' : '#DDA0DD', - 'plum1' : '#FFBBFF', - 'plum2' : '#EEAEEE', - 'plum3' : '#CD96CD', - 'plum4' : '#8B668B', - 'powderblue' : '#B0E0E6', - 'purple' : '#A020F0', - 'purple1' : '#9B30FF', - 'purple2' : '#912CEE', - 'purple3' : '#7D26CD', - 'purple4' : '#551A8B', - 'rebeccapurple' : '#663399', - 'red' : '#FF0000', - 'red1' : '#FF0000', - 'red2' : '#EE0000', - 'red3' : '#CD0000', - 'red4' : '#8B0000', - 'rosybrown' : '#BC8F8F', - 'rosybrown1' : '#FFC1C1', - 'rosybrown2' : '#EEB4B4', - 'rosybrown3' : '#CD9B9B', - 'rosybrown4' : '#8B6969', - 'royalblue' : '#4169E1', - 'royalblue1' : '#4876FF', - 'royalblue2' : '#436EEE', - 'royalblue3' : '#3A5FCD', - 'royalblue4' : '#27408B', - 'saddlebrown' : '#8B4513', - 'salmon' : '#FA8072', - 'salmon1' : '#FF8C69', - 'salmon2' : '#EE8262', - 'salmon3' : '#CD7054', - 'salmon4' : '#8B4C39', - 'sandybrown' : '#F4A460', - 'seagreen' : '#2E8B57', - 'seagreen1' : '#54FF9F', - 'seagreen2' : '#4EEE94', - 'seagreen3' : '#43CD80', - 'seagreen4' : '#2E8B57', - 'seashell' : '#FFF5EE', - 'seashell1' : '#FFF5EE', - 'seashell2' : '#EEE5DE', - 'seashell3' : '#CDC5BF', - 'seashell4' : '#8B8682', - 'sienna' : '#A0522D', - 'sienna1' : '#FF8247', - 'sienna2' : '#EE7942', - 'sienna3' : '#CD6839', - 'sienna4' : '#8B4726', - 'silver' : '#C0C0C0', - 'skyblue' : '#87CEEB', - 'skyblue1' : '#87CEFF', - 'skyblue2' : '#7EC0EE', - 'skyblue3' : '#6CA6CD', - 'skyblue4' : '#4A708B', - 'slateblue' : '#6A5ACD', - 'slateblue1' : '#836FFF', - 'slateblue2' : '#7A67EE', - 'slateblue3' : '#6959CD', - 'slateblue4' : '#473C8B', - 'slategray' : '#708090', - 'slategray1' : '#C6E2FF', - 'slategray2' : '#B9D3EE', - 'slategray3' : '#9FB6CD', - 'slategray4' : '#6C7B8B', - 'slategrey' : '#708090', - 'snow' : '#FFFAFA', - 'snow1' : '#FFFAFA', - 'snow2' : '#EEE9E9', - 'snow3' : '#CDC9C9', - 'snow4' : '#8B8989', - 'springgreen' : '#00FF7F', - 'springgreen1' : '#00FF7F', - 'springgreen2' : '#00EE76', - 'springgreen3' : '#00CD66', - 'springgreen4' : '#008B45', - 'steelblue' : '#4682B4', - 'steelblue1' : '#63B8FF', - 'steelblue2' : '#5CACEE', - 'steelblue3' : '#4F94CD', - 'steelblue4' : '#36648B', - 'tan' : '#D2B48C', - 'tan1' : '#FFA54F', - 'tan2' : '#EE9A49', - 'tan3' : '#CD853F', - 'tan4' : '#8B5A2B', - 'teal' : '#008080', - 'thistle' : '#D8BFD8', - 'thistle1' : '#FFE1FF', - 'thistle2' : '#EED2EE', - 'thistle3' : '#CDB5CD', - 'thistle4' : '#8B7B8B', - 'tomato' : '#FF6347', - 'tomato1' : '#FF6347', - 'tomato2' : '#EE5C42', - 'tomato3' : '#CD4F39', - 'tomato4' : '#8B3626', - 'turquoise' : '#40E0D0', - 'turquoise1' : '#00F5FF', - 'turquoise2' : '#00E5EE', - 'turquoise3' : '#00C5CD', - 'turquoise4' : '#00868B', - 'violet' : '#EE82EE', - 'violetred' : '#D02090', - 'violetred1' : '#FF3E96', - 'violetred2' : '#EE3A8C', - 'violetred3' : '#CD3278', - 'violetred4' : '#8B2252', - 'webgray' : '#808080', - 'webgreen' : '#008000', - 'webgrey' : '#808080', - 'webmaroon' : '#800000', - 'webpurple' : '#800080', - 'wheat' : '#F5DEB3', - 'wheat1' : '#FFE7BA', - 'wheat2' : '#EED8AE', - 'wheat3' : '#CDBA96', - 'wheat4' : '#8B7E66', - 'white' : '#FFFFFF', - 'whitesmoke' : '#F5F5F5', - 'x11gray' : '#BEBEBE', - 'x11green' : '#00FF00', - 'x11grey' : '#BEBEBE', - 'x11maroon' : '#B03060', - 'x11purple' : '#A020F0', - 'yellow' : '#FFFF00', - 'yellow1' : '#FFFF00', - 'yellow2' : '#EEEE00', - 'yellow3' : '#CDCD00', - 'yellow4' : '#8B8B00', - 'yellowgreen' : '#9ACD32' - }; - - return ColorScheme; - -}]); diff --git a/guacamole/src/main/frontend/src/app/form/types/FieldType.js b/guacamole/src/main/frontend/src/app/form/types/FieldType.js deleted file mode 100644 index 386d623efa..0000000000 --- a/guacamole/src/main/frontend/src/app/form/types/FieldType.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the FieldType class. - */ -angular.module('form').factory('FieldType', [function defineFieldType() { - - /** - * The object used by the formService for describing field types. - * - * @constructor - * @param {FieldType|Object} [template={}] - * The object whose properties should be copied within the new - * FieldType. - */ - var FieldType = function FieldType(template) { - - // Use empty object by default - template = template || {}; - - /** - * The raw HTML of the template that should be injected into the DOM of - * a form using this field type. If provided, this will be used instead - * of templateUrl. - * - * @type String - */ - this.template = template.template; - - /** - * The URL of the template that should be injected into the DOM of a - * form using this field type. This property will be ignored if a raw - * HTML template is supplied via the template property. - * - * @type String - */ - this.templateUrl = template.templateUrl; - - /** - * The name of the AngularJS module defining the controller for this - * field type. This is optional, as not all field types will need - * controllers. - * - * @type String - */ - this.module = template.module; - - /** - * The name of the controller for this field type. This is optional, as - * not all field types will need controllers. If a controller is - * specified, it will receive the following properties on the scope: - * - * namespace: - * A String which defines the unique namespace associated the - * translation strings used by the form using a field of this type. - * - * field: - * The Field object that is being rendered, representing a field of - * this type. - * - * model: - * The current String value of the field, if any. - * - * @type String - */ - this.controller = template.controller; - - }; - - return FieldType; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/groupList/directives/guacGroupList.js b/guacamole/src/main/frontend/src/app/groupList/directives/guacGroupList.js deleted file mode 100644 index 16ff9ddc0f..0000000000 --- a/guacamole/src/main/frontend/src/app/groupList/directives/guacGroupList.js +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which displays the contents of a connection group within an - * automatically-paginated view. - */ -angular.module('groupList').directive('guacGroupList', [function guacGroupList() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The connection groups to display as a map of data source - * identifier to corresponding root group. - * - * @type Object. - */ - connectionGroups : '=', - - /** - * Arbitrary object which shall be made available to the connection - * and connection group templates within the scope as - * context. - * - * @type Object - */ - context : '=', - - /** - * The map of @link{GroupListItem} type to the URL or ID of the - * Angular template to use when rendering a @link{GroupListItem} of - * that type. The @link{GroupListItem} itself will be within the - * scope of the template as item, and the arbitrary - * context object, if any, will be exposed as context. - * If the template for a type is omitted, items of that type will - * not be rendered. All standard types are defined by - * @link{GroupListItem.Type}, but use of custom types is legal. - * - * @type Object. - */ - templates : '=', - - /** - * Whether the root of the connection group hierarchy given should - * be shown. If false (the default), only the descendants of the - * given connection group will be listed. - * - * @type Boolean - */ - showRootGroup : '=', - - /** - * The maximum number of connections or groups to show per page. - * - * @type Number - */ - pageSize : '=', - - /** - * A callback which accepts an array of GroupListItems as its sole - * parameter. If provided, the callback will be invoked whenever an - * array of root-level GroupListItems is about to be rendered. - * Changes may be made by this function to that array or to the - * GroupListItems themselves. - * - * @type Function - */ - decorator : '=' - - }, - - templateUrl: 'app/groupList/templates/guacGroupList.html', - controller: ['$scope', '$injector', function guacGroupListController($scope, $injector) { - - // Required services - var activeConnectionService = $injector.get('activeConnectionService'); - var dataSourceService = $injector.get('dataSourceService'); - var requestService = $injector.get('requestService'); - - // Required types - var GroupListItem = $injector.get('GroupListItem'); - - /** - * Map of data source identifier to the number of active - * connections associated with a given connection identifier. - * If this information is unknown, or there are no active - * connections for a given identifier, no number will be stored. - * - * @type Object.> - */ - var connectionCount = {}; - - /** - * A list of all items which should appear at the root level. As - * connections and connection groups from multiple data sources may - * be included in a guacGroupList, there may be multiple root - * items, even if the root connection group is shown. - * - * @type GroupListItem[] - */ - $scope.rootItems = []; - - /** - * Returns the number of active usages of a given connection. - * - * @param {String} dataSource - * The identifier of the data source containing the given - * connection. - * - * @param {Connection} connection - * The connection whose active connections should be counted. - * - * @returns {Number} - * The number of currently-active usages of the given - * connection. - */ - var countActiveConnections = function countActiveConnections(dataSource, connection) { - return connectionCount[dataSource][connection.identifier]; - }; - - /** - * Returns whether a @link{GroupListItem} of the given type can be - * displayed. If there is no template associated with the given - * type, then a @link{GroupListItem} of that type cannot be - * displayed. - * - * @param {String} type - * The type to check. - * - * @returns {Boolean} - * true if the given @link{GroupListItem} type can be displayed, - * false otherwise. - */ - $scope.isVisible = function isVisible(type) { - return !!$scope.templates[type]; - }; - - // Set contents whenever the connection group is assigned or changed - $scope.$watch('connectionGroups', function setContents(connectionGroups) { - - // Reset stored data - var dataSources = []; - $scope.rootItems = []; - connectionCount = {}; - - // If connection groups are given, add them to the interface - if (connectionGroups) { - - // Add each provided connection group - angular.forEach(connectionGroups, function addConnectionGroup(connectionGroup, dataSource) { - - var rootItem; - - // Prepare data source for active connection counting - dataSources.push(dataSource); - connectionCount[dataSource] = {}; - - // If the provided connection group is already a - // GroupListItem, no need to create a new item - if (connectionGroup instanceof GroupListItem) - rootItem = connectionGroup; - - // Create root item for current connection group - else - rootItem = GroupListItem.fromConnectionGroup(dataSource, connectionGroup, - $scope.isVisible(GroupListItem.Type.CONNECTION), - $scope.isVisible(GroupListItem.Type.SHARING_PROFILE), - countActiveConnections); - - // If root group is to be shown, add it as a root item - if ($scope.showRootGroup) - $scope.rootItems.push(rootItem); - - // Otherwise, add its children as root items - else { - angular.forEach(rootItem.children, function addRootItem(child) { - $scope.rootItems.push(child); - }); - } - - }); - - // Count active connections by connection identifier - dataSourceService.apply( - activeConnectionService.getActiveConnections, - dataSources - ) - .then(function activeConnectionsRetrieved(activeConnectionMap) { - - // Within each data source, count each active connection by identifier - angular.forEach(activeConnectionMap, function addActiveConnections(activeConnections, dataSource) { - angular.forEach(activeConnections, function addActiveConnection(activeConnection) { - - // If counter already exists, increment - var identifier = activeConnection.connectionIdentifier; - if (connectionCount[dataSource][identifier]) - connectionCount[dataSource][identifier]++; - - // Otherwise, initialize counter to 1 - else - connectionCount[dataSource][identifier] = 1; - - }); - }); - - }, requestService.DIE); - - } - - // Invoke item decorator, if provided - if ($scope.decorator) - $scope.decorator($scope.rootItems); - - }); - - /** - * Toggle the open/closed status of a group list item. - * - * @param {GroupListItem} groupListItem - * The list item to expand, which should represent a - * connection group. - */ - $scope.toggleExpanded = function toggleExpanded(groupListItem) { - groupListItem.expanded = !groupListItem.expanded; - }; - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/groupList/directives/guacGroupListFilter.js b/guacamole/src/main/frontend/src/app/groupList/directives/guacGroupListFilter.js deleted file mode 100644 index ad1bd43106..0000000000 --- a/guacamole/src/main/frontend/src/app/groupList/directives/guacGroupListFilter.js +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides a filtering text input field which automatically - * produces a filtered subset of the given connection groups. - */ -angular.module('groupList').directive('guacGroupListFilter', [function guacGroupListFilter() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The property to which a subset of the provided map of connection - * groups will be assigned. The type of each item within the - * original map is preserved within the filtered map. - * - * @type Object. - */ - filteredConnectionGroups : '=', - - /** - * The placeholder text to display within the filter input field - * when no filter has been provided. - * - * @type String - */ - placeholder : '&', - - /** - * The connection groups to filter, as a map of data source - * identifier to corresponding root group. A subset of this map - * will be exposed as filteredConnectionGroups. - * - * @type Object. - */ - connectionGroups : '&', - - /** - * An array of expressions to filter against for each connection in - * the hierarchy of connections and groups in the provided map. - * These expressions must be Angular expressions which resolve to - * properties on the connections in the provided map. - * - * @type String[] - */ - connectionProperties : '&', - - /** - * An array of expressions to filter against for each connection group - * in the hierarchy of connections and groups in the provided map. - * These expressions must be Angular expressions which resolve to - * properties on the connection groups in the provided map. - * - * @type String[] - */ - connectionGroupProperties : '&' - - }, - - templateUrl: 'app/groupList/templates/guacGroupListFilter.html', - controller: ['$scope', '$injector', function guacGroupListFilterController($scope, $injector) { - - // Required types - var ConnectionGroup = $injector.get('ConnectionGroup'); - var FilterPattern = $injector.get('FilterPattern'); - var GroupListItem = $injector.get('GroupListItem'); - - /** - * The pattern object to use when filtering connections. - * - * @type FilterPattern - */ - var connectionFilterPattern = new FilterPattern($scope.connectionProperties()); - - /** - * The pattern object to use when filtering connection groups. - * - * @type FilterPattern - */ - var connectionGroupFilterPattern = new FilterPattern($scope.connectionGroupProperties()); - - /** - * The filter search string to use to restrict the displayed - * connection groups. - * - * @type String - */ - $scope.searchString = null; - - /** - * Flattens the connection group hierarchy of the given connection - * group such that all descendants are copied as immediate - * children. The hierarchy of nested connection groups is otherwise - * completely preserved. A connection or connection group nested - * two or more levels deep within the hierarchy will thus appear - * within the returned connection group in two places: in its - * original location AND as an immediate child. - * - * @param {ConnectionGroup} connectionGroup - * The connection group whose descendents should be copied as - * first-level children. - * - * @returns {ConnectionGroup} - * A new connection group completely identical to the provided - * connection group, except that absolutely all descendents - * have been copied into the first level of children. - */ - var flattenConnectionGroup = function flattenConnectionGroup(connectionGroup) { - - // Replace connection group with shallow copy - connectionGroup = new ConnectionGroup(connectionGroup); - - // Ensure child arrays are defined and independent copies - connectionGroup.childConnections = angular.copy(connectionGroup.childConnections) || []; - connectionGroup.childConnectionGroups = angular.copy(connectionGroup.childConnectionGroups) || []; - - // Flatten all children to the top-level group - angular.forEach(connectionGroup.childConnectionGroups, function flattenChild(child) { - - var flattenedChild = flattenConnectionGroup(child); - - // Merge all child connections - Array.prototype.push.apply( - connectionGroup.childConnections, - flattenedChild.childConnections - ); - - // Merge all child connection groups - Array.prototype.push.apply( - connectionGroup.childConnectionGroups, - flattenedChild.childConnectionGroups - ); - - }); - - return connectionGroup; - - }; - - /** - * Flattens the connection group hierarchy of the given - * GroupListItem such that all descendants are copied as immediate - * children. The hierarchy of nested items is otherwise completely - * preserved. A connection or connection group nested two or more - * levels deep within the hierarchy will thus appear within the - * returned item in two places: in its original location AND as an - * immediate child. - * - * @param {GroupListItem} item - * The GroupListItem whose descendents should be copied as - * first-level children. - * - * @returns {GroupListItem} - * A new GroupListItem completely identical to the provided - * item, except that absolutely all descendents have been - * copied into the first level of children. - */ - var flattenGroupListItem = function flattenGroupListItem(item) { - - // Replace item with shallow copy - item = new GroupListItem(item); - - // Ensure children are defined and independent copies - item.children = angular.copy(item.children) || []; - - // Flatten all children to the top-level group - angular.forEach(item.children, function flattenChild(child) { - if (child.type === GroupListItem.Type.CONNECTION_GROUP) { - - var flattenedChild = flattenGroupListItem(child); - - // Merge all children - Array.prototype.push.apply( - item.children, - flattenedChild.children - ); - - } - }); - - return item; - - }; - - /** - * Replaces the set of children within the given GroupListItem such - * that only children which match the filter predicate for the - * current search string are present. - * - * @param {GroupListItem} item - * The GroupListItem whose children should be filtered. - */ - var filterGroupListItem = function filterGroupListItem(item) { - item.children = item.children.filter(function applyFilterPattern(child) { - - // Filter connections and connection groups by - // given pattern - switch (child.type) { - - case GroupListItem.Type.CONNECTION: - return connectionFilterPattern.predicate(child.wrappedItem); - - case GroupListItem.Type.CONNECTION_GROUP: - return connectionGroupFilterPattern.predicate(child.wrappedItem); - - } - - // Include all other children - return true; - - }); - }; - - /** - * Replaces the set of child connections and connection groups - * within the given connection group such that only children which - * match the filter predicate for the current search string are - * present. - * - * @param {ConnectionGroup} connectionGroup - * The connection group whose children should be filtered. - */ - var filterConnectionGroup = function filterConnectionGroup(connectionGroup) { - connectionGroup.childConnections = connectionGroup.childConnections.filter(connectionFilterPattern.predicate); - connectionGroup.childConnectionGroups = connectionGroup.childConnectionGroups.filter(connectionGroupFilterPattern.predicate); - }; - - /** - * Applies the current filter predicate, filtering all provided - * connection groups and storing the result in - * filteredConnectionGroups. - */ - var updateFilteredConnectionGroups = function updateFilteredConnectionGroups() { - - // Do not apply any filtering (and do not flatten) if no - // search string is provided - if (!$scope.searchString) { - $scope.filteredConnectionGroups = $scope.connectionGroups() || {}; - return; - } - - // Clear all current filtered groups - $scope.filteredConnectionGroups = {}; - - // Re-filter any provided groups - var connectionGroups = $scope.connectionGroups(); - if (connectionGroups) { - angular.forEach(connectionGroups, function updateFilteredConnectionGroup(connectionGroup, dataSource) { - - var filteredGroup; - - // Flatten and filter depending on type - if (connectionGroup instanceof GroupListItem) { - filteredGroup = flattenGroupListItem(connectionGroup); - filterGroupListItem(filteredGroup); - } - else { - filteredGroup = flattenConnectionGroup(connectionGroup); - filterConnectionGroup(filteredGroup); - } - - // Store now-filtered root - $scope.filteredConnectionGroups[dataSource] = filteredGroup; - - }); - } - - }; - - // Recompile and refilter when pattern is changed - $scope.$watch('searchString', function searchStringChanged(searchString) { - connectionFilterPattern.compile(searchString); - connectionGroupFilterPattern.compile(searchString); - updateFilteredConnectionGroups(); - }); - - // Refilter when items change - $scope.$watchCollection($scope.connectionGroups, function itemsChanged() { - updateFilteredConnectionGroups(); - }); - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/groupList/groupListModule.js b/guacamole/src/main/frontend/src/app/groupList/groupListModule.js deleted file mode 100644 index eb37ac5c76..0000000000 --- a/guacamole/src/main/frontend/src/app/groupList/groupListModule.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for displaying the contents of a connection group, allowing the user - * to select individual connections or groups. - */ -angular.module('groupList', [ - 'navigation', - 'list', - 'rest' -]); diff --git a/guacamole/src/main/frontend/src/app/groupList/templates/guacGroupList.html b/guacamole/src/main/frontend/src/app/groupList/templates/guacGroupList.html deleted file mode 100644 index e76f2e394d..0000000000 --- a/guacamole/src/main/frontend/src/app/groupList/templates/guacGroupList.html +++ /dev/null @@ -1,41 +0,0 @@ -
    - - - - -
    -
    -
    - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/groupList/templates/guacGroupListFilter.html b/guacamole/src/main/frontend/src/app/groupList/templates/guacGroupListFilter.html deleted file mode 100644 index bbaec1c885..0000000000 --- a/guacamole/src/main/frontend/src/app/groupList/templates/guacGroupListFilter.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/groupList/types/GroupListItem.js b/guacamole/src/main/frontend/src/app/groupList/types/GroupListItem.js deleted file mode 100644 index 2255cb4c9f..0000000000 --- a/guacamole/src/main/frontend/src/app/groupList/types/GroupListItem.js +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the GroupListItem class definition. - */ -angular.module('groupList').factory('GroupListItem', ['$injector', function defineGroupListItem($injector) { - - // Required types - var ClientIdentifier = $injector.get('ClientIdentifier'); - var ConnectionGroup = $injector.get('ConnectionGroup'); - - /** - * Creates a new GroupListItem, initializing the properties of that - * GroupListItem with the corresponding properties of the given template. - * - * @constructor - * @param {GroupListItem|Object} [template={}] - * The object whose properties should be copied within the new - * GroupListItem. - */ - var GroupListItem = function GroupListItem(template) { - - // Use empty object by default - template = template || {}; - - /** - * The identifier of the data source associated with the connection, - * connection group, or sharing profile this item represents. - * - * @type String - */ - this.dataSource = template.dataSource; - - /** - * The unique identifier associated with the connection, connection - * group, or sharing profile this item represents. - * - * @type String - */ - this.identifier = template.identifier; - - /** - * The human-readable display name of this item. - * - * @type String - */ - this.name = template.name; - - /** - * The unique identifier of the protocol, if this item represents a - * connection. If this item does not represent a connection, this - * property is not applicable. - * - * @type String - */ - this.protocol = template.protocol; - - /** - * All children items of this item. If this item contains no children, - * this will be an empty array. - * - * @type GroupListItem[] - */ - this.children = template.children || []; - - /** - * The type of object represented by this GroupListItem. Standard types - * are defined by GroupListItem.Type, but custom types are also legal. - * - * @type String - */ - this.type = template.type; - - /** - * Whether this item, or items of the same type, can contain children. - * This may be true even if this particular item does not presently - * contain children. - * - * @type Boolean - */ - this.expandable = template.expandable; - - /** - * Whether this item represents a balancing connection group. - * - * @type Boolean - */ - this.balancing = template.balancing; - - /** - * Whether the children items should be displayed. - * - * @type Boolean - */ - this.expanded = template.expanded; - - /** - * Returns the number of currently active users for this connection, - * connection group, or sharing profile, if known. If unknown, null may - * be returned. - * - * @returns {Number} - * The number of currently active users for this connection, - * connection group, or sharing profile. - */ - this.getActiveConnections = template.getActiveConnections || (function getActiveConnections() { - return null; - }); - - /** - * Returns the unique string identifier that must be used when - * connecting to a connection or connection group represented by this - * GroupListItem. - * - * @returns {String} - * The client identifier associated with the connection or - * connection group represented by this GroupListItem, or null if - * this GroupListItem cannot have an associated client identifier. - */ - this.getClientIdentifier = template.getClientIdentifier || function getClientIdentifier() { - - // If the item is a connection, generate a connection identifier - if (this.type === GroupListItem.Type.CONNECTION) - return ClientIdentifier.toString({ - dataSource : this.dataSource, - type : ClientIdentifier.Types.CONNECTION, - id : this.identifier - }); - - // If the item is a connection group, generate a connection group identifier - if (this.type === GroupListItem.Type.CONNECTION_GROUP && this.balancing) - return ClientIdentifier.toString({ - dataSource : this.dataSource, - type : ClientIdentifier.Types.CONNECTION_GROUP, - id : this.identifier - }); - - // Otherwise, no such identifier can exist - return null; - - }; - - /** - * Returns the relative URL of the client page that connects to the - * connection or connection group represented by this GroupListItem. - * - * @returns {String} - * The relative URL of the client page that connects to the - * connection or connection group represented by this GroupListItem, - * or null if this GroupListItem cannot be connected to. - */ - this.getClientURL = template.getClientURL || function getClientURL() { - - // There is a client page for this item only if it has an - // associated client identifier - var identifier = this.getClientIdentifier(); - if (identifier) - return '#/client/' + encodeURIComponent(identifier); - - return null; - - }; - - /** - * The connection, connection group, or sharing profile whose data is - * exposed within this GroupListItem. If the type of this GroupListItem - * is not one of the types defined by GroupListItem.Type, then this - * value may be anything. - * - * @type Connection|ConnectionGroup|SharingProfile|* - */ - this.wrappedItem = template.wrappedItem; - - /** - * The sorting weight to apply when displaying this GroupListItem. This - * weight is relative only to other sorting weights. If two items have - * the same weight, they will be sorted based on their names. - * - * @type Number - * @default 0 - */ - this.weight = template.weight || 0; - - }; - - /** - * Creates a new GroupListItem using the contents of the given connection. - * - * @param {String} dataSource - * The identifier of the data source containing the given connection - * group. - * - * @param {ConnectionGroup} connection - * The connection whose contents should be represented by the new - * GroupListItem. - * - * @param {Boolean} [includeSharingProfiles=true] - * Whether sharing profiles should be included in the contents of the - * resulting GroupListItem. By default, sharing profiles are included. - * - * @param {Function} [countActiveConnections] - * A getter which returns the current number of active connections for - * the given connection. If omitted, the number of active connections - * known at the time this function was called is used instead. This - * function will be passed, in order, the data source identifier and - * the connection in question. - * - * @returns {GroupListItem} - * A new GroupListItem which represents the given connection. - */ - GroupListItem.fromConnection = function fromConnection(dataSource, - connection, includeSharingProfiles, countActiveConnections) { - - var children = []; - - // Add any sharing profiles - if (connection.sharingProfiles && includeSharingProfiles !== false) { - connection.sharingProfiles.forEach(function addSharingProfile(child) { - children.push(GroupListItem.fromSharingProfile(dataSource, - child, countActiveConnections)); - }); - } - - // Return item representing the given connection - return new GroupListItem({ - - // Identifying information - name : connection.name, - identifier : connection.identifier, - protocol : connection.protocol, - dataSource : dataSource, - - // Type information - expandable : includeSharingProfiles !== false, - type : GroupListItem.Type.CONNECTION, - - // Already-converted children - children : children, - - // Count of currently active connections using this connection - getActiveConnections : function getActiveConnections() { - - // Use getter, if provided - if (countActiveConnections) - return countActiveConnections(dataSource, connection); - - return connection.activeConnections; - - }, - - // Wrapped item - wrappedItem : connection - - }); - - }; - - /** - * Creates a new GroupListItem using the contents and descendants of the - * given connection group. - * - * @param {String} dataSource - * The identifier of the data source containing the given connection - * group. - * - * @param {ConnectionGroup} connectionGroup - * The connection group whose contents and descendants should be - * represented by the new GroupListItem and its descendants. - * - * @param {Boolean} [includeConnections=true] - * Whether connections should be included in the contents of the - * resulting GroupListItem. By default, connections are included. - * - * @param {Boolean} [includeSharingProfiles=true] - * Whether sharing profiles should be included in the contents of the - * resulting GroupListItem. By default, sharing profiles are included. - * - * @param {Function} [countActiveConnections] - * A getter which returns the current number of active connections for - * the given connection. If omitted, the number of active connections - * known at the time this function was called is used instead. This - * function will be passed, in order, the data source identifier and - * the connection group in question. - * - * @param {Function} [countActiveConnectionGroups] - * A getter which returns the current number of active connections for - * the given connection group. If omitted, the number of active - * connections known at the time this function was called is used - * instead. This function will be passed, in order, the data source - * identifier and the connection group in question. - * - * @returns {GroupListItem} - * A new GroupListItem which represents the given connection group, - * including all descendants. - */ - GroupListItem.fromConnectionGroup = function fromConnectionGroup(dataSource, - connectionGroup, includeConnections, includeSharingProfiles, - countActiveConnections, countActiveConnectionGroups) { - - var children = []; - - // Add any child connections - if (connectionGroup.childConnections && includeConnections !== false) { - connectionGroup.childConnections.forEach(function addChildConnection(child) { - children.push(GroupListItem.fromConnection(dataSource, child, - includeSharingProfiles, countActiveConnections)); - }); - } - - // Add any child groups - if (connectionGroup.childConnectionGroups) { - connectionGroup.childConnectionGroups.forEach(function addChildGroup(child) { - children.push(GroupListItem.fromConnectionGroup(dataSource, - child, includeConnections, includeSharingProfiles, - countActiveConnections, countActiveConnectionGroups)); - }); - } - - // Return item representing the given connection group - return new GroupListItem({ - - // Identifying information - name : connectionGroup.name, - identifier : connectionGroup.identifier, - dataSource : dataSource, - - // Type information - type : GroupListItem.Type.CONNECTION_GROUP, - balancing : connectionGroup.type === ConnectionGroup.Type.BALANCING, - expandable : true, - - // Already-converted children - children : children, - - // Count of currently active connection groups using this connection - getActiveConnections : function getActiveConnections() { - - // Use getter, if provided - if (countActiveConnectionGroups) - return countActiveConnectionGroups(dataSource, connectionGroup); - - return connectionGroup.activeConnections; - - }, - - - // Wrapped item - wrappedItem : connectionGroup - - }); - - }; - - /** - * Creates a new GroupListItem using the contents of the given sharing - * profile. - * - * @param {String} dataSource - * The identifier of the data source containing the given sharing - * profile. - * - * @param {SharingProfile} sharingProfile - * The sharing profile whose contents should be represented by the new - * GroupListItem. - * - * @returns {GroupListItem} - * A new GroupListItem which represents the given sharing profile. - */ - GroupListItem.fromSharingProfile = function fromSharingProfile(dataSource, - sharingProfile) { - - // Return item representing the given sharing profile - return new GroupListItem({ - - // Identifying information - name : sharingProfile.name, - identifier : sharingProfile.identifier, - dataSource : dataSource, - - // Type information - type : GroupListItem.Type.SHARING_PROFILE, - - // Wrapped item - wrappedItem : sharingProfile - - }); - - }; - - /** - * All pre-defined types of GroupListItems. Note that, while these are the - * standard types supported by GroupListItem and the related guacGroupList - * directive, the type string is otherwise arbitrary and custom types are - * legal. - * - * @type Object. - */ - GroupListItem.Type = { - - /** - * The standard type string of a GroupListItem which represents a - * connection. - * - * @type String - */ - CONNECTION : 'connection', - - /** - * The standard type string of a GroupListItem which represents a - * connection group. - * - * @type String - */ - CONNECTION_GROUP : 'connection-group', - - /** - * The standard type string of a GroupListItem which represents a - * sharing profile. - * - * @type String - */ - SHARING_PROFILE : 'sharing-profile' - - }; - - return GroupListItem; - -}]); diff --git a/guacamole/src/main/frontend/src/app/history/historyModule.js b/guacamole/src/main/frontend/src/app/history/historyModule.js deleted file mode 100644 index c7ec7e103e..0000000000 --- a/guacamole/src/main/frontend/src/app/history/historyModule.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for code relating to connection history. - */ -angular.module('history', [ - 'storage' -]); diff --git a/guacamole/src/main/frontend/src/app/history/services/guacHistory.js b/guacamole/src/main/frontend/src/app/history/services/guacHistory.js deleted file mode 100644 index d5dcbfe071..0000000000 --- a/guacamole/src/main/frontend/src/app/history/services/guacHistory.js +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for reading and manipulating the Guacamole connection history. - */ -angular.module('history').factory('guacHistory', ['$injector', - function guacHistory($injector) { - - // Required types - var HistoryEntry = $injector.get('HistoryEntry'); - - // Required services - var localStorageService = $injector.get('localStorageService'); - var preferenceService = $injector.get('preferenceService'); - - var service = {}; - - // The parameter name for getting the history from local storage - var GUAC_HISTORY_STORAGE_KEY = "GUAC_HISTORY"; - - /** - * The top few recent connections, sorted in order of most recent access. - * - * @type HistoryEntry[] - */ - service.recentConnections = []; - - /** - * Remove from the list of connection history the item having the given - * identfier. - * - * @param {String} id - * The identifier of the item to remove from the history list. - * - * @returns {boolean} - * True if the removal was successful, otherwise false. - */ - service.removeEntry = function removeEntry(id) { - - return _.remove(service.recentConnections, entry => entry.id === id).length > 0; - - }; - - /** - * Updates the thumbnail and access time of the history entry for the - * connection with the given ID. - * - * @param {String} id - * The ID of the connection whose history entry should be updated. - * - * @param {String} thumbnail - * The URL of the thumbnail image to associate with the history entry. - */ - service.updateThumbnail = function(id, thumbnail) { - - var i; - - // Remove any existing entry for this connection - for (i=0; i < service.recentConnections.length; i++) { - if (service.recentConnections[i].id === id) { - service.recentConnections.splice(i, 1); - break; - } - } - - // Store new entry in history - service.recentConnections.unshift(new HistoryEntry( - id, - thumbnail, - new Date().getTime() - )); - - // Truncate history to ideal length - if (service.recentConnections.length > preferenceService.preferences.numberOfRecentConnections) - service.recentConnections.length = preferenceService.preferences.numberOfRecentConnections; - - // Save updated history - localStorageService.setItem(GUAC_HISTORY_STORAGE_KEY, service.recentConnections); - - }; - - // Init stored connection history from localStorage - var storedHistory = localStorageService.getItem(GUAC_HISTORY_STORAGE_KEY) || []; - if (storedHistory instanceof Array) - service.recentConnections = storedHistory; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/history/types/HistoryEntry.js b/guacamole/src/main/frontend/src/app/history/types/HistoryEntry.js deleted file mode 100644 index 5942086674..0000000000 --- a/guacamole/src/main/frontend/src/app/history/types/HistoryEntry.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the HistoryEntry class used by the guacHistory service. - */ -angular.module('history').factory('HistoryEntry', [function defineHistoryEntry() { - - /** - * A single entry in the connection history. - * - * @constructor - * @param {String} id The ID of the connection. - * - * @param {String} thumbnail - * The URL of the thumbnail to use to represent the connection. - */ - var HistoryEntry = function HistoryEntry(id, thumbnail) { - - /** - * The ID of the connection associated with this history entry, - * including type prefix. - */ - this.id = id; - - /** - * The thumbnail associated with the connection associated with this - * history entry. - */ - this.thumbnail = thumbnail; - - }; - - return HistoryEntry; - -}]); diff --git a/guacamole/src/main/frontend/src/app/home/controllers/homeController.js b/guacamole/src/main/frontend/src/app/home/controllers/homeController.js deleted file mode 100644 index 8d84b49e1a..0000000000 --- a/guacamole/src/main/frontend/src/app/home/controllers/homeController.js +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for the home page. - */ -angular.module('home').controller('homeController', ['$scope', '$injector', - function homeController($scope, $injector) { - - // Get required types - var ConnectionGroup = $injector.get('ConnectionGroup'); - var GroupListItem = $injector.get('GroupListItem'); - - // Get required services - var authenticationService = $injector.get('authenticationService'); - var connectionGroupService = $injector.get('connectionGroupService'); - var dataSourceService = $injector.get('dataSourceService'); - var preferenceService = $injector.get('preferenceService'); - var requestService = $injector.get('requestService'); - - /** - * Map of data source identifier to the root connection group of that data - * source, or null if the connection group hierarchy has not yet been - * loaded. - * - * @type Object. - */ - $scope.rootConnectionGroups = null; - - /** - * Array of all connection properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionProperties = [ - 'name' - ]; - - /** - * Array of all connection group properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionGroupProperties = [ - 'name' - ]; - - /** - * Returns whether the "Recent Connections" section should be displayed on - * the home screen. - * - * @returns {!boolean} - * true if recent connections should be displayed on the home screen, - * false otherwise. - */ - $scope.isRecentConnectionsVisible = function isRecentConnectionsVisible() { - return preferenceService.preferences.showRecentConnections; - }; - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface to be - * useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.rootConnectionGroups !== null; - - }; - - // Retrieve root groups and all descendants - dataSourceService.apply( - connectionGroupService.getConnectionGroupTree, - authenticationService.getAvailableDataSources(), - ConnectionGroup.ROOT_IDENTIFIER - ) - .then(function rootGroupsRetrieved(rootConnectionGroups) { - $scope.rootConnectionGroups = rootConnectionGroups; - }, requestService.DIE); - -}]); diff --git a/guacamole/src/main/frontend/src/app/home/directives/guacRecentConnections.js b/guacamole/src/main/frontend/src/app/home/directives/guacRecentConnections.js deleted file mode 100644 index 4be6065248..0000000000 --- a/guacamole/src/main/frontend/src/app/home/directives/guacRecentConnections.js +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which displays the recently-accessed connections nested beneath - * each of the given connection groups. - */ -angular.module('home').directive('guacRecentConnections', [function guacRecentConnections() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The root connection groups to display, and all visible - * descendants, as a map of data source identifier to the root - * connection group within that data source. Recent connections - * will only be shown if they exist within this hierarchy, - * regardless of their existence within the history. - * - * @type Object. - */ - rootGroups : '=' - - }, - - templateUrl: 'app/home/templates/guacRecentConnections.html', - controller: ['$scope', '$injector', function guacRecentConnectionsController($scope, $injector) { - - // Required types - var ClientIdentifier = $injector.get('ClientIdentifier'); - var RecentConnection = $injector.get('RecentConnection'); - - // Required services - var guacHistory = $injector.get('guacHistory'); - var preferenceService = $injector.get('preferenceService'); - - /** - * Array of all known and visible recently-used connections. - * - * @type RecentConnection[] - */ - $scope.recentConnections = []; - - /** - * Remove the connection from the recent connection list having the - * given identifier. - * - * @param {!RecentConnection} recentConnection - * The recent connection to remove from the history list. - * - * @returns {boolean} - * True if the removal was successful, otherwise false. - */ - $scope.removeRecentConnection = function removeRecentConnection(recentConnection) { - return ($scope.recentConnections.splice($scope.recentConnections.indexOf(recentConnection), 1) - && guacHistory.removeEntry(recentConnection.entry.id)); - }; - - /** - * Returns whether recent connections are available for display. - * - * @returns {!boolean} - * true if recent connections are present, false otherwise. - */ - $scope.hasRecentConnections = function hasRecentConnections() { - return !!$scope.recentConnections.length; - }; - - /** - * Map of all visible objects, connections or connection groups, by - * object identifier. - * - * @type Object. - */ - var visibleObjects = {}; - - /** - * Adds the given connection to the internal set of visible - * objects. - * - * @param {String} dataSource - * The identifier of the data source associated with the - * given connection group. - * - * @param {Connection} connection - * The connection to add to the internal set of visible objects. - */ - var addVisibleConnection = function addVisibleConnection(dataSource, connection) { - - // Add given connection to set of visible objects - visibleObjects[ClientIdentifier.toString({ - dataSource : dataSource, - type : ClientIdentifier.Types.CONNECTION, - id : connection.identifier - })] = connection; - - }; - - /** - * Adds the given connection group to the internal set of visible - * objects, along with any descendants. - * - * @param {String} dataSource - * The identifier of the data source associated with the - * given connection group. - * - * @param {ConnectionGroup} connectionGroup - * The connection group to add to the internal set of visible - * objects, along with any descendants. - */ - var addVisibleConnectionGroup = function addVisibleConnectionGroup(dataSource, connectionGroup) { - - // Add given connection group to set of visible objects - visibleObjects[ClientIdentifier.toString({ - dataSource : dataSource, - type : ClientIdentifier.Types.CONNECTION_GROUP, - id : connectionGroup.identifier - })] = connectionGroup; - - // Add all child connections - if (connectionGroup.childConnections) - connectionGroup.childConnections.forEach(function addChildConnection(child) { - addVisibleConnection(dataSource, child); - }); - - // Add all child connection groups - if (connectionGroup.childConnectionGroups) - connectionGroup.childConnectionGroups.forEach(function addChildConnectionGroup(child) { - addVisibleConnectionGroup(dataSource, child); - }); - - }; - - // Update visible objects when root groups are set - $scope.$watch("rootGroups", function setRootGroups(rootGroups) { - - // Clear connection arrays - $scope.recentConnections = []; - - // Produce collection of visible objects - visibleObjects = {}; - if (rootGroups) { - angular.forEach(rootGroups, function addConnectionGroup(rootGroup, dataSource) { - addVisibleConnectionGroup(dataSource, rootGroup); - }); - } - - // Add any recent connections that are visible - guacHistory.recentConnections.forEach(function addRecentConnection(historyEntry) { - - // Add recent connections for history entries with associated visible objects - if (historyEntry.id in visibleObjects) { - - var object = visibleObjects[historyEntry.id]; - $scope.recentConnections.push(new RecentConnection(object.name, historyEntry)); - - } - - }); - - }); // end rootGroup scope watch - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/home/homeModule.js b/guacamole/src/main/frontend/src/app/home/homeModule.js deleted file mode 100644 index 5d930dae9c..0000000000 --- a/guacamole/src/main/frontend/src/app/home/homeModule.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -angular.module('home', ['client', 'groupList', 'history', 'navigation', 'rest']); diff --git a/guacamole/src/main/frontend/src/app/home/styles/home.css b/guacamole/src/main/frontend/src/app/home/styles/home.css deleted file mode 100644 index 8ae0486ed6..0000000000 --- a/guacamole/src/main/frontend/src/app/home/styles/home.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.history-unavailable div.recent-connections { - display: none; -} - -div.recent-connections, -div.clipboardDiv, -div.settings, -div.all-connections { - margin: 1em; - padding: 0; -} - -.all-connections .list-buttons { - text-align: center; - padding: 0; -} - -div.recent-connections { - text-align: center; -} - -div.recent-connections div.connection { - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; - -khtml-border-radius: 0.5em; - border-radius: 0.5em; - display: inline-block; - padding: 1em; - margin: 1em; - text-align: center; - max-width: 75%; - overflow: hidden; - position: relative; -} - -a.home-connection, .empty.balancer a.home-connection-group { - display: block; -} - -/* Show only expand/collapse icon for connection groups on home screen ... */ - -.all-connections .connection-group > .caption .icon { - display: none; -} - -.all-connections .connection-group > .caption .icon.expand { - display: inline-block; -} - -/* ... except for empty balancing groups, which should be rendered as if they - * are connections. */ - -.all-connections .connection-group.empty.balancer > .caption .icon { - display: inline-block; -} - -.all-connections .connection-group.empty.balancer > .caption .icon.expand { - display: none; -} - -.recent-connections .connection .remove-recent { - visibility: hidden; -} - -.recent-connections .connection:hover .remove-recent { - visibility: visible; -} - -.recent-connections .connection .remove-recent::after { - content: ''; - display: block; - height: 100%; - width: 100%; - background-repeat: no-repeat; - background-size: contain; - background-position: center center; - background-image: url('images/x-black.svg'); -} - -.recent-connections .connection .remove-recent { - height: 1em; - width: 1em; - position: absolute; - top: 10px; - z-index: 10; - float: right; - right: 10px; - opacity: .2; -} - -.recent-connections .connection .remove-recent:hover { - opacity: 1.0; -} diff --git a/guacamole/src/main/frontend/src/app/home/templates/connection.html b/guacamole/src/main/frontend/src/app/home/templates/connection.html deleted file mode 100644 index 85a7f573b5..0000000000 --- a/guacamole/src/main/frontend/src/app/home/templates/connection.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - {{item.name}} - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/home/templates/connectionGroup.html b/guacamole/src/main/frontend/src/app/home/templates/connectionGroup.html deleted file mode 100644 index ba0a204ba1..0000000000 --- a/guacamole/src/main/frontend/src/app/home/templates/connectionGroup.html +++ /dev/null @@ -1,10 +0,0 @@ - - - -
    - - - {{item.name}} - -
    diff --git a/guacamole/src/main/frontend/src/app/home/templates/guacRecentConnections.html b/guacamole/src/main/frontend/src/app/home/templates/guacRecentConnections.html deleted file mode 100644 index 2d25bc1db8..0000000000 --- a/guacamole/src/main/frontend/src/app/home/templates/guacRecentConnections.html +++ /dev/null @@ -1,25 +0,0 @@ -
    - - -

    {{'HOME.INFO_NO_RECENT_CONNECTIONS' | translate}}

    - - - diff --git a/guacamole/src/main/frontend/src/app/home/templates/home.html b/guacamole/src/main/frontend/src/app/home/templates/home.html deleted file mode 100644 index 872ac98033..0000000000 --- a/guacamole/src/main/frontend/src/app/home/templates/home.html +++ /dev/null @@ -1,36 +0,0 @@ -
    - -
    - - -
    -

    {{'HOME.SECTION_HEADER_RECENT_CONNECTIONS' | translate}}

    - -
    - - - -
    -

    {{'HOME.SECTION_HEADER_ALL_CONNECTIONS' | translate}}

    - - -
    -
    - -
    - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/home/types/ActiveConnection.js b/guacamole/src/main/frontend/src/app/home/types/ActiveConnection.js deleted file mode 100644 index 3de16c9d54..0000000000 --- a/guacamole/src/main/frontend/src/app/home/types/ActiveConnection.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ActiveConnection class used by the guacRecentConnections - * directive. - */ -angular.module('home').factory('ActiveConnection', [function defineActiveConnection() { - - /** - * A recently-user connection, visible to the current user, with an - * associated history entry. - * - * @constructor - */ - var ActiveConnection = function ActiveConnection(name, client) { - - /** - * The human-readable name of this connection. - * - * @type String - */ - this.name = name; - - /** - * The client associated with this active connection. - * - * @type ManagedClient - */ - this.client = client; - - }; - - return ActiveConnection; - -}]); diff --git a/guacamole/src/main/frontend/src/app/home/types/RecentConnection.js b/guacamole/src/main/frontend/src/app/home/types/RecentConnection.js deleted file mode 100644 index 149d71f932..0000000000 --- a/guacamole/src/main/frontend/src/app/home/types/RecentConnection.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the RecentConnection class used by the guacRecentConnections - * directive. - */ -angular.module('home').factory('RecentConnection', [function defineRecentConnection() { - - /** - * A recently-user connection, visible to the current user, with an - * associated history entry. - * - * @constructor - */ - var RecentConnection = function RecentConnection(name, entry) { - - /** - * The human-readable name of this connection. - * - * @type String - */ - this.name = name; - - /** - * The history entry associated with this recent connection. - * - * @type HistoryEntry - */ - this.entry = entry; - - }; - - return RecentConnection; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/controllers/importConnectionsController.js b/guacamole/src/main/frontend/src/app/import/controllers/importConnectionsController.js deleted file mode 100644 index b4688203f7..0000000000 --- a/guacamole/src/main/frontend/src/app/import/controllers/importConnectionsController.js +++ /dev/null @@ -1,699 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* global _ */ - -/** - * The allowed MIME type for CSV files. - * - * @type String - */ -const CSV_MIME_TYPE = 'text/csv'; - -/** - * A fallback regular expression for CSV filenames, if no MIME type is provided - * by the browser. Any file that matches this regex will be considered to be a - * CSV file. - * - * @type RegExp - */ -const CSV_FILENAME_REGEX = /\.csv$/i; - -/** - * The allowed MIME type for JSON files. - * - * @type String - */ -const JSON_MIME_TYPE = 'application/json'; - -/** - * A fallback regular expression for JSON filenames, if no MIME type is provided - * by the browser. Any file that matches this regex will be considered to be a - * JSON file. - * - * @type RegExp - */ -const JSON_FILENAME_REGEX = /\.json$/i; - -/** - * The allowed MIME types for YAML files. - * NOTE: There is no registered MIME type for YAML files. This may result in a - * wide variety of possible browser-supplied MIME types. - * - * @type String[] - */ -const YAML_MIME_TYPES = [ - 'text/x-yaml', - 'text/yaml', - 'text/yml', - 'application/x-yaml', - 'application/x-yml', - 'application/yaml', - 'application/yml' -]; - -/** - * A fallback regular expression for YAML filenames, if no MIME type is provided - * by the browser. Any file that matches this regex will be considered to be a - * YAML file. - * - * @type RegExp - */ -const YAML_FILENAME_REGEX = /\.ya?ml$/i; - -/** - * Possible signatures for zip files (which include most modern Microsoft office - * documents - most notable excel). If any file, regardless of extension, has - * these starting bytes, it's invalid and must be rejected. - * For more, see https://en.wikipedia.org/wiki/List_of_file_signatures and - * https://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files. - * - * @type String[] - */ -const ZIP_SIGNATURES = [ - 'PK\u0003\u0004', - 'PK\u0005\u0006', - 'PK\u0007\u0008' -]; - -/* - * All file types supported for connection import. - * - * @type {String[]} - */ -const LEGAL_MIME_TYPES = [CSV_MIME_TYPE, JSON_MIME_TYPE, ...YAML_MIME_TYPES]; - -/** - * The controller for the connection import page. - */ -angular.module('import').controller('importConnectionsController', ['$scope', '$injector', - function importConnectionsController($scope, $injector) { - - // Required services - const $location = $injector.get('$location'); - const $q = $injector.get('$q'); - const $routeParams = $injector.get('$routeParams'); - const connectionParseService = $injector.get('connectionParseService'); - const connectionService = $injector.get('connectionService'); - const guacNotification = $injector.get('guacNotification'); - const permissionService = $injector.get('permissionService'); - const userService = $injector.get('userService'); - const userGroupService = $injector.get('userGroupService'); - - // Required types - const ConnectionImportConfig = $injector.get('ConnectionImportConfig'); - const DirectoryPatch = $injector.get('DirectoryPatch'); - const Error = $injector.get('Error'); - const ParseError = $injector.get('ParseError'); - const PermissionSet = $injector.get('PermissionSet'); - const User = $injector.get('User'); - const UserGroup = $injector.get('UserGroup'); - - /** - * The result of parsing the current upload, if successful. - * - * @type {ParseResult} - */ - $scope.parseResult = null; - - /** - * The failure associated with the current attempt to create connections - * through the API, if any. - * - * @type {Error} - */ - $scope.patchFailure = null;; - - /** - * True if the file is fully uploaded and ready to be processed, or false - * otherwise. - * - * @type {Boolean} - */ - $scope.dataReady = false; - - /** - * True if the file upload has been aborted mid-upload, or false otherwise. - */ - $scope.aborted = false; - - /** - * True if fully-uploaded data is being processed, or false otherwise. - */ - $scope.processing = false; - - /** - * The MIME type of the uploaded file, if any. - * - * @type {String} - */ - $scope.mimeType = null; - - /** - * The name of the file that's currently being uploaded, or has yet to - * be imported, if any. - * - * @type {String} - */ - $scope.fileName = null; - - /** - * The raw string contents of the uploaded file, if any. - * - * @type {String} - */ - $scope.fileData = null; - - /** - * The file reader currently being used to upload the file, if any. If - * null, no file upload is currently in progress. - * - * @type {FileReader} - */ - $scope.fileReader = null; - - /** - * The configuration options for this import, to be chosen by the user. - * - * @type {ConnectionImportConfig} - */ - $scope.importConfig = new ConnectionImportConfig(); - - /** - * Clear all file upload state. - */ - function resetUploadState() { - - $scope.aborted = false; - $scope.dataReady = false; - $scope.processing = false; - $scope.fileData = null; - $scope.mimeType = null; - $scope.fileReader = null; - $scope.parseResult = null; - $scope.patchFailure = null; - $scope.fileName = null; - - } - - // Indicate that data is currently being loaded / processed if the the file - // has been provided but not yet fully uploaded, or if the the file is - // fully loaded and is currently being processed. - $scope.isLoading = () => ( - ($scope.fileName && !$scope.dataReady && !$scope.patchFailure) - || $scope.processing); - - /** - * Create all users and user groups mentioned in the import file that don't - * already exist in the current data source. Return an object describing the - * result of the creation requests. - * - * @param {ParseResult} parseResult - * The result of parsing the user-supplied import file. - * - * @return {Promise.} - * A promise resolving to an object containing the results of the calls - * to create the users and groups. - */ - function createUsersAndGroups(parseResult) { - - const dataSource = $routeParams.dataSource; - - return $q.all({ - existingUsers : userService.getUsers(dataSource), - existingGroups : userGroupService.getUserGroups(dataSource) - }).then(({existingUsers, existingGroups}) => { - - const userPatches = Object.keys(parseResult.users) - - // Filter out any existing users - .filter(identifier => !existingUsers[identifier]) - - // A patch to create each new user - .map(username => new DirectoryPatch({ - op: 'add', - path: '/', - value: new User({ username }) - })); - - const groupPatches = Object.keys(parseResult.groups) - - // Filter out any existing groups - .filter(identifier => !existingGroups[identifier]) - - // A patch to create each new user group - .map(identifier => new DirectoryPatch({ - op: 'add', - path: '/', - value: new UserGroup({ identifier }) - })); - - // Create all the users and groups - return $q.all({ - userResponse: userService.patchUsers(dataSource, userPatches), - userGroupResponse: userGroupService.patchUserGroups( - dataSource, groupPatches) - }); - - }); - - } - - /** - * Grant read permissions for each user and group in the supplied parse - * result to each connection in their connection list. Note that there will - * be a seperate request for each user and group. - * - * @param {ParseResult} parseResult - * The result of successfully parsing a user-supplied import file. - * - * @param {Object} response - * The response from the PATCH API request. - * - * @returns {Promise.} - * A promise that will resolve with the result of every permission - * granting request. - */ - function grantConnectionPermissions(parseResult, response) { - - const dataSource = $routeParams.dataSource; - - // All connection grant requests, one per user/group - const userRequests = {}; - const groupRequests = {}; - - // Create a PermissionSet granting access to all connections at - // the provided indices within the provided parse result - const createPermissionSet = indices => - new PermissionSet({ connectionPermissions: indices.reduce( - (permissions, index) => { - const connectionId = response.patches[index].identifier; - permissions[connectionId] = [ - PermissionSet.ObjectPermissionType.READ]; - return permissions; - }, {}) }); - - // Now that we've created all the users, grant access to each - _.forEach(parseResult.users, (connectionIndices, identifier) => - - // Grant the permissions - note the group flag is `false` - userRequests[identifier] = permissionService.patchPermissions( - dataSource, identifier, - - // Create the permissions to these connections for this user - createPermissionSet(connectionIndices), - - // Do not remove any permissions - new PermissionSet(), - - // This call is not for a group - false)); - - // Now that we've created all the groups, grant access to each - _.forEach(parseResult.groups, (connectionIndices, identifier) => - - // Grant the permissions - note the group flag is `true` - groupRequests[identifier] = permissionService.patchPermissions( - dataSource, identifier, - - // Create the permissions to these connections for this user - createPermissionSet(connectionIndices), - - // Do not remove any permissions - new PermissionSet(), - - // This call is for a group - true)); - - // Return the result from all the permission granting calls - return $q.all({ ...userRequests, ...groupRequests }); - } - - /** - * Process a successfully parsed import file, creating any specified - * connections, creating and granting permissions to any specified users - * and user groups. If successful, the user will be shown a success message. - * If not, any errors will be displayed and any already-created entities - * will be rolled back. - * - * @param {ParseResult} parseResult - * The result of parsing the user-supplied import file. - */ - function handleParseSuccess(parseResult) { - - $scope.processing = false; - $scope.parseResult = parseResult; - - // If errors were encounted during file parsing, abort further - // processing - the user will have a chance to fix the errors and try - // again - if (parseResult.hasErrors) - return; - - const dataSource = $routeParams.dataSource; - - // First, attempt to create the connections - connectionService.patchConnections(dataSource, parseResult.patches) - .then(connectionResponse => - - // If connection creation is successful, create users and groups - createUsersAndGroups(parseResult).then(() => - - // Grant any new permissions to users and groups. NOTE: Any - // existing permissions for updated connections will NOT be - // removed - only new permissions will be added. - grantConnectionPermissions(parseResult, connectionResponse) - .then(() => { - - $scope.processing = false; - - // Display a success message if everything worked - guacNotification.showStatus({ - className : 'success', - title : 'IMPORT.DIALOG_HEADER_SUCCESS', - text : { - key: 'IMPORT.INFO_CONNECTIONS_IMPORTED_SUCCESS', - variables: { NUMBER: parseResult.connectionCount } - }, - - // Add a button to acknowledge and redirect to - // the connection listing page - actions : [{ - name : 'IMPORT.ACTION_ACKNOWLEDGE', - callback : () => { - - // Close the notification - guacNotification.showStatus(false); - - // Redirect to connection list page - $location.url('/settings/' + dataSource + '/connections'); - } - }] - }); - })) - - // If an error occurs while trying to create users or groups, - // display the error to the user. - .catch(handleError) - ) - - // If an error occurred when the call to create the connections was made, - // skip any further processing - the user will have a chance to fix the - // problems and try again - .catch(patchFailure => { - $scope.processing = false; - $scope.patchFailure = patchFailure; - }); - } - - /** - * Display the provided error to the user in a dismissable dialog. - * - * @argument {ParseError|Error} error - * The error to display. - */ - const handleError = error => { - - // Any error indicates that processing of the file has failed, so clear - // all upload state to allow for a fresh retry - resetUploadState(); - - let text; - - // If it's a import file parsing error - if (error instanceof ParseError) - text = { - - // Use the translation key if available - key: error.key || error.message, - variables: error.variables - }; - - // If it's a generic REST error - else if (error instanceof Error) - text = error.translatableMessage; - - // If it's an unknown type, just use the message directly - else - text = { key: error }; - - guacNotification.showStatus({ - className : 'error', - title : 'IMPORT.DIALOG_HEADER_ERROR', - text, - - // Add a button to hide the error - actions : [{ - name : 'IMPORT.ACTION_ACKNOWLEDGE', - callback : () => guacNotification.showStatus(false) - }] - }); - - }; - - /** - * Process the uploaded import file, importing the connections, granting - * connection permissions, or displaying errors to the user if there are - * problems with the provided file. - * - * @param {String} mimeType - * The MIME type of the uploaded data file. - * - * @param {String} data - * The raw string contents of the import file. - */ - function processData(mimeType, data) { - - // Data processing has begun - $scope.processing = true; - - // The function that will process all the raw data and return a list of - // patches to be submitted to the API - let processDataCallback; - - // Choose the appropriate parse function based on the mimetype - if (mimeType === JSON_MIME_TYPE) - processDataCallback = connectionParseService.parseJSON; - - else if (mimeType === CSV_MIME_TYPE) - processDataCallback = connectionParseService.parseCSV; - - else if (YAML_MIME_TYPES.indexOf(mimeType) >= 0) - processDataCallback = connectionParseService.parseYAML; - - // The file type was validated before being uploaded - this should - // never happen - else - processDataCallback = () => { - throw new ParseError({ - message: "Unexpected invalid file type: " + mimeType - }); - }; - - // Make the call to process the data into a series of patches - processDataCallback($scope.importConfig, data) - - // Send the data off to be imported if parsing is successful - .then(handleParseSuccess) - - // Display any error found while parsing the file - .catch(handleError); - } - - /** - * Process the uploaded import data. Only usuable if the upload is fully - * complete. - */ - $scope.import = () => processData($scope.mimeType, $scope.fileData); - - /** - * Returns true if import should be disabled, or false if import should be - * allowed. - * - * @return {Boolean} - * True if import should be disabled, otherwise false. - */ - $scope.importDisabled = () => - - // Disable import if no data is ready - !$scope.dataReady || - - // Disable import if the file is currently being processed - $scope.processing; - - /** - * Cancel any in-progress upload, or clear any uploaded-but-errored-out - * batch. - */ - $scope.cancel = function() { - - // If the upload is in progress, stop it now; the FileReader will - // reset the upload state when it stops - if ($scope.fileReader) { - $scope.aborted = true; - $scope.fileReader.abort(); - } - - // Clear any upload state - there's no FileReader handler to do it - else - resetUploadState(); - - }; - - /** - * Returns true if cancellation should be disabled, or false if - * cancellation should be allowed. - * - * @return {Boolean} - * True if cancellation should be disabled, or false if cancellation - * should be allowed. - */ - $scope.cancelDisabled = () => - - // Disable cancellation if the import has already been cancelled - $scope.aborted || - - // Disable cancellation if the file is currently being processed - $scope.processing || - - // Disable cancellation if no data is ready or being uploaded - !($scope.fileReader || $scope.dataReady); - - /** - * Handle a provided File upload, reading all data onto the scope for - * import processing, should the user request an import. Note that this - * function is used as a callback for directives that invoke it with a file - * list, but directive-level checking should ensure that there is only ever - * one file provided at a time. - * - * @argument {File[]} files - * The files to upload onto the scope for further processing. There - * should only ever be a single file in the array. - */ - $scope.handleFiles = files => { - - // There should only ever be a single file in the array - const file = files[0]; - - // The name and MIME type of the file as provided by the browser - let fileName = file.name; - let mimeType = file.type; - - // If no MIME type was provided by the browser at all, use REGEXes as a - // fallback to try to determine the file type. NOTE: Windows 10/11 are - // known to do this with YAML files. - if (!_.trim(mimeType).length) { - - // If the file name matches what we'd expect for a CSV file, set the - // CSV MIME type and move on - if (CSV_FILENAME_REGEX.test(fileName)) - mimeType = CSV_MIME_TYPE; - - // If the file name matches what we'd expect for a JSON file, set - // the JSON MIME type and move on - else if (JSON_FILENAME_REGEX.test(fileName)) - mimeType = JSON_MIME_TYPE; - - // If the file name matches what we'd expect for a JSON file, set - // one of the allowed YAML MIME types and move on - else if (YAML_FILENAME_REGEX.test(fileName)) - mimeType = YAML_MIME_TYPES[0]; - - else { - - // If none of the REGEXes pass, there's nothing more to be tried - handleError(new ParseError({ - message: "Unknown type for file: " + fileName, - key: 'IMPORT.ERROR_DETECTED_INVALID_TYPE' - })); - return; - - } - - } - - // Check if the mimetype is one of the supported types, - // e.g. "application/json" or "text/csv" - else if (LEGAL_MIME_TYPES.indexOf(mimeType) < 0) { - - // If the provided file is not one of the supported types, - // display an error and abort processing - handleError(new ParseError({ - message: "Invalid file type: " + mimeType, - key: 'IMPORT.ERROR_INVALID_MIME_TYPE', - variables: { TYPE: mimeType } - })); - return; - - } - - // Save the name and type to the scope - $scope.fileName = fileName; - $scope.mimeType = mimeType; - - // Initialize upload state - $scope.aborted = false; - $scope.dataReady = false; - $scope.processing = false; - $scope.uploadStarted = true; - - // Save the file to the scope when ready - $scope.fileReader = new FileReader(); - $scope.fileReader.onloadend = (e => { - - // If the upload was explicitly aborted, clear any upload state and - // do not process the data - if ($scope.aborted) - resetUploadState(); - - else { - - const fileData = e.target.result; - - // Check if the file has a header of a known-bad type - if (_.some(ZIP_SIGNATURES, - signature => fileData.startsWith(signature))) { - - // Throw an error and abort processing - handleError(new ParseError({ - message: "Invalid file type detected", - key: 'IMPORT.ERROR_DETECTED_INVALID_TYPE' - })); - return; - - } - - // Save the uploaded data - $scope.fileData = fileData; - - // Mark the data as ready - $scope.dataReady = true; - - // Clear the file reader from the scope now that this file is - // fully uploaded - $scope.fileReader = null; - - } - }); - - // Read all the data into memory - $scope.fileReader.readAsText(file); - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/directives/connectionImportErrors.js b/guacamole/src/main/frontend/src/app/import/directives/connectionImportErrors.js deleted file mode 100644 index 17d2fef4bc..0000000000 --- a/guacamole/src/main/frontend/src/app/import/directives/connectionImportErrors.js +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* global _ */ - -/** - * A directive that displays errors that occurred during parsing of a connection - * import file, or errors that were returned from the API during the connection - * batch creation attempt. - */ -angular.module('import').directive('connectionImportErrors', [ - function connectionImportErrors() { - - const directive = { - restrict: 'E', - replace: true, - templateUrl: 'app/import/templates/connectionErrors.html', - scope: { - - /** - * The result of parsing the import file. Any errors in this file - * will be displayed to the user. - * - * @type ParseResult - */ - parseResult : '=', - - /** - * The error associated with an attempt to batch create the - * connections represented by the ParseResult, if the ParseResult - * had no errors. If the provided ParseResult has errors, no request - * should have been made, and any provided patch error will be - * ignored. - * - * @type Error - */ - patchFailure : '=', - - } - }; - - directive.controller = ['$scope', '$injector', - function connectionImportErrorsController($scope, $injector) { - - // Required types - const DirectoryPatch = $injector.get('DirectoryPatch'); - const DisplayErrorList = $injector.get('DisplayErrorList'); - const ImportConnectionError = $injector.get('ImportConnectionError'); - const ParseError = $injector.get('ParseError'); - const SortOrder = $injector.get('SortOrder'); - - // Required services - const $q = $injector.get('$q'); - const $translate = $injector.get('$translate'); - - // There are errors to display if the parse result generated errors, or - // if the patch request failed - $scope.hasErrors = () => - !!_.get($scope, 'parseResult.hasErrors') || !!$scope.patchFailure; - - /** - * All connections with their associated errors for display. These may - * be either parsing failures, or errors returned from the API. Both - * error types will be adapted to a common display format, though the - * error types will never be mixed, because no REST request should ever - * be made if there are client-side parse errors. - * - * @type {ImportConnectionError[]} - */ - $scope.connectionErrors = []; - - /** - * SortOrder instance which maintains the sort order of the visible - * connection errors. - * - * @type SortOrder - */ - $scope.errorOrder = new SortOrder([ - 'rowNumber', - 'name', - 'group', - 'protocol', - 'errors', - ]); - - /** - * Array of all connection error properties that are filterable. - * - * @type String[] - */ - $scope.filteredErrorProperties = [ - 'rowNumber', - 'name', - 'group', - 'protocol', - 'errors', - ]; - - /** - * Generate a ImportConnectionError representing any errors associated - * with the row at the given index within the given parse result. - * - * @param {ParseResult} parseResult - * The result of parsing the connection import file. - * - * @param {Integer} index - * The current row within the patches array, 0-indexed. - * - * @param {Integer} row - * The current row within the original connection, 0-indexed. - * If any REMOVE patches are present, this may be greater than - * the index. - * - * @returns {ImportConnectionError} - * The connection error object associated with the given row in the - * given parse result. - */ - const generateConnectionError = (parseResult, index, row) => { - - // Get the patch associated with the current row - const patch = parseResult.patches[index]; - - // The value of a patch is just the Connection object - const connection = patch.value; - - return new ImportConnectionError({ - - // Add 1 to the provided row to get the position in the file - rowNumber: row + 1, - - // Basic connection information - name, group, and protocol. - name: connection.name, - group: parseResult.groupPaths[index], - protocol: connection.protocol, - - // The human-readable error messages - errors: new DisplayErrorList( - [ ...(parseResult.errors[index] || []) ]) - }); - }; - - // If a new connection patch failure is seen, update the display list - $scope.$watch('patchFailure', function patchFailureChanged(patchFailure) { - - const { parseResult } = $scope; - - // Do not attempt to process anything before the data has loaded - if (!patchFailure || !parseResult) - return; - - // All promises from all translation requests. The scope will not be - // updated until all translations are ready. - const translationPromises = []; - - // Any error returned from the API specifically associated with the - // preceding REMOVE patch - let removeError = null; - - // Fetch the API error, if any, of the patch at the given index - const getAPIError = index => - _.get(patchFailure, ['patches', index, 'error']); - - // The row number for display. Unlike the index, this number will - // skip any REMOVE patches. In other words, this is the index of - // connections within the original import file. - let row = 0; - - // Set up the list of connection errors based on the existing parse - // result, with error messages fetched from the patch failure - const connectionErrors = parseResult.patches.reduce( - (errors, patch, index) => { - - // Do not process display REMOVE patches - they are always - // followed by ADD patches containing the actual content - // (and errors, if any) - if (patch.op === DirectoryPatch.Operation.REMOVE) { - - // Save the API error, if any, so it can be displayed - // alongside the connection information associated with the - // following ADD patch - removeError = getAPIError(index); - - // Do not add an entry for this remove patch - it should - // always be followed by a corresponding CREATE patch - // containing the relevant connection information - return errors; - - } - - // Generate a connection error for display - const connectionError = generateConnectionError( - parseResult, index, row++); - - // Add the error associated with the previous REMOVE patch, if - // any, to the error associated with the current patch, if any - const apiErrors = [ removeError, getAPIError(index) ]; - - // Clear the previous REMOVE patch error after consuming it - removeError = null; - - // Go through each potential API error - apiErrors.forEach(error => - - // If the API error exists, fetch the translation and - // update it when it's ready - error && translationPromises.push($translate( - error.key, error.variables) - .then(translatedError => - connectionError.errors.getArray().push(translatedError) - ))); - - errors.push(connectionError); - return errors; - - }, []); - - // Once all the translations have been completed, update the - // connectionErrors all in one go, to ensure no excessive reloading - $q.all(translationPromises).then(() => { - $scope.connectionErrors = connectionErrors; - }); - - }); - - // If a new parse result with errors is seen, update the display list - $scope.$watch('parseResult', function parseResultChanged(parseResult) { - - // Do not process if there are no errors in the provided result - if (!parseResult || !parseResult.hasErrors) - return; - - // All promises from all translation requests. The scope will not be - // updated until all translations are ready. - const translationPromises = []; - - // The parse result should only be updated on a fresh file import; - // therefore it should be safe to skip checking the patch errors - // entirely - if set, they will be from the previous file and no - // longer relevant. - - // The row number for display. Unlike the index, this number will - // skip any REMOVE patches. In other words, this is the index of - // connections within the original import file. - let row = 0; - - // Set up the list of connection errors based on the updated parse - // result - const connectionErrors = parseResult.patches.reduce( - (errors, patch, index) => { - - // Do not process display REMOVE patches - they are always - // followed by ADD patches containing the actual content - // (and errors, if any) - if (patch.op === DirectoryPatch.Operation.REMOVE) - return errors; - - // Generate a connection error for display - const connectionError = generateConnectionError( - parseResult, index, row++); - - // Go through the errors and check if any are translateable - connectionError.errors.getArray().forEach( - (error, errorIndex) => { - - // If this error is a ParseError, it can be translated. - // NOTE: Generally one would translate error messages in the - // template, but in this case, the connection errors need to - // be raw strings in order to enable sorting and filtering. - if (error instanceof ParseError) - - // Fetch the translation and update it when it's ready - translationPromises.push($translate( - error.key, error.variables) - .then(translatedError => { - connectionError.errors.getArray()[errorIndex] = translatedError; - })); - - // If the error is not a known translatable type, add the - // message directly to the error array - else - connectionError.errors.getArray()[errorIndex] = ( - error.message ? error.message : error); - - }); - - errors.push(connectionError); - return errors; - - }, []); - - // Once all the translations have been completed, update the - // connectionErrors all in one go, to ensure no excessive reloading - $q.all(translationPromises).then(() => { - $scope.connectionErrors = connectionErrors; - }); - - }); - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/importModule.js b/guacamole/src/main/frontend/src/app/import/importModule.js deleted file mode 100644 index 45551e3238..0000000000 --- a/guacamole/src/main/frontend/src/app/import/importModule.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for code supporting importing user-supplied files. Currently, only - * connection import is supported. - */ -angular.module('import', ['element', 'list', 'notification', 'rest']); diff --git a/guacamole/src/main/frontend/src/app/import/services/connectionCSVService.js b/guacamole/src/main/frontend/src/app/import/services/connectionCSVService.js deleted file mode 100644 index 375ce0a2a0..0000000000 --- a/guacamole/src/main/frontend/src/app/import/services/connectionCSVService.js +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * 'License'); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* global _ */ - -// A suffix that indicates that a particular header refers to a parameter -const PARAMETER_SUFFIX = ' (parameter)'; - -// A suffix that indicates that a particular header refers to an attribute -const ATTRIBUTE_SUFFIX = ' (attribute)'; - -/** - * A service for parsing user-provided CSV connection data for bulk import. - */ -angular.module('import').factory('connectionCSVService', - ['$injector', function connectionCSVService($injector) { - - // Required types - const ParseError = $injector.get('ParseError'); - const ImportConnection = $injector.get('ImportConnection'); - const TranslatableMessage = $injector.get('TranslatableMessage'); - - // Required services - const $q = $injector.get('$q'); - const $routeParams = $injector.get('$routeParams'); - const schemaService = $injector.get('schemaService'); - - const service = {}; - - /** - * Returns a promise that resolves to a object detailing the connection - * attributes for the current data source, as well as the connection - * paremeters for every protocol, for the current data source. - * - * The object that the promise will contain an "attributes" key that maps to - * a set of attribute names, and a "protocolParameters" key that maps to an - * object mapping protocol names to sets of parameter names for that protocol. - * - * The intended use case for this object is to determine if there is a - * connection parameter or attribute with a given name, by e.g. checking the - * path `.protocolParameters[protocolName]` to see if a protocol exists, - * checking the path `.protocolParameters[protocolName][fieldName]` to see - * if a parameter exists for a given protocol, or checking the path - * `.attributes[fieldName]` to check if a connection attribute exists. - * - * @returns {Promise.} - * A promise that resolves to a object detailing the connection - * attributes and parameters for every protocol, for the current data - * source. - */ - function getFieldLookups() { - - // The current data source - the one that the connections will be - // imported into - const dataSource = $routeParams.dataSource; - - // Fetch connection attributes and protocols for the current data source - return $q.all({ - attributes : schemaService.getConnectionAttributes(dataSource), - protocols : schemaService.getProtocols(dataSource) - }) - .then(function connectionStructureRetrieved({attributes, protocols}) { - - return { - - // Translate the forms and fields into a flat map of attribute - // name to `true` boolean value - attributes: attributes.reduce( - (attributeMap, form) => { - form.fields.forEach( - field => attributeMap[field.name] = true); - return attributeMap - }, {}), - - // Translate the protocol definitions into a map of protocol - // name to map of field name to `true` boolean value - protocolParameters: _.mapValues( - protocols, protocol => protocol.connectionForms.reduce( - (protocolFieldMap, form) => { - form.fields.forEach( - field => protocolFieldMap[field.name] = true); - return protocolFieldMap; - }, {})) - }; - }); - } - - /** - * Split a raw user-provided, semicolon-seperated list of identifiers into - * an array of identifiers. If identifiers contain semicolons, they can be - * escaped with backslashes, and backslashes can also be escaped using other - * backslashes. - * - * @param {String} rawIdentifiers - * The raw string value as fetched from the CSV. - * - * @returns {Array.} - * An array of identifier values. - */ - function splitIdentifiers(rawIdentifiers) { - - // Keep track of whether a backslash was seen - let escaped = false; - - return _.reduce(rawIdentifiers, (identifiers, ch) => { - - // The current identifier will be the last one in the final list - let identifier = identifiers[identifiers.length - 1]; - - // If a semicolon is seen, set the "escaped" flag and continue - // to the next character - if (!escaped && ch == '\\') { - escaped = true; - return identifiers; - } - - // End the current identifier and start a new one if there's an - // unescaped semicolon - else if (!escaped && ch == ';') { - identifiers.push(''); - return identifiers; - } - - // In all other cases, just append to the identifier - else { - identifier += ch; - escaped = false; - } - - // Save the updated identifier to the list - identifiers[identifiers.length - 1] = identifier; - - return identifiers; - - }, ['']) - - // Filter out any 0-length (empty) identifiers - .filter(identifier => identifier.length); - - } - - /** - * Given a CSV header row, create and return a promise that will resolve to - * a function that can take a CSV data row and return a ImportConnection - * object. If an error occurs while parsing a particular row, the resolved - * function will throw a ParseError describing the failure. - * - * The provided CSV must contain columns for name and protocol. Optionally, - * the parentIdentifier of the target parent connection group, or a connection - * name path e.g. "ROOT/parent/child" may be included. Additionallty, - * connection parameters or attributes can be included. - * - * The names of connection attributes and parameters are not guaranteed to - * be mutually exclusive, so the CSV import format supports a distinguishing - * suffix. A column may be explicitly declared to be a parameter using a - * " (parameter)" suffix, or an attribute using an " (attribute)" suffix. - * No suffix is required if the name is unique across connections and - * attributes. - * - * If a parameter or attribute name conflicts with the standard - * "name", "protocol", "group", or "parentIdentifier" fields, the suffix is - * required. - * - * If a failure occurs while attempting to create the transformer function, - * the promise will be rejected with a ParseError describing the failure. - * - * @returns {Promise.>} - * A promise that will resolve to a function that translates a CSV data - * row (array of strings) to a ImportConnection object. - */ - service.getCSVTransformer = function getCSVTransformer(headerRow) { - - // A promise that will be resolved with the transformer or rejected if - // an error occurs - const deferred = $q.defer(); - - getFieldLookups().then(({attributes, protocolParameters}) => { - - // All configuration required to generate a function that can - // transform a row of CSV into a connection object. - // NOTE: This is a single object instead of a collection of variables - // to ensure that no stale references are used - e.g. when one getter - // invokes another getter - const transformConfig = { - - // Callbacks for required fields - nameGetter: undefined, - protocolGetter: undefined, - - // Callbacks for a parent group ID or group path - groupGetter: undefined, - parentIdentifierGetter: undefined, - - // Callbacks for user and user group identifiers - usersGetter: () => [], - userGroupsGetter: () => [], - - // Callbacks that will generate either connection attributes or - // parameters. These callbacks will return a {type, name, value} - // object containing the type ("parameter" or "attribute"), - // the name of the attribute or parameter, and the corresponding - // value. - parameterOrAttributeGetters: [] - - }; - - // A set of all headers that have been seen so far. If any of these - // are duplicated, the CSV is invalid. - const headerSet = {}; - - // Iterate through the headers one by one - headerRow.forEach((rawHeader, index) => { - - // Trim to normalize all headers - const header = rawHeader.trim(); - - // Check if the header is duplicated - if (headerSet[header]) { - deferred.reject(new ParseError({ - message: 'Duplicate CSV Header: ' + header, - translatableMessage: new TranslatableMessage({ - key: 'IMPORT.ERROR_DUPLICATE_CSV_HEADER', - variables: { HEADER: header } - }) - })); - return; - } - - // Mark that this particular header has already been seen - headerSet[header] = true; - - // A callback that returns the field at the current index - const fetchFieldAtIndex = row => row[index]; - - // A callback that splits raw string identifier lists by - // semicolon characters into an array of identifiers - const identifierListCallback = row => - splitIdentifiers(fetchFieldAtIndex(row)); - - // Set up the name callback - if (header == 'name') - transformConfig.nameGetter = fetchFieldAtIndex; - - // Set up the protocol callback - else if (header == 'protocol') - transformConfig.protocolGetter = fetchFieldAtIndex; - - // Set up the group callback - else if (header == 'group') - transformConfig.groupGetter = fetchFieldAtIndex; - - // Set up the group parent ID callback - else if (header == 'parentIdentifier') - transformConfig.parentIdentifierGetter = fetchFieldAtIndex; - - // Set the user identifiers callback - else if (header == 'users') - transformConfig.usersGetter = ( - identifierListCallback); - - // Set the user group identifiers callback - else if (header == 'groups') - transformConfig.userGroupsGetter = ( - identifierListCallback); - - // At this point, any other header might refer to a connection - // parameter or to an attribute - - // A field may be explicitly specified as a parameter - else if (header.endsWith(PARAMETER_SUFFIX)) { - - // Push as an explicit parameter getter - const parameterName = header.replace(PARAMETER_SUFFIX, ''); - transformConfig.parameterOrAttributeGetters.push( - row => ({ - type: 'parameters', - name: parameterName, - value: fetchFieldAtIndex(row) - }) - ); - } - - // A field may be explicitly specified as a parameter - else if (header.endsWith(ATTRIBUTE_SUFFIX)) { - - // Push as an explicit attribute getter - const attributeName = header.replace(ATTRIBUTE_SUFFIX, ''); - transformConfig.parameterOrAttributeGetters.push( - row => ({ - type: 'attributes', - name: attributeName, - value: fetchFieldAtIndex(row) - }) - ); - } - - // The field is ambiguous, either an attribute or parameter, - // so the getter will have to determine this for every row - else - transformConfig.parameterOrAttributeGetters.push(row => { - - // The name is just the value of the current header - const name = header; - - // The value is at the index that matches the position - // of the header - const value = fetchFieldAtIndex(row); - - // If no value is provided, do not check the validity - // of the parameter/attribute. Doing so would prevent - // the import of a list of mixed protocol types, where - // fields are only populated for protocols for which - // they are valid parameters. If a value IS provided, - // it must be a valid parameter or attribute for the - // current protocol, which will be checked below. - if (!value) - return {}; - - // The protocol may determine whether a field is - // a parameter or an attribute (or both) - const protocol = transformConfig.protocolGetter(row); - - // Any errors encountered while processing this row - const errors = []; - - // Before checking whether it's an attribute or protocol, - // make sure this is a valid protocol to start - if (!protocolParameters[protocol]) - - // If the protocol is invalid, do not throw an error - // here - this will be handled further downstream - // by non-CSV-specific error handling - return {}; - - // Determine if the field refers to an attribute or a - // parameter (or both, which is an error) - const isAttribute = !!attributes[name]; - const isParameter = !!_.get( - protocolParameters, [protocol, name]); - - // If there is both an attribute and a protocol-specific - // parameter with the provided name, it's impossible to - // figure out which this should be - if (isAttribute && isParameter) - errors.push(new ParseError({ - message: 'Ambiguous CSV Header: ' + header, - key: 'IMPORT.ERROR_AMBIGUOUS_CSV_HEADER', - variables: { HEADER: header } - })); - - // It's neither an attribute or a parameter - else if (!isAttribute && !isParameter) - errors.push(new ParseError({ - message: 'Invalid CSV Header: ' + header, - key: 'IMPORT.ERROR_INVALID_CSV_HEADER', - variables: { HEADER: header } - })); - - // Choose the appropriate type - const type = isAttribute ? 'attributes' : 'parameters'; - - return { type, name, value, errors }; - }); - }); - - const { - nameGetter, protocolGetter, - parentIdentifierGetter, groupGetter, - usersGetter, userGroupsGetter, - parameterOrAttributeGetters - } = transformConfig; - - // Fail if the name wasn't provided. Note that this is a file-level - // error, not specific to any connection. - if (!nameGetter) - deferred.reject(new ParseError({ - message: 'The connection name must be provided', - key: 'IMPORT.ERROR_REQUIRED_NAME_FILE' - })); - - // Fail if the protocol wasn't provided - if (!protocolGetter) - deferred.reject(new ParseError({ - message: 'The connection protocol must be provided', - key: 'IMPORT.ERROR_REQUIRED_PROTOCOL_FILE' - })); - - // The function to transform a CSV row into a connection object - deferred.resolve(function transformCSVRow(row) { - - // Get name and protocol - const name = nameGetter(row); - const protocol = protocolGetter(row); - - // Get any users or user groups who should be granted access - const users = usersGetter(row); - const groups = userGroupsGetter(row); - - // Get the parent group ID and/or group path - const group = groupGetter && groupGetter(row); - const parentIdentifier = ( - parentIdentifierGetter && parentIdentifierGetter(row)); - - return new ImportConnection({ - - // Fields that are not protocol-specific - name, - protocol, - parentIdentifier, - group, - users, - groups, - - // Fields that might potentially be either attributes or - // parameters, depending on the protocol - ...parameterOrAttributeGetters.reduce((values, getter) => { - - // Determine the type, name, and value - const { type, name, value, errors } = getter(row); - - // Set the value if available - if (type && name && value) - values[type][name] = value; - - // If there were errors - if (errors && errors.length) - values.errors = [...values.errors, ...errors]; - - // Continue on to the next attribute or parameter - return values; - - }, {parameters: {}, attributes: {}, errors: []}) - - }); - - }); - - }); - - return deferred.promise; - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/services/connectionParseService.js b/guacamole/src/main/frontend/src/app/import/services/connectionParseService.js deleted file mode 100644 index 59717001f3..0000000000 --- a/guacamole/src/main/frontend/src/app/import/services/connectionParseService.js +++ /dev/null @@ -1,843 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * 'License'); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* global _ */ - -import { parse as parseCSVData } from 'csv-parse/lib/sync' -import { parse as parseYAMLData } from 'yaml' - -/** - * A particularly unfriendly looking error that the CSV parser throws if a - * binary file parse attempt is made. If at all possible, this message should - * never be displayed to the user since it makes it look like the application - * is broken. As such, the code will attempt to filter out this error and print - * something a bit more generic. Lowercased for slightly fuzzier matching. - * - * @type String - */ -const BINARY_CSV_ERROR_MESSAGE = "Argument must be a Buffer".toLowerCase(); - -/** - * A service for parsing user-provided JSON, YAML, or JSON connection data into - * an appropriate format for bulk uploading using the PATCH REST endpoint. - */ -angular.module('import').factory('connectionParseService', - ['$injector', function connectionParseService($injector) { - - // Required types - const Connection = $injector.get('Connection'); - const ConnectionImportConfig = $injector.get('ConnectionImportConfig'); - const DirectoryPatch = $injector.get('DirectoryPatch'); - const ImportConnection = $injector.get('ImportConnection'); - const ParseError = $injector.get('ParseError'); - const ParseResult = $injector.get('ParseResult'); - const TranslatableMessage = $injector.get('TranslatableMessage'); - - // Required services - const $q = $injector.get('$q'); - const $routeParams = $injector.get('$routeParams'); - const schemaService = $injector.get('schemaService'); - const connectionCSVService = $injector.get('connectionCSVService'); - const connectionGroupService = $injector.get('connectionGroupService'); - - const service = {}; - - /** - * The identifier of the root connection group, under which all other groups - * and connections exist. - * - * @type String - */ - const ROOT_GROUP_IDENTIFIER = 'ROOT'; - - /** - * Perform basic checks, common to all file types - namely that the parsed - * data is an array, and contains at least one connection entry. Returns an - * error if any of these basic checks fails. - * - * @returns {ParseError} - * An error describing the parsing failure, if one of the basic checks - * fails. - */ - function performBasicChecks(parsedData) { - - // Make sure that the file data parses to an array (connection list) - if (!(parsedData instanceof Array)) - return new ParseError({ - message: 'Import data must be a list of connections', - key: 'IMPORT.ERROR_ARRAY_REQUIRED' - }); - - // Make sure that the connection list is not empty - contains at least - // one connection - if (!parsedData.length) - return new ParseError({ - message: 'The provided file is empty', - key: 'IMPORT.ERROR_EMPTY_FILE' - }); - } - - /** - * A collection of connection-group-tree-derived maps that are useful for - * processing connections. - * - * @constructor - * @param {TreeLookups|{}} template - * The object whose properties should be copied within the new - * ConnectionImportConfig. - */ - const TreeLookups = template => ({ - - /** - * A map of all known group paths to the corresponding identifier for - * that group. The is that a user-provided import file might directly - * specify a named group path like "ROOT", "ROOT/parent", or - * "ROOT/parent/child". This field field will map all of the above to - * the identifier of the appropriate group, if defined. - * - * @type Object. - */ - groupPathsByIdentifier: template.groupPathsByIdentifier || {}, - - /** - * A map of all known group identifiers to the path of the corresponding - * group. These paths are all of the form "ROOT/parent/child". - * - * @type Object. - */ - groupIdentifiersByPath: template.groupIdentifiersByPath || {}, - - /** - * A map of group identifier, to connection name, to connection - * identifier. These paths are all of the form "ROOT/parent/child". The - * idea is that existing connections can be found by checking if a - * connection already exists with the same parent group, and with the - * same name as an user-supplied import connection. - * - * @type Object. - */ - connectionIdsByGroupAndName : template.connectionIdsByGroupAndName || {} - - }); - - /** - * Returns a promise that resolves to a TreeLookups object containing maps - * useful for processing user-supplied connections to be imported, derived - * from the current connection group tree, starting at the ROOT group. - * - * @returns {Promise.} - * A promise that resolves to a TreeLookups object containing maps - * useful for processing connections. - */ - function getTreeLookups() { - - // The current data source - defines all the groups that the connections - // might be imported into - const dataSource = $routeParams.dataSource; - - const deferredTreeLookups = $q.defer(); - - connectionGroupService.getConnectionGroupTree(dataSource).then( - rootGroup => { - - const lookups = new TreeLookups({}); - - // Add the specified group to the lookup, appending all specified - // prefixes, and then recursively call saveLookups for all children - // of the group, appending to the prefix for each level - const saveLookups = (prefix, group) => { - - // To get the path for the current group, add the name - const currentPath = prefix + group.name; - - // Add the current path to the identifier map - lookups.groupPathsByIdentifier[currentPath] = group.identifier; - - // Add the current identifier to the path map - lookups.groupIdentifiersByPath[group.identifier] = currentPath; - - // Add each connection to the connection map - _.forEach(group.childConnections, - connection => _.setWith( - lookups.connectionIdsByGroupAndName, - [group.identifier, connection.name], - connection.identifier, Object)); - - // Add each child group to the lookup - const nextPrefix = currentPath + "/"; - _.forEach(group.childConnectionGroups, - childGroup => saveLookups(nextPrefix, childGroup)); - - } - - // Start at the root group - saveLookups("", rootGroup); - - // Resolve with the now fully-populated lookups - deferredTreeLookups.resolve(lookups); - - }); - - return deferredTreeLookups.promise; - } - - /** - * Returns a promise that will resolve to a transformer function that will - * perform various checks and transforms relating to the connection group - * tree hierarchy, pushing any errors into the resolved connection object. - * It will: - * - Ensure that a connection specifies either a valid group path (no path - * defaults to ROOT), or a valid parent group identifier, but not both - * - Ensure that this connection does not duplicate another connection - * earlier in the import file - * - Handle import connections that match existing connections connections - * based on the provided import config. - * - * The group set on the connection may begin with the root identifier, a - * leading slash, or may omit the root identifier entirely. The group may - * optionally end with a trailing slash. - * - * @param {ConnectionImportConfig} importConfig - * The configuration options selected by the user prior to import. - * - * @returns {Promise.>} - * A promise that will resolve to a function that will apply various - * connection tree based checks and transforms to this connection. - */ - function getTreeTransformer(importConfig) { - - // A map of group path with connection name, to connection object, used - // for detecting duplicate connections within the import file itself - const connectionsInFile = {}; - - return getTreeLookups().then(treeLookups => connection => { - - const { groupPathsByIdentifier, groupIdentifiersByPath, - connectionIdsByGroupAndName } = treeLookups; - - const providedIdentifier = connection.parentIdentifier; - - // The normalized group path for this connection, of the form - // "ROOT/parent/child" - let group; - - // The identifier for the parent group of this connection - let parentIdentifier; - - // The operator to apply for this connection - let op = DirectoryPatch.Operation.ADD; - - // If both are specified, the parent group is ambigious - if (providedIdentifier && connection.group) { - connection.errors.push(new ParseError({ - message: 'Only one of group or parentIdentifier can be set', - key: 'IMPORT.ERROR_AMBIGUOUS_PARENT_GROUP' - })); - return connection; - } - - // If a parent group identifier is present, but not valid - else if (providedIdentifier - && !groupPathsByIdentifier[providedIdentifier]) { - connection.errors.push(new ParseError({ - message: 'No group with identifier: ' + providedIdentifier, - key: 'IMPORT.ERROR_INVALID_GROUP_IDENTIFIER', - variables: { IDENTIFIER: providedIdentifier } - })); - return connection; - } - - // If the parent identifier is valid, use it to determine the path - else if (providedIdentifier) { - parentIdentifier = providedIdentifier; - group = groupPathsByIdentifier[providedIdentifier]; - } - - // If a user-supplied group path is provided, attempt to normalize - // and match it to an existing connection group - else if (connection.group) { - - // The group path extracted from the user-provided connection, - // to be translated into an absolute path starting at the root - group = connection.group; - - // If the provided group isn't a string, it can never be valid - if (typeof group !== 'string') { - connection.errors.push(new ParseError({ - message: 'Invalid group type - must be a string', - key: 'IMPORT.ERROR_INVALID_GROUP_TYPE' - })); - return connection; - } - - // Allow the group to start with a leading slash instead instead - // of explicitly requiring the root connection group - if (group.startsWith('/')) - group = ROOT_GROUP_IDENTIFIER + group; - - // Allow groups to begin directly with the path under the root - else if (!group.startsWith(ROOT_GROUP_IDENTIFIER)) - group = ROOT_GROUP_IDENTIFIER + '/' + group; - - // Allow groups to end with a trailing slash - if (group.endsWith('/')) - group = group.slice(0, -1); - - // Look up the parent identifier for the specified group path - parentIdentifier = groupPathsByIdentifier[group]; - - // If the group doesn't match anything in the tree - if (!parentIdentifier) { - connection.errors.push(new ParseError({ - message: 'No group found named: ' + connection.group, - key: 'IMPORT.ERROR_INVALID_GROUP', - variables: { GROUP: connection.group } - })); - return connection; - } - - } - - // If no group is specified at all, default to the root group - else { - parentIdentifier = ROOT_GROUP_IDENTIFIER; - group = ROOT_GROUP_IDENTIFIER; - } - - // The full path, of the form "ROOT/Child Group/Connection Name" - const path = group + '/' + connection.name; - - // Error out if this is a duplicate of a connection already in the - // file - if (!!_.get(connectionsInFile, path)) - connection.errors.push(new ParseError({ - message: 'Duplicate connection in file: ' + path, - key: 'IMPORT.ERROR_DUPLICATE_CONNECTION_IN_FILE', - variables: { NAME: connection.name, PATH: group } - })); - - // Mark the current path as already seen in the file - _.setWith(connectionsInFile, path, connection, Object); - - // Check if this would be an update to an existing connection - const existingIdentifier = _.get(connectionIdsByGroupAndName, - [parentIdentifier, connection.name]); - - // The default behavior is to create connections if no conflict - let importMode = ImportConnection.ImportMode.CREATE; - let identifier; - - // If updates to existing connections are disallowed - if (existingIdentifier && importConfig.existingConnectionMode === - ConnectionImportConfig.ExistingConnectionMode.REJECT) - connection.errors.push(new ParseError({ - message: 'Rejecting update to existing connection: ' + path, - key: 'IMPORT.ERROR_REJECT_UPDATE_CONNECTION', - variables: { NAME: connection.name, PATH: group } - })); - - // If the connection is being replaced, set the existing identifer - else if (existingIdentifier) { - identifier = existingIdentifier; - importMode = ImportConnection.ImportMode.REPLACE; - } - - else - importMode = ImportConnection.ImportMode.CREATE; - - // Set the import mode, normalized path, and validated identifier - return new ImportConnection({ ...connection, - importMode, group, identifier, parentIdentifier }); - - }); - } - - /** - * Returns a promise that resolves to a map of all valid protocols to a map - * of connection parameter names to a map of lower-cased and trimmed option - * values for that parameter to the actual valid option value. - * - * This format is designed for easy retrieval of corrected parameter values - * if the user-provided value matches a valid option except for case or - * leading/trailing whitespace. - * - * If a parameter has no options (i.e. any string value is allowed), the - * parameter name will map to a null value. - * - * @returns {Promise.>>>} - * A promise that resolves to a map of all valid protocols to parameter - * names to valid values. - */ - function getProtocolParameterOptions() { - - // The current data source - the one that the connections will be - // imported into - const dataSource = $routeParams.dataSource; - - // Fetch the protocols and convert to a set of valid protocol names - return schemaService.getProtocols(dataSource).then( - protocols => _.mapValues(protocols, ({connectionForms}) => { - - const fieldMap = {}; - - // Go through all the connection forms and get the fields for each - connectionForms.forEach(({fields}) => fields.forEach(field => { - - const { name, options } = field; - - // Set the value to null to indicate that there are no options - if (!options) - fieldMap[name] = null; - - // Set the value to a map of lowercased/trimmed option values - // to actual option values - else - fieldMap[name] = _.mapKeys( - options, option => option.trim().toLowerCase()); - - })); - - return fieldMap; - })); - } - - /** - * Resolves to function that will perform field-level (not connection - * hierarchy dependent) checks and transforms to a provided connection, - * returning the transformed connection. - * - * @returns {Promise.>} - * A promise resolving to a function that will apply field-level - * transforms and checks to a provided connection, returning the - * transformed connection. - */ - function getFieldTransformer() { - - return getProtocolParameterOptions().then(protocols => connection => { - - // Ensure that a protocol was specified for this connection - const protocol = connection.protocol; - if (!protocol) - connection.errors.push(new ParseError({ - message: 'Missing required protocol field', - key: 'IMPORT.ERROR_REQUIRED_PROTOCOL_CONNECTION' - })); - - // Ensure that a valid protocol was specified for this connection - if (!protocols[protocol]) - connection.errors.push(new ParseError({ - message: 'Invalid protocol: ' + protocol, - key: 'IMPORT.ERROR_INVALID_PROTOCOL', - variables: { PROTOCOL: protocol } - })); - - // Ensure that a name was specified for this connection - if (!connection.name) - connection.errors.push(new ParseError({ - message: 'Missing required name field', - key: 'IMPORT.ERROR_REQUIRED_NAME_CONNECTION' - })); - - // Ensure that the specified user list, if any, is an array - const users = connection.users; - if (users) { - - // Ensure all users in the array are trimmed strings - if (Array.isArray(users)) - connection.users = users.map(user => String(user).trim()); - - else - connection.errors.push(new ParseError({ - message: 'Invalid users list - must be an array', - key: 'IMPORT.ERROR_INVALID_USERS_TYPE' - })); - - } - - // Ensure that the specified user group list, if any, is an array - const groups = connection.groups; - if (groups) { - - // Ensure all groups in the array are trimmed strings - if (Array.isArray(groups)) - connection.groups = groups.map(group => String(group).trim()); - - else - connection.errors.push(new ParseError({ - message: 'Invalid groups list - must be an array', - key: 'IMPORT.ERROR_INVALID_USER_GROUPS_TYPE' - })); - - } - - // If the protocol is not valid, there's no point in trying to check - // parameter case sensitivity - if (!protocols[protocol]) - return connection; - - _.forEach(connection.parameters, (value, name) => { - - // An explicit null value for a parameter is valid - do not - // process it further - if (value === null) - return; - - // All non-null connection parameters must be strings. - const stringValue = String(value); - - // Convert the provided value to the format that would match - // the lookup object format - const comparisonValue = stringValue.toLowerCase().trim(); - - // The validated / corrected option value for this connection - // parameter, if any - const validOptionValue = _.get( - protocols, [protocol, name, comparisonValue]); - - // If the provided value fuzzily matches a valid option value, - // use the valid option value instead - if (validOptionValue) - connection.parameters[name] = validOptionValue; - - // Even if no option is found, the value must be a string - else - connection.parameters[name] = stringValue; - - }); - - _.forEach(connection.attributes, (value, name) => { - - // An explicit null value for an attribute is valid - do not - // process it further - if (value === null) - return; - - // All non-null connection attributes must be strings - connection.attributes[name] = String(value); - - }); - - return connection; - }); - } - - /** - * Convert a provided connection array into a ParseResult. Any provided - * transform functions will be run on each entry in `connectionData` before - * any other processing is done. - * - * @param {ConnectionImportConfig} importConfig - * The configuration options selected by the user prior to import. - * - * @param {*[]} connectionData - * An arbitrary array of data. This must evaluate to a ImportConnection - * object after being run through all functions in `transformFunctions`. - * - * @param {Function[]} transformFunctions - * An array of transformation functions to run on each entry in - * `connection` data. - * - * @return {Promise.} - * A promise resolving to ParseResult object representing the result of - * parsing all provided connection data. - */ - function parseConnectionData( - importConfig, connectionData, transformFunctions) { - - // Check that the provided connection data array is not empty - const checkError = performBasicChecks(connectionData); - if (checkError) { - const deferred = $q.defer(); - deferred.reject(checkError); - return deferred.promise; - } - - let index = 0; - - // Get the tree transformer and relevant protocol information - return $q.all({ - fieldTransformer : getFieldTransformer(), - treeTransformer : getTreeTransformer(importConfig), - }) - .then(({fieldTransformer, treeTransformer}) => - connectionData.reduce((parseResult, data) => { - - const { patches, users, groups, groupPaths } = parseResult; - - // Run the array data through each provided transform - let connectionObject = data; - _.forEach(transformFunctions, transform => { - connectionObject = transform(connectionObject); - }); - - // Apply the field level transforms - connectionObject = fieldTransformer(connectionObject); - - // Apply the connection group hierarchy transforms - connectionObject = treeTransformer(connectionObject); - - // If there are any errors for this connection, fail the whole batch - if (connectionObject.errors.length) - parseResult.hasErrors = true; - - // The value for the patch is a full-fledged Connection - const value = new Connection(connectionObject); - - // If a new connection is being created - if (connectionObject.importMode - === ImportConnection.ImportMode.CREATE) - - // Add a patch for creating the connection - patches.push(new DirectoryPatch({ - op: DirectoryPatch.Operation.ADD, - path: '/', - value - })); - - // The connection is being replaced, and permissions are only being - // added, not replaced - else if (importConfig.existingPermissionMode === - ConnectionImportConfig.ExistingPermissionMode.PRESERVE) - - // Add a patch for replacing the connection - patches.push(new DirectoryPatch({ - op: DirectoryPatch.Operation.REPLACE, - path: '/' + connectionObject.identifier, - value - })); - - // The connection is being replaced, and permissions are also being - // replaced - else { - - // Add a patch for removing the existing connection - patches.push(new DirectoryPatch({ - op: DirectoryPatch.Operation.REMOVE, - path: '/' + connectionObject.identifier - })); - - // Increment the index for the additional remove patch - index += 1; - - // Add a second patch for creating the replacement connection - patches.push(new DirectoryPatch({ - op: DirectoryPatch.Operation.ADD, - path: '/', - value - })); - - } - - // Save the connection group path into the parse result - groupPaths[index] = connectionObject.group; - - // Save the errors for this connection into the parse result - parseResult.errors[index] = connectionObject.errors; - - // Add this connection index to the list for each user - _.forEach(connectionObject.users, identifier => { - - // If there's an existing list, add the index to that - if (users[identifier]) - users[identifier].push(index); - - // Otherwise, create a new list with just this index - else - users[identifier] = [index]; - }); - - // Add this connection index to the list for each group - _.forEach(connectionObject.groups, identifier => { - - // If there's an existing list, add the index to that - if (groups[identifier]) - groups[identifier].push(index); - - // Otherwise, create a new list with just this index - else - groups[identifier] = [index]; - }); - - // Return the existing parse result state and continue on to the - // next connection in the file - index++; - parseResult.connectionCount++; - return parseResult; - - }, new ParseResult())); - } - - /** - * Convert a provided CSV representation of a connection list into a JSON - * object to be submitted to the PATCH REST endpoint, as well as a list of - * objects containing lists of user and user group identifiers to be granted - * to each connection. - * - * @param {ConnectionImportConfig} importConfig - * The configuration options selected by the user prior to import. - * - * @param {String} csvData - * The CSV-encoded connection list to process. - * - * @return {Promise.} - * A promise resolving to ParseResult object representing the result of - * parsing all provided connection data. - */ - service.parseCSV = function parseCSV(importConfig, csvData) { - - // Convert to an array of arrays, one per CSV row (including the header) - // NOTE: skip_empty_lines is required, or a trailing newline will error - let parsedData; - try { - parsedData = parseCSVData(csvData, {skip_empty_lines: true}); - } - - // If the CSV parser throws an error, reject with that error - catch(error) { - - const message = error.message; - console.error(error); - - const deferred = $q.defer(); - - // If the error message looks like the expected (and ugly) message - // that's thrown when a binary file is provided, throw a more - // friendy error. - if (_.trim(message).toLowerCase() == BINARY_CSV_ERROR_MESSAGE) - deferred.reject(new ParseError({ - message: "CSV binary parse attempt error: " + error.message, - key: "IMPORT.ERROR_DETECTED_INVALID_TYPE" - })); - - // Otherwise, pass the error from the library through to the user - else - deferred.reject(new ParseError({ - message: "CSV Parse Failure: " + error.message, - key: "IMPORT.ERROR_PARSE_FAILURE_CSV", - variables: { ERROR: error.message } - })); - - return deferred.promise; - } - - // The header row - an array of string header values - const header = parsedData.length ? parsedData[0] : []; - - // Slice off the header row to get the data rows - const connectionData = parsedData.slice(1); - - // Generate the CSV transform function, and apply it to every row - // before applying all the rest of the standard transforms - return connectionCSVService.getCSVTransformer(header).then( - csvTransformer => - - // Apply the CSV transform to every row - parseConnectionData( - importConfig, connectionData, [csvTransformer])); - - }; - - /** - * Convert a provided YAML representation of a connection list into a JSON - * object to be submitted to the PATCH REST endpoint, as well as a list of - * objects containing lists of user and user group identifiers to be granted - * to each connection. - * - * @param {ConnectionImportConfig} importConfig - * The configuration options selected by the user prior to import. - * - * @param {String} yamlData - * The YAML-encoded connection list to process. - * - * @return {Promise.} - * A promise resolving to ParseResult object representing the result of - * parsing all provided connection data. - */ - service.parseYAML = function parseYAML(importConfig, yamlData) { - - // Parse from YAML into a javascript array - let connectionData; - try { - connectionData = parseYAMLData(yamlData); - } - - // If the YAML parser throws an error, reject with that error - catch(error) { - console.error(error); - const deferred = $q.defer(); - deferred.reject(new ParseError({ - message: "YAML Parse Failure: " + error.message, - key: "IMPORT.ERROR_PARSE_FAILURE_YAML", - variables: { ERROR: error.message } - })); - return deferred.promise; - } - - // Produce a ParseResult, making sure that each record is converted to - // the ImportConnection type before further parsing - return parseConnectionData(importConfig, connectionData, - [connection => new ImportConnection(connection)]); - }; - - /** - * Convert a provided JSON-encoded representation of a connection list into - * an array of patches to be submitted to the PATCH REST endpoint, as well - * as a list of objects containing lists of user and user group identifiers - * to be granted to each connection. - * - * @param {ConnectionImportConfig} importConfig - * The configuration options selected by the user prior to import. - * - * @param {String} jsonData - * The JSON-encoded connection list to process. - * - * @return {Promise.} - * A promise resolving to ParseResult object representing the result of - * parsing all provided connection data. - */ - service.parseJSON = function parseJSON(importConfig, jsonData) { - - // Parse from JSON into a javascript array - let connectionData; - try { - connectionData = JSON.parse(jsonData); - } - - // If the JSON parse attempt throws an error, reject with that error - catch(error) { - console.error(error); - const deferred = $q.defer(); - deferred.reject(new ParseError({ - message: "JSON Parse Failure: " + error.message, - key: "IMPORT.ERROR_PARSE_FAILURE_JSON", - variables: { ERROR: error.message } - })); - return deferred.promise; - } - - // Produce a ParseResult, making sure that each record is converted to - // the ImportConnection type before further parsing - return parseConnectionData(importConfig, connectionData, - [connection => new ImportConnection(connection)]); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/styles/help.css b/guacamole/src/main/frontend/src/app/import/styles/help.css deleted file mode 100644 index 9cbdb5b182..0000000000 --- a/guacamole/src/main/frontend/src/app/import/styles/help.css +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.import.help { - - text-transform: none; - -} - -.import.help p { - - max-width: 70em; - -} - -.import.help h2 { - - padding-bottom: 0px; - -} - -.import.help p, .import.help pre { - - margin-left: 1em; - -} - -.import.help pre { - - background-color: rgba(0,0,0,0.15); - padding: 10px; - width: fit-content; - -} - -.import.help .footnotes { - - border-top: 1px solid gray; - padding-top: 1em; - width: fit-content; - margin-left: 1em; - -} diff --git a/guacamole/src/main/frontend/src/app/import/styles/import.css b/guacamole/src/main/frontend/src/app/import/styles/import.css deleted file mode 100644 index 5e2cd71e1e..0000000000 --- a/guacamole/src/main/frontend/src/app/import/styles/import.css +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.import .import-buttons { - - margin-top: 10px; - display: flex; - gap: 10px; - justify-content: center; - -} - -.import .errors table { - - width: 100%; - -} - -.import .errors .error-message { - - color: red; - -} - -.import .errors .error-message ul { - - margin: 0px; - -} - -.file-upload-container { - - display: flex; - flex-direction: column; - align-items: center; - padding: 24px 24px 24px; - - width: fit-content; - - border: 1px solid rgba(0,0,0,.25); - box-shadow: 1px 1px 2px rgb(0 0 0 / 25%); - - margin-left: auto; - margin-right: auto; - -} - -.file-upload-container.file-selected { - - display: flex; - flex-direction: row; - gap: 100px; - -} - -.file-upload-container .clear { - - margin: 0; - -} - -.file-upload-container .upload-header { - - display: flex; - flex-direction: row; - width: 500px; - margin-bottom: 5px; - justify-content: space-between; - -} - -.file-upload-container .file-error { - - color: red; - -} - -.file-upload-container .file-options { - - font-weight: bold; - -} - -.file-upload-container .file-upload-input { - - display: none; - -} - -.file-upload-container .drop-target { - - display: flex; - flex-direction: column; - - align-items: center; - justify-content: space-evenly; - - width: 500px; - height: 200px; - - background: rgba(0,0,0,.04); - border: 1px solid black; - -} - -.file-upload-container .drop-target.file-present { - - background: rgba(0,0,0,.15); - -} - - -.file-upload-container .drop-target .file-name { - - font-weight: bold; - font-size: 1.5em; - -} - -.file-upload-container .drop-target.drop-pending { - - background: #3161a9; - -} - -.file-upload-container .drop-target.drop-pending > * { - - opacity: 0.5; - -} - -.file-upload-container .drop-target .title { - - font-weight: bold; - font-size: 1.25em; - -} - -.file-upload-container .drop-target .browse-link { - - text-decoration: underline; - cursor: pointer; - -} - -.file-upload-container .import-config { - - margin-top: 0.5em; - list-style: none; - width: 100%; - padding-left: 0; - -} - -.file-upload-container .import-config .help { - - visibility: hidden; - cursor: help; - -} - -.file-upload-container .import-config .help::after { - - content: ''; - visibility: visible; - display: inline-block; - background-image: url('images/question.svg'); - background-size: contain; - width: 20px; - height: 20px; - position: relative; - top: 4px; - -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/import/templates/connectionErrors.html b/guacamole/src/main/frontend/src/app/import/templates/connectionErrors.html deleted file mode 100644 index f2d486cb08..0000000000 --- a/guacamole/src/main/frontend/src/app/import/templates/connectionErrors.html +++ /dev/null @@ -1,49 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    - {{'IMPORT.TABLE_HEADER_ROW_NUMBER' | translate}} - - {{'IMPORT.TABLE_HEADER_NAME' | translate}} - - {{'IMPORT.TABLE_HEADER_GROUP' | translate}} - - {{'IMPORT.TABLE_HEADER_PROTOCOL' | translate}} - - {{'IMPORT.TABLE_HEADER_ERRORS' | translate}} -
    {{error.rowNumber}}{{error.name}}{{error.group}}{{error.protocol}} -
      -
    • - {{ message }} -
    • -
    -
    - - - -
    diff --git a/guacamole/src/main/frontend/src/app/import/templates/connectionImport.html b/guacamole/src/main/frontend/src/app/import/templates/connectionImport.html deleted file mode 100644 index a6cc0fe034..0000000000 --- a/guacamole/src/main/frontend/src/app/import/templates/connectionImport.html +++ /dev/null @@ -1,82 +0,0 @@ -
    - -
    -

    {{'IMPORT.SECTION_HEADER_CONNECTION_IMPORT' | translate}}

    - -
    - -
    -
    {{fileName}}
    - -
    - -
    - -
    - {{'IMPORT.HELP_UPLOAD_FILE_TYPES' | translate}} - {{'IMPORT.ACTION_VIEW_FORMAT_HELP' | translate}} - -
    - -
    - -
    {{'IMPORT.HELP_UPLOAD_DROP_TITLE' | translate}}
    - - - - {{'IMPORT.ACTION_BROWSE' | translate}} - - -
    {{fileName}}
    - -
    - -
      -
    • - - - -
    • -
    • - - - -
    • -
    - -
    - -
    - - -
    - -
    - - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/import/templates/connectionImportFileHelp.html b/guacamole/src/main/frontend/src/app/import/templates/connectionImportFileHelp.html deleted file mode 100644 index d3abda1db8..0000000000 --- a/guacamole/src/main/frontend/src/app/import/templates/connectionImportFileHelp.html +++ /dev/null @@ -1,29 +0,0 @@ -
    - -
    -

    {{'IMPORT.SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE' | translate}}

    - -
    - -

    {{'IMPORT.HELP_FILE_TYPE_HEADER' | translate}}

    -

    {{'IMPORT.HELP_FILE_TYPE_DESCRIPTION' | translate}}

    - -

    {{'IMPORT.SECTION_HEADER_CSV' | translate}}

    -

    {{'IMPORT.HELP_CSV_DESCRIPTION' | translate}}

    -

    {{'IMPORT.HELP_CSV_MORE_DETAILS' | translate}}

    -
    {{'IMPORT.HELP_CSV_EXAMPLE' | translate }}
    - -

    {{'IMPORT.SECTION_HEADER_JSON' | translate}}

    -

    {{'IMPORT.HELP_JSON_DESCRIPTION' | translate}}

    -

    {{'IMPORT.HELP_JSON_MORE_DETAILS' | translate}}

    -
    {{'IMPORT.HELP_JSON_EXAMPLE' | translate }}
    - -

    {{'IMPORT.SECTION_HEADER_YAML' | translate}}

    -

    {{'IMPORT.HELP_YAML_DESCRIPTION' | translate}}

    -
    {{'IMPORT.HELP_YAML_EXAMPLE' | translate}}
    - -
      -
    1. {{'IMPORT.HELP_SEMICOLON_FOOTNOTE' | translate}}
    2. -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/import/types/ConnectionImportConfig.js b/guacamole/src/main/frontend/src/app/import/types/ConnectionImportConfig.js deleted file mode 100644 index fb06730553..0000000000 --- a/guacamole/src/main/frontend/src/app/import/types/ConnectionImportConfig.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ConnectionImportConfig class. - */ -angular.module('import').factory('ConnectionImportConfig', [ - function defineConnectionImportConfig() { - - /** - * A representation of any user-specified configuration when - * batch-importing connections. - * - * @constructor - * @param {ConnectionImportConfig|Object} [template={}] - * The object whose properties should be copied within the new - * ConnectionImportConfig. - */ - const ConnectionImportConfig = function ConnectionImportConfig(template) { - - // Use empty object by default - template = template || {}; - - /** - * The mode for handling connections that match existing connections. - * - * @type ConnectionImportConfig.ExistingConnectionMode - */ - this.existingConnectionMode = template.existingConnectionMode - || ConnectionImportConfig.ExistingConnectionMode.REJECT; - - /** - * The mode for handling permissions on existing connections that are - * being updated. Only meaningful if the importer is configured to - * replace existing connections. - * - * @type ConnectionImportConfig.ExistingPermissionMode - */ - this.existingPermissionMode = template.existingPermissionMode - || ConnectionImportConfig.ExistingPermissionMode.PRESERVE; - - }; - - /** - * Valid modes for the behavior of the importer when an imported connection - * already exists. - */ - ConnectionImportConfig.ExistingConnectionMode = { - - /** - * Any Connection that has the same name and parent group as an existing - * connection will cause the entire import to be rejected with an error. - */ - REJECT : "REJECT", - - /** - * Replace/update any existing connections. - */ - REPLACE : "REPLACE" - - }; - - /** - * Valid modes for the behavior of the importer with respect to connection - * permissions when existing connections are being replaced. - */ - ConnectionImportConfig.ExistingPermissionMode = { - - /** - * Any new permissions specified in the imported connection will be - * added to the existing connection, without removing any existing - * permissions. - */ - PRESERVE : "PRESERVE", - - /** - * Any existing permissions will be removed, ensuring that only the - * users or groups specified in the import file will be granted to the - * replaced connection after import. - */ - REPLACE : "REPLACE" - - }; - - return ConnectionImportConfig; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/import/types/DisplayErrorList.js b/guacamole/src/main/frontend/src/app/import/types/DisplayErrorList.js deleted file mode 100644 index 26ee65d82e..0000000000 --- a/guacamole/src/main/frontend/src/app/import/types/DisplayErrorList.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the DisplayErrorList class. - */ -angular.module('import').factory('DisplayErrorList', [ - function defineDisplayErrorList() { - - /** - * A list of human-readable error messages, intended to be usable in a - * sortable / filterable table. - * - * @constructor - * @param {String[]} messages - * The error messages that should be prepared for display. - */ - const DisplayErrorList = function DisplayErrorList(messages) { - - /** - * The error messages that should be prepared for display. - * - * @type {String[]} - */ - this.messages = messages || []; - - /** - * The single String message composed of all messages concatenated - * together. This will be used for filtering / sorting, and should only - * be calculated once, when toString() is called. - * - * @type {String} - */ - this.concatenatedMessage = null; - - }; - - /** - * Return a sortable / filterable representation of all the error messages - * wrapped by this DisplayErrorList. - * - * NOTE: Once this method is called, any changes to the underlying array - * will have no effect. This is to ensure that repeated calls to toString() - * by sorting / filtering UI code will not regenerate the concatenated - * message every time. - * - * @returns {String} - * A sortable / filterable representation of the error messages wrapped - * by this DisplayErrorList - */ - DisplayErrorList.prototype.toString = function messageListToString() { - - // Generate the concatenated message if not already generated - if (!this.concatenatedMessage) - this.concatenatedMessage = this.messages.join(' '); - - return this.concatenatedMessage; - - } - - /** - * Return the underlying array containing the raw error messages, wrapped - * by this DisplayErrorList. - * - * @returns {String[]} - * The underlying array containing the raw error messages, wrapped by - * this DisplayErrorList - */ - DisplayErrorList.prototype.getArray = function getUnderlyingArray() { - return this.messages; - } - - return DisplayErrorList; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/types/ImportConnection.js b/guacamole/src/main/frontend/src/app/import/types/ImportConnection.js deleted file mode 100644 index 47c13a8ebe..0000000000 --- a/guacamole/src/main/frontend/src/app/import/types/ImportConnection.js +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ImportConnection class. - */ -angular.module('import').factory('ImportConnection', ['$injector', - function defineImportConnection($injector) { - - /** - * A representation of a connection to be imported, as parsed from an - * user-supplied import file. - * - * @constructor - * @param {ImportConnection|Object} [template={}] - * The object whose properties should be copied within the new - * Connection. - */ - const ImportConnection = function ImportConnection(template) { - - // Use empty object by default - template = template || {}; - - /** - * The unique identifier of the connection group that contains this - * connection. - * - * @type String - */ - this.parentIdentifier = template.parentIdentifier; - - /** - * The path to the connection group that contains this connection, - * written as e.g. "ROOT/parent/child/group". - * - * @type String - */ - this.group = template.group; - - /** - * The identifier of the connection being updated. Only meaningful if - * the replace operation is set. - */ - this.identifier = template.identifier; - - /** - * The human-readable name of this connection, which is not necessarily - * unique. - * - * @type String - */ - this.name = template.name; - - /** - * The name of the protocol associated with this connection, such as - * "vnc" or "rdp". - * - * @type String - */ - this.protocol = template.protocol; - - /** - * Connection configuration parameters, as dictated by the protocol in - * use, arranged as name/value pairs. - * - * @type Object. - */ - this.parameters = template.parameters || {}; - - /** - * Arbitrary name/value pairs which further describe this connection. - * The semantics and validity of these attributes are dictated by the - * extension which defines them. - * - * @type Object. - */ - this.attributes = template.attributes || {}; - - /** - * The identifiers of all users who should be granted read access to - * this connection. - * - * @type String[] - */ - this.users = template.users || []; - - /** - * The identifiers of all user groups who should be granted read access - * to this connection. - * - * @type String[] - */ - this.groups = template.groups || []; - - /** - * The mode import mode for this connection. If not otherwise specified, - * a brand new connection should be created. - */ - this.importMode = template.importMode || ImportConnection.ImportMode.CREATE; - - /** - * Any errors specific to this connection encountered while parsing. - * - * @type ParseError[] - */ - this.errors = template.errors || []; - - }; - - /** - * The possible import modes for a given connection. - */ - ImportConnection.ImportMode = { - - /** - * The connection should be created fresh. This mode is valid IFF there - * is no existing connection with the same name and parent group. - */ - CREATE : "CREATE", - - /** - * This connection will replace the existing connection with the same - * name and parent group. - */ - REPLACE : "REPLACE" - - }; - - return ImportConnection; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/import/types/ImportConnectionError.js b/guacamole/src/main/frontend/src/app/import/types/ImportConnectionError.js deleted file mode 100644 index 9fabe23136..0000000000 --- a/guacamole/src/main/frontend/src/app/import/types/ImportConnectionError.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ImportConnectionError class. - */ -angular.module('import').factory('ImportConnectionError', ['$injector', - function defineImportConnectionError($injector) { - - // Required types - const DisplayErrorList = $injector.get('DisplayErrorList'); - - /** - * A representation of the errors associated with a connection to be - * imported, along with some basic information connection information to - * identify the connection having the error, as returned from a parsed - * user-supplied import file. - * - * @constructor - * @param {ImportConnectionError|Object} [template={}] - * The object whose properties should be copied within the new - * ImportConnectionError. - */ - const ImportConnectionError = function ImportConnectionError(template) { - - // Use empty object by default - template = template || {}; - - /** - * The row number within the original connection import file for this - * connection. This should be 1-indexed. - */ - this.rowNumber = template.rowNumber; - - /** - * The human-readable name of this connection, which is not necessarily - * unique. - * - * @type String - */ - this.name = template.name; - - /** - * The human-readable connection group path for this connection, of the - * form "ROOT/Parent/Child". - * - * @type String - */ - this.group = template.group; - - /** - * The name of the protocol associated with this connection, such as - * "vnc" or "rdp". - * - * @type String - */ - this.protocol = template.protocol; - - /** - * The error messages associated with this particular connection, if any. - * - * @type ImportConnectionError - */ - this.errors = template.errors || new DisplayErrorList(); - - }; - - return ImportConnectionError; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/types/ParseError.js b/guacamole/src/main/frontend/src/app/import/types/ParseError.js deleted file mode 100644 index b4b3dd6470..0000000000 --- a/guacamole/src/main/frontend/src/app/import/types/ParseError.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ParseError class. - */ -angular.module('import').factory('ParseError', [function defineParseError() { - - /** - * An error representing a parsing failure when attempting to convert - * user-provided data into a list of Connection objects. - * - * @constructor - * @param {ParseError|Object} [template={}] - * The object whose properties should be copied within the new - * ParseError. - */ - const ParseError = function ParseError(template) { - - // Use empty object by default - template = template || {}; - - /** - * A human-readable message describing the error that occurred. - * - * @type String - */ - this.message = template.message; - - /** - * The key associated with the translation string that used when - * displaying this message. - * - * @type String - */ - this.key = template.key; - - /** - * The object which should be passed through to the translation service - * for the sake of variable substitution. Each property of the provided - * object will be substituted for the variable of the same name within - * the translation string. - * - * @type Object - */ - this.variables = template.variables; - - // If no translation key is available, fall back to the untranslated - // key, passing the raw message directly through the translation system - if (!this.key) { - this.key = 'APP.TEXT_UNTRANSLATED'; - this.variables = { MESSAGE: this.message }; - } - - }; - - return ParseError; - -}]); diff --git a/guacamole/src/main/frontend/src/app/import/types/ParseResult.js b/guacamole/src/main/frontend/src/app/import/types/ParseResult.js deleted file mode 100644 index 3d15511cc6..0000000000 --- a/guacamole/src/main/frontend/src/app/import/types/ParseResult.js +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ParseResult class. - */ -angular.module('import').factory('ParseResult', [function defineParseResult() { - - /** - * The result of parsing a connection import file - containing a list of - * API patches ready to be submitted to the PATCH REST API for batch - * connection creation/replacement, a set of users and user groups to grant - * access to each connection, a group path for every connection, and any - * errors that may have occurred while parsing each connection. - * - * @constructor - * @param {ParseResult|Object} [template={}] - * The object whose properties should be copied within the new - * ParseResult. - */ - const ParseResult = function ParseResult(template) { - - // Use empty object by default - template = template || {}; - - /** - * An array of patches, ready to be submitted to the PATCH REST API for - * batch connection creation / replacement. Note that this array may - * contain more patches than connections from the original file - in the - * case that connections are being fully replaced, there will be a - * remove and a create patch for each replaced connection. - * - * @type {DirectoryPatch[]} - */ - this.patches = template.patches || []; - - /** - * An object whose keys are the user identifiers of users specified - * in the batch import, and whose values are an array of indices of - * connections within the patches array to which those users should be - * granted access. - * - * @type {Object.} - */ - this.users = template.users || {}; - - /** - * An object whose keys are the user group identifiers of every user - * group specified in the batch import. i.e. a set of all user group - * identifiers. - * - * @type {Object.} - */ - this.groups = template.users || {}; - - /** - * A map of connection index within the patch array, to connection group - * path for that connection, of the form "ROOT/Parent/Child". - * - * @type {Object.} - */ - this.groupPaths = template.groupPaths || {}; - - /** - * An array of errors encountered while parsing the corresponding - * connection (at the same array index in the patches array). Each - * connection should have an array of errors. If empty, no errors - * occurred for this connection. - * - * @type {ParseError[][]} - */ - this.errors = template.errors || []; - - /** - * True if any errors were encountered while parsing the connections - * represented by this ParseResult. This should always be true if there - * are a non-zero number of elements in the errors list for any - * connection, or false otherwise. - * - * @type {Boolean} - */ - this.hasErrors = template.hasErrors || false; - - /** - * The integer number of unique connections present in the parse result. - * This may be less than the length of the patches array, if any REMOVE - * patches are present. - * - * @Type {Number} - */ - this.connectionCount = template.connectionCount || 0; - - }; - - return ParseResult; - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/config/httpDefaults.js b/guacamole/src/main/frontend/src/app/index/config/httpDefaults.js deleted file mode 100644 index 9de1ce22b9..0000000000 --- a/guacamole/src/main/frontend/src/app/index/config/httpDefaults.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Defaults for the AngularJS $http service. - */ -angular.module('index').config(['$httpProvider', function httpDefaults($httpProvider) { - - // Do not cache the responses of GET requests - $httpProvider.defaults.headers.get = { - 'Cache-Control' : 'no-cache', - 'Pragma' : 'no-cache' - }; - - // Use "application/json" content type by default for PATCH requests - $httpProvider.defaults.headers.patch = { - 'Content-Type' : 'application/json' - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/config/indexRouteConfig.js b/guacamole/src/main/frontend/src/app/index/config/indexRouteConfig.js deleted file mode 100644 index d24df9179c..0000000000 --- a/guacamole/src/main/frontend/src/app/index/config/indexRouteConfig.js +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The config block for setting up all the url routing. - */ -angular.module('index').config(['$routeProvider', '$locationProvider', - function indexRouteConfig($routeProvider, $locationProvider) { - - // Disable HTML5 mode (use # for routing) - $locationProvider.html5Mode(false); - - // Clear hash prefix to keep /#/thing/bat URL style - $locationProvider.hashPrefix(''); - - /** - * Attempts to re-authenticate with the Guacamole server, sending any - * query parameters in the URL, along with the current auth token, and - * updating locally stored token if necessary. - * - * @param {Service} $injector - * The Angular $injector service. - * - * @returns {Promise} - * A promise which resolves successfully only after an attempt to - * re-authenticate has been made. If the authentication attempt fails, - * the promise will be rejected. - */ - var updateCurrentToken = ['$injector', function updateCurrentToken($injector) { - - // Required services - var $location = $injector.get('$location'); - var authenticationService = $injector.get('authenticationService'); - - // Re-authenticate including any parameters in URL - return authenticationService.updateCurrentToken($location.search()); - - }]; - - /** - * Redirects the user to their home page. This necessarily requires - * attempting to re-authenticate with the Guacamole server, as the user's - * credentials may have changed, and thus their most-appropriate home page - * may have changed as well. - * - * @param {Service} $injector - * The Angular $injector service. - * - * @returns {Promise} - * A promise which resolves successfully only after an attempt to - * re-authenticate and determine the user's proper home page has been - * made. - */ - var routeToUserHomePage = ['$injector', function routeToUserHomePage($injector) { - - // Required services - var $location = $injector.get('$location'); - var $q = $injector.get('$q'); - var userPageService = $injector.get('userPageService'); - - // Promise for routing attempt - var route = $q.defer(); - - // Re-authenticate including any parameters in URL - $injector.invoke(updateCurrentToken) - .then(function tokenUpdateComplete() { - - // Redirect to home page - userPageService.getHomePage() - .then(function homePageRetrieved(homePage) { - - // If home page is the requested location, allow through - if ($location.path() === homePage.url) - route.resolve(); - - // Otherwise, reject and reroute - else { - $location.path(homePage.url); - route.reject(); - } - - }) - - // If retrieval of home page fails, assume requested page is OK - ['catch'](function homePageFailed() { - route.resolve(); - }); - - }) - - ['catch'](function tokenUpdateFailed() { - route.reject(); - }); - - // Return promise that will resolve only if the requested page is the - // home page - return route.promise; - - }]; - - // Configure each possible route - $routeProvider - - // Home screen - .when('/', { - title : 'APP.NAME', - bodyClassName : 'home', - templateUrl : 'app/home/templates/home.html', - controller : 'homeController', - resolve : { routeToUserHomePage: routeToUserHomePage } - }) - - // Connection import page - .when('/import/:dataSource/connection', { - title : 'APP.NAME', - bodyClassName : 'settings', - templateUrl : 'app/import/templates/connectionImport.html', - controller : 'importConnectionsController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Connection import file format help page - .when('/import/connection/file-format-help', { - title : 'APP.NAME', - bodyClassName : 'settings', - templateUrl : 'app/import/templates/connectionImportFileHelp.html', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Management screen - .when('/settings/:dataSource?/:tab', { - title : 'APP.NAME', - bodyClassName : 'settings', - templateUrl : 'app/settings/templates/settings.html', - controller : 'settingsController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Connection editor - .when('/manage/:dataSource/connections/:id*?', { - title : 'APP.NAME', - bodyClassName : 'manage', - templateUrl : 'app/manage/templates/manageConnection.html', - controller : 'manageConnectionController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Sharing profile editor - .when('/manage/:dataSource/sharingProfiles/:id*?', { - title : 'APP.NAME', - bodyClassName : 'manage', - templateUrl : 'app/manage/templates/manageSharingProfile.html', - controller : 'manageSharingProfileController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Connection group editor - .when('/manage/:dataSource/connectionGroups/:id*?', { - title : 'APP.NAME', - bodyClassName : 'manage', - templateUrl : 'app/manage/templates/manageConnectionGroup.html', - controller : 'manageConnectionGroupController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // User editor - .when('/manage/:dataSource/users/:id*?', { - title : 'APP.NAME', - bodyClassName : 'manage', - templateUrl : 'app/manage/templates/manageUser.html', - controller : 'manageUserController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // User group editor - .when('/manage/:dataSource/userGroups/:id*?', { - title : 'APP.NAME', - bodyClassName : 'manage', - templateUrl : 'app/manage/templates/manageUserGroup.html', - controller : 'manageUserGroupController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Recording player - .when('/settings/:dataSource/recording/:identifier/:name', { - title : 'APP.NAME', - bodyClassName : 'settings', - templateUrl : 'app/settings/templates/settingsConnectionHistoryPlayer.html', - controller : 'connectionHistoryPlayerController', - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Client view - .when('/client/:id', { - bodyClassName : 'client', - templateUrl : 'app/client/templates/client.html', - controller : 'clientController', - reloadOnUrl : false, - resolve : { updateCurrentToken: updateCurrentToken } - }) - - // Redirect to home screen if page not found - .otherwise({ - resolve : { routeToUserHomePage: routeToUserHomePage } - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/config/indexTranslationConfig.js b/guacamole/src/main/frontend/src/app/index/config/indexTranslationConfig.js deleted file mode 100644 index 3e94203613..0000000000 --- a/guacamole/src/main/frontend/src/app/index/config/indexTranslationConfig.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The configuration block for setting up everything having to do with i18n. - */ -angular.module('index').config(['$injector', function($injector) { - - // Required providers - var $translateProvider = $injector.get('$translateProvider'); - var preferenceServiceProvider = $injector.get('preferenceServiceProvider'); - - // Fallback to US English - $translateProvider.fallbackLanguage('en'); - - // Prefer chosen language - $translateProvider.preferredLanguage(preferenceServiceProvider.preferences.language); - - // Escape any HTML in translation strings - $translateProvider.useSanitizeValueStrategy('escape'); - - // Load translations via translationLoader service - $translateProvider.useLoader('translationLoader'); - - // Provide pluralization, etc. via messageformat.js - $translateProvider.useMessageFormatInterpolation(); - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/config/templateRequestDecorator.js b/guacamole/src/main/frontend/src/app/index/config/templateRequestDecorator.js deleted file mode 100644 index 2f832de874..0000000000 --- a/guacamole/src/main/frontend/src/app/index/config/templateRequestDecorator.js +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Overrides $templateRequest such that HTML patches defined within Guacamole - * extensions are automatically applied to template contents. As the results of - * $templateRequest are cached internally, $templateCache is also overridden to - * update the internal cache as necessary. - */ -angular.module('index').config(['$provide', function($provide) { - - /** - * A map of previously-returned promises from past calls to - * $templateRequest(). Future calls to $templateRequest() will return - * new promises chained to the first promise returned for a given URL, - * rather than redo patch processing for every request. - * - * @type Object.> - */ - var promiseCache = {}; - - // Decorate $templateCache such that promiseCache is updated if a template - // is modified within $templateCache at runtime - $provide.decorator('$templateCache', ['$delegate', - function decorateTemplateCache($delegate) { - - // Create shallow copy of original $templateCache which we can safely - // override - var decoratedTemplateCache = angular.extend({}, $delegate); - - /** - * Overridden version of $templateCache.put() which automatically - * invalidates the cached $templateRequest result when used. Only the - * URL parameter is defined, as all other arguments, if any, will be - * passed through to the original $templateCache.put() when the actual - * put() operation is performed. - * - * @param {String} url - * The URL of the template whose entry is being updated. - * - * @return {Object} - * The value returned by $templateCache.put(), which is defined as - * being the value that was just stored at the provided URL. - */ - decoratedTemplateCache.put = function put(url) { - - // Evict old cached $templateRequest() result - delete promiseCache[url]; - - // Continue with originally-requested put() operation - return $delegate.put.apply(this, arguments); - - }; - - return decoratedTemplateCache; - - }]); - - // Decorate $templateRequest such that it automatically applies any HTML - // patches associated with installed Guacamole extensions - $provide.decorator('$templateRequest', ['$delegate', '$injector', - function decorateTemplateRequest($delegate, $injector) { - - // Required services - var $q = $injector.get('$q'); - var patchService = $injector.get('patchService'); - - /** - * Represents a single HTML patching operation which will be applied - * to the raw HTML of a template. The name of the patching operation - * MUST be one of the valid names defined within - * PatchOperation.Operations. - * - * @constructor - * @param {String} name - * The name of the patching operation that will be applied. Valid - * names are defined within PatchOperation.Operations. - * - * @param {String} selector - * The CSS selector which determines which elements within a - * template will be affected by the patch operation. - */ - var PatchOperation = function PatchOperation(name, selector) { - - /** - * Applies this patch operation to the template defined by the - * given root element, which must be a single element wrapped by - * JQuery. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template to which - * this patch operation should be applied. - * - * @param {Element[]} elements - * The elements which should be applied by the patch - * operation. For example, if the patch operation is inserting - * elements, these are the elements that will be inserted. - */ - this.apply = function apply(root, elements) { - PatchOperation.Operations[name](root, selector, elements); - }; - - }; - - /** - * Mapping of all valid patch operation names to their corresponding - * implementations. Each implementation accepts the same three - * parameters: the root element of the template being patched, the CSS - * selector determining which elements within the template are patched, - * and an array of elements which make up the body of the patch. - * - * @type Object. - */ - PatchOperation.Operations = { - - /** - * Inserts the given elements before the elements matched by the - * provided CSS selector. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template being - * patched. - * - * @param {String} selector - * The CSS selector which determines where this patch operation - * should be applied within the template defined by root. - * - * @param {Element[]} elements - * The contents of the patch which should be applied to the - * template defined by root at the locations selected by the - * given CSS selector. - */ - 'before' : function before(root, selector, elements) { - root.find(selector).before(elements); - }, - - /** - * Inserts the given elements after the elements matched by the - * provided CSS selector. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template being - * patched. - * - * @param {String} selector - * The CSS selector which determines where this patch operation - * should be applied within the template defined by root. - * - * @param {Element[]} elements - * The contents of the patch which should be applied to the - * template defined by root at the locations selected by the - * given CSS selector. - */ - 'after' : function after(root, selector, elements) { - root.find(selector).after(elements); - }, - - /** - * Replaces the elements matched by the provided CSS selector with - * the given elements. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template being - * patched. - * - * @param {String} selector - * The CSS selector which determines where this patch operation - * should be applied within the template defined by root. - * - * @param {Element[]} elements - * The contents of the patch which should be applied to the - * template defined by root at the locations selected by the - * given CSS selector. - */ - 'replace' : function replace(root, selector, elements) { - root.find(selector).replaceWith(elements); - }, - - /** - * Inserts the given elements within the elements matched by the - * provided CSS selector, before any existing children. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template being - * patched. - * - * @param {String} selector - * The CSS selector which determines where this patch operation - * should be applied within the template defined by root. - * - * @param {Element[]} elements - * The contents of the patch which should be applied to the - * template defined by root at the locations selected by the - * given CSS selector. - */ - 'before-children' : function beforeChildren(root, selector, elements) { - root.find(selector).prepend(elements); - }, - - /** - * Inserts the given elements within the elements matched by the - * provided CSS selector, after any existing children. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template being - * patched. - * - * @param {String} selector - * The CSS selector which determines where this patch operation - * should be applied within the template defined by root. - * - * @param {Element[]} elements - * The contents of the patch which should be applied to the - * template defined by root at the locations selected by the - * given CSS selector. - */ - 'after-children' : function afterChildren(root, selector, elements) { - root.find(selector).append(elements); - }, - - /** - * Inserts the given elements within the elements matched by the - * provided CSS selector, replacing any existing children. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template being - * patched. - * - * @param {String} selector - * The CSS selector which determines where this patch operation - * should be applied within the template defined by root. - * - * @param {Element[]} elements - * The contents of the patch which should be applied to the - * template defined by root at the locations selected by the - * given CSS selector. - */ - 'replace-children' : function replaceChildren(root, selector, elements) { - root.find(selector).empty().append(elements); - } - - }; - - /** - * Applies each of the given HTML patches to the given template. - * - * @param {Element[]} root - * The JQuery-wrapped root element of the template being - * patched. - * - * @param {String[]} patches - * An array of all HTML patches to be applied to the given - * template. - */ - var applyPatches = function applyPatches(root, patches) { - - // Apply all defined patches - angular.forEach(patches, function applyPatch(patch) { - - var elements = $(patch); - - // Filter out and parse all applicable meta tags - var operations = []; - elements = elements.filter(function filterMetaTags(index, element) { - - // Leave non-meta tags untouched - if (element.tagName !== 'META') - return true; - - // Only meta tags having a valid "name" attribute need - // to be filtered - var name = element.getAttribute('name'); - if (!name || !(name in PatchOperation.Operations)) - return true; - - // The "content" attribute must be present for any - // valid "name" meta tag - var content = element.getAttribute('content'); - if (!content) - return true; - - // Filter out and parse meta tag - operations.push(new PatchOperation(name, content)); - return false; - - }); - - // Apply each operation implied by the meta tags - angular.forEach(operations, function applyOperation(operation) { - operation.apply(root, elements); - }); - - }); - - }; - - /** - * Invokes $templateRequest() with all arguments exactly as provided, - * applying all HTML patches from any installed Guacamole extensions - * to the HTML of the requested template. - * - * @param {String} url - * The URL of the template being requested. - * - * @returns {Promise.} - * A Promise which resolves with the patched HTML contents of the - * requested template if retrieval of the template is successful. - */ - var decoratedTemplateRequest = function decoratedTemplateRequest(url) { - - var deferred = $q.defer(); - - // Chain to cached promise if it already exists - var cachedPromise = promiseCache[url]; - if (cachedPromise) { - cachedPromise.then(deferred.resolve, deferred.reject); - return deferred.promise; - } - - // Resolve promise with patched template HTML - $delegate.apply(this, arguments).then(function patchTemplate(data) { - - // Retrieve and apply all patches - patchService.getPatches().then(function applyRetrievedPatches(patches) { - - // Parse HTML into DOM tree - var root = $('
    ').html(data); - - // Apply all HTML patches to the parsed DOM - applyPatches(root, patches); - - // Transform back into HTML - deferred.resolve.call(this, root.html()); - - }, deferred.reject); - - }, deferred.reject); - - // Cache this promise for future results - promiseCache[url] = deferred.promise; - return deferred.promise; - - }; - - return decoratedTemplateRequest; - - }]); -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/index/controllers/indexController.js b/guacamole/src/main/frontend/src/app/index/controllers/indexController.js deleted file mode 100644 index 2f472a6e24..0000000000 --- a/guacamole/src/main/frontend/src/app/index/controllers/indexController.js +++ /dev/null @@ -1,400 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for the root of the application. - */ -angular.module('index').controller('indexController', ['$scope', '$injector', - function indexController($scope, $injector) { - - /** - * The number of milliseconds that should elapse between client-side - * session checks. This DOES NOT impact whether a session expires at all; - * such checks will always be server-side. This only affects how quickly - * the client-side view can recognize that a user's session has expired - * absent any action taken by the user. - * - * @type {!number} - */ - const SESSION_VALIDITY_RECHECK_INTERVAL = 15000; - - // Required types - const Error = $injector.get('Error'); - const ManagedClientState = $injector.get('ManagedClientState'); - - // Required services - const $document = $injector.get('$document'); - const $interval = $injector.get('$interval'); - const $location = $injector.get('$location'); - const $route = $injector.get('$route'); - const $window = $injector.get('$window'); - const authenticationService = $injector.get('authenticationService'); - const clipboardService = $injector.get('clipboardService'); - const guacNotification = $injector.get('guacNotification'); - const guacClientManager = $injector.get('guacClientManager'); - - /** - * The error that prevents the current page from rendering at all. If no - * such error has occurred, this will be null. - * - * @type Error - */ - $scope.fatalError = null; - - /** - * The notification service. - */ - $scope.guacNotification = guacNotification; - - /** - * All currently-active connections, grouped into their corresponding - * tiled views. - * - * @type ManagedClientGroup[] - */ - $scope.getManagedClientGroups = guacClientManager.getManagedClientGroups; - - /** - * The message to display to the user as instructions for the login - * process. - * - * @type TranslatableMessage - */ - $scope.loginHelpText = null; - - /** - * Whether the user has selected to log back in after having logged out. - * - * @type boolean - */ - $scope.reAuthenticating = false; - - /** - * The credentials that the authentication service is has already accepted, - * pending additional credentials, if any. If the user is logged in, or no - * credentials have been accepted, this will be null. If credentials have - * been accepted, this will be a map of name/value pairs corresponding to - * the parameters submitted in a previous authentication attempt. - * - * @type Object. - */ - $scope.acceptedCredentials = null; - - /** - * The credentials that the authentication service is currently expecting, - * if any. If the user is logged in, this will be null. - * - * @type Field[] - */ - $scope.expectedCredentials = null; - - /** - * Possible overall states of the client side of the web application. - * - * @enum {string} - */ - var ApplicationState = { - - /** - * A non-interactive authentication attempt failed. - */ - AUTOMATIC_LOGIN_REJECTED : 'automaticLoginRejected', - - /** - * The application has fully loaded but is awaiting credentials from - * the user before proceeding. - */ - AWAITING_CREDENTIALS : 'awaitingCredentials', - - /** - * A fatal error has occurred that will prevent the client side of the - * application from functioning properly. - */ - FATAL_ERROR : 'fatalError', - - /** - * The application has just started within the user's browser and has - * not yet settled into any specific state. - */ - LOADING : 'loading', - - /** - * The user has manually logged out. - */ - LOGGED_OUT : 'loggedOut', - - /** - * The application has fully loaded and the user has logged in - */ - READY : 'ready' - - }; - - /** - * The current overall state of the client side of the application. - * Possible values are defined by {@link ApplicationState}. - * - * @type string - */ - $scope.applicationState = ApplicationState.LOADING; - - /** - * Basic page-level information. - */ - $scope.page = { - - /** - * The title of the page. - * - * @type String - */ - title: '', - - /** - * The name of the CSS class to apply to the page body, if any. - * - * @type String - */ - bodyClassName: '' - - }; - - // Add default destination for input events - var sink = new Guacamole.InputSink(); - $document[0].body.appendChild(sink.getElement()); - - // Create event listeners at the global level - var keyboard = new Guacamole.Keyboard($document[0]); - keyboard.listenTo(sink.getElement()); - - // Broadcast keydown events - keyboard.onkeydown = function onkeydown(keysym) { - - // Do not handle key events if not logged in - if ($scope.applicationState !== ApplicationState.READY) - return true; - - // Warn of pending keydown - var guacBeforeKeydownEvent = $scope.$broadcast('guacBeforeKeydown', keysym, keyboard); - if (guacBeforeKeydownEvent.defaultPrevented) - return true; - - // If not prevented via guacBeforeKeydown, fire corresponding keydown event - var guacKeydownEvent = $scope.$broadcast('guacKeydown', keysym, keyboard); - return !guacKeydownEvent.defaultPrevented; - - }; - - // Broadcast keyup events - keyboard.onkeyup = function onkeyup(keysym) { - - // Do not handle key events if not logged in or if a notification is - // shown - if ($scope.applicationState !== ApplicationState.READY) - return; - - // Warn of pending keyup - var guacBeforeKeydownEvent = $scope.$broadcast('guacBeforeKeyup', keysym, keyboard); - if (guacBeforeKeydownEvent.defaultPrevented) - return; - - // If not prevented via guacBeforeKeyup, fire corresponding keydown event - $scope.$broadcast('guacKeyup', keysym, keyboard); - - }; - - // Release all keys when window loses focus - $window.onblur = function () { - keyboard.reset(); - }; - - /** - * Returns whether the current user has at least one active connection - * running within the current tab. - * - * @returns {!boolean} - * true if the current user has at least one active connection running - * in the current browser tab, false otherwise. - */ - var hasActiveTunnel = function hasActiveTunnel() { - - var clients = guacClientManager.getManagedClients(); - for (var id in clients) { - - switch (clients[id].clientState.connectionState) { - case ManagedClientState.ConnectionState.CONNECTING: - case ManagedClientState.ConnectionState.WAITING: - case ManagedClientState.ConnectionState.CONNECTED: - return true; - } - - } - - return false; - - }; - - // If we're logged in and not connected to anything, periodically check - // whether the current session is still valid. If the session has expired, - // refresh the auth state to reshow the login screen (rather than wait for - // the user to take some action and discover that they are not logged in - // after all). There is no need to do this if a connection is active as - // that connection activity will already automatically check session - // validity. - $interval(function cleanUpViewIfSessionInvalid() { - if (!!authenticationService.getCurrentToken() && !hasActiveTunnel()) { - authenticationService.getValidity().then(function validityDetermined(valid) { - if (!valid) - $scope.reAuthenticate(); - }); - } - }, SESSION_VALIDITY_RECHECK_INTERVAL); - - // Release all keys upon form submission (there may not be corresponding - // keyup events for key presses involved in submitting a form) - $document.on('submit', function formSubmitted() { - keyboard.reset(); - }); - - // Attempt to read the clipboard if it may have changed - $window.addEventListener('load', clipboardService.resyncClipboard, true); - $window.addEventListener('copy', clipboardService.resyncClipboard); - $window.addEventListener('cut', clipboardService.resyncClipboard); - $window.addEventListener('focus', function focusGained(e) { - - // Only recheck clipboard if it's the window itself that gained focus - if (e.target === $window) - clipboardService.resyncClipboard(); - - }, true); - - /** - * Sets the current overall state of the client side of the - * application to the given value. Possible values are defined by - * {@link ApplicationState}. The title and class associated with the - * current page are automatically reset to the standard values applicable - * to the application as a whole (rather than any specific page). - * - * @param {!string} state - * The state to assign, as defined by {@link ApplicationState}. - */ - const setApplicationState = function setApplicationState(state) { - $scope.applicationState = state; - $scope.page.title = 'APP.NAME'; - $scope.page.bodyClassName = ''; - }; - - /** - * Navigates the user back to the root of the application (or reloads the - * current route and controller if the user is already there), effectively - * forcing reauthentication. If the user is not logged in, this will result - * in the login screen appearing. - */ - $scope.reAuthenticate = function reAuthenticate() { - - $scope.reAuthenticating = true; - - // Clear out URL state to conveniently bring user back to home screen - // upon relogin - if ($location.path() !== '/') - $location.url('/'); - else - $route.reload(); - - }; - - // Display login screen if a whole new set of credentials is needed - $scope.$on('guacInvalidCredentials', function loginInvalid(event, parameters, error) { - - setApplicationState(ApplicationState.AWAITING_CREDENTIALS); - - $scope.loginHelpText = null; - $scope.acceptedCredentials = {}; - $scope.expectedCredentials = error.expected; - - }); - - // Prompt for remaining credentials if provided credentials were not enough - $scope.$on('guacInsufficientCredentials', function loginInsufficient(event, parameters, error) { - - setApplicationState(ApplicationState.AWAITING_CREDENTIALS); - - $scope.loginHelpText = error.translatableMessage; - $scope.acceptedCredentials = parameters; - $scope.expectedCredentials = error.expected; - - }); - - // Alert user to authentication errors that occur in the absence of an - // interactive login form - $scope.$on('guacLoginFailed', function loginFailed(event, parameters, error) { - - // All errors related to an interactive login form are handled elsewhere - if ($scope.applicationState === ApplicationState.AWAITING_CREDENTIALS - || error.type === Error.Type.INSUFFICIENT_CREDENTIALS - || error.type === Error.Type.INVALID_CREDENTIALS) - return; - - setApplicationState(ApplicationState.AUTOMATIC_LOGIN_REJECTED); - $scope.reAuthenticating = false; - $scope.fatalError = error; - - }); - - // Replace absolutely all content with an error message if the page itself - // cannot be displayed due to an error - $scope.$on('guacFatalPageError', function fatalPageError(error) { - setApplicationState(ApplicationState.FATAL_ERROR); - $scope.fatalError = error; - }); - - // Replace the overall user interface with an informational message if the - // user has manually logged out - $scope.$on('guacLogout', function loggedOut() { - $scope.applicationState = ApplicationState.LOGGED_OUT; - $scope.reAuthenticating = false; - }); - - // Ensure new pages always start with clear keyboard state - $scope.$on('$routeChangeStart', function routeChanging() { - keyboard.reset(); - }); - - // Update title and CSS class upon navigation - $scope.$on('$routeChangeSuccess', function(event, current, previous) { - - // If the current route is available - if (current.$$route) { - - // Clear login screen if route change was successful (and thus - // login was either successful or not required) - $scope.applicationState = ApplicationState.READY; - - // Set title - var title = current.$$route.title; - if (title) - $scope.page.title = title; - - // Set body CSS class - $scope.page.bodyClassName = current.$$route.bodyClassName || ''; - } - - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/filters/arrayFilter.js b/guacamole/src/main/frontend/src/app/index/filters/arrayFilter.js deleted file mode 100644 index 861295336e..0000000000 --- a/guacamole/src/main/frontend/src/app/index/filters/arrayFilter.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A filter for transforming an object into an array of all non-inherited - * property key/value pairs. The resulting array contains one object for each - * property in the original object, where the "key" property contains the - * original property key and the "value" property contains the original - * property value. - */ -angular.module('index').filter('toArray', [function toArrayFactory() { - - /** - * The name of the property to use to store the cached result of converting - * an object to an array. This property is added to each object converted, - * such that the same array is returned each time unless the original - * object has changed. - * - * @type String - */ - var CACHE_KEY = '_guac_toArray'; - - return function toArrayFilter(input) { - - // If no object is available, just return an empty array - if (!input) { - return []; - } - - // Translate object into array of key/value pairs - var array = []; - angular.forEach(input, function fetchValueByKey(value, key) { - array.push({ - key : key, - value : value - }); - }); - - // Sort consistently by key - array.sort(function compareKeys(a, b) { - if (a.key < b.key) return -1; - if (a.key > b.key) return 1; - return 0; - }); - - // Define non-enumerable property for holding cached array - if (!input[CACHE_KEY]) { - Object.defineProperty(input, CACHE_KEY, { - value : [], - enumerable : false, - configurable : true, - writable : true - }); - } - - // Update cache if resulting array is different - if (!angular.equals(input[CACHE_KEY], array)) - input[CACHE_KEY] = array; - - return input[CACHE_KEY]; - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/filters/escapeFilter.js b/guacamole/src/main/frontend/src/app/index/filters/escapeFilter.js deleted file mode 100644 index c1ec4e0102..0000000000 --- a/guacamole/src/main/frontend/src/app/index/filters/escapeFilter.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A filter for making sure that a string is URI-encoded and - * that any characters with special meaning for URIs are escaped. - */ -angular.module('index').filter('escape', [function escapeFilter() { - - return function escapeFilter(input) { - - if (input) - return window.encodeURIComponent(input); - - return ''; - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/filters/resolveFilter.js b/guacamole/src/main/frontend/src/app/index/filters/resolveFilter.js deleted file mode 100644 index a774d28fb5..0000000000 --- a/guacamole/src/main/frontend/src/app/index/filters/resolveFilter.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Filter which accepts a promise as input, returning the resolved value of - * that promise if/when the promise is resolved. While the promise is not - * resolved, null is returned. - */ -angular.module('index').filter('resolve', [function resolveFilter() { - - /** - * The name of the property to use to store the resolved promise value. - * - * @type {!string} - */ - const RESOLVED_VALUE_KEY = '_guac_resolveFilter_resolvedValue'; - - return function resolveFilter(promise) { - - if (!promise) - return null; - - // Assign value to RESOLVED_VALUE_KEY automatically upon resolution of - // the received promise - if (!(RESOLVED_VALUE_KEY in promise)) { - promise[RESOLVED_VALUE_KEY] = null; - promise.then((value) => { - return promise[RESOLVED_VALUE_KEY] = value; - }); - } - - // Always return cached value - return promise[RESOLVED_VALUE_KEY]; - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/indexModule.js b/guacamole/src/main/frontend/src/app/index/indexModule.js deleted file mode 100644 index 2bcc945274..0000000000 --- a/guacamole/src/main/frontend/src/app/index/indexModule.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -require('angular-module-shim.js'); -require('relocateParameters.js'); - -require('angular-translate-interpolation-messageformat'); -require('angular-translate-loader-static-files'); - -/** - * The module for the root of the application. - */ -angular.module('index', [ - - require('angular-route'), - require('angular-translate'), - - 'auth', - 'client', - 'clipboard', - 'home', - 'import', - 'login', - 'manage', - 'navigation', - 'notification', - 'rest', - 'settings', - - 'templates-main' - -]); - -// Recursively pull in all other JavaScript and CSS files as requirements (just -// like old minify-maven-plugin build) -const context = require.context('../', true, /.*\.(css|js)$/); -context.keys().forEach(key => context(key)); - diff --git a/guacamole/src/main/frontend/src/app/index/services/iconService.js b/guacamole/src/main/frontend/src/app/index/services/iconService.js deleted file mode 100644 index ed9e0574f4..0000000000 --- a/guacamole/src/main/frontend/src/app/index/services/iconService.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for updating or resetting the favicon of the current page. - */ -angular.module('index').factory('iconService', ['$rootScope', function iconService($rootScope) { - - var service = {}; - - /** - * The URL of the image used for the low-resolution (64x64) favicon. This - * MUST match the URL which is set statically within index.html. - * - * @constant - * @type String - */ - var DEFAULT_SMALL_ICON_URL = 'images/logo-64.png'; - - /** - * The URL of the image used for the high-resolution (144x144) favicon. This - * MUST match the URL which is set statically within index.html. - * - * @constant - * @type String - */ - var DEFAULT_LARGE_ICON_URL = 'images/logo-144.png'; - - /** - * JQuery-wrapped array of all link tags which point to the small, - * low-resolution page icon. - * - * @type Element[] - */ - var smallIcons = $('link[rel=icon][href="' + DEFAULT_SMALL_ICON_URL + '"]'); - - /** - * JQuery-wrapped array of all link tags which point to the large, - * high-resolution page icon. - * - * @type Element[] - */ - var largeIcons = $('link[rel=icon][href="' + DEFAULT_LARGE_ICON_URL + '"]'); - - /** - * Generates an icon by scaling the provided image to fit the given - * dimensions, returning a canvas containing the generated icon. - * - * @param {HTMLCanvasElement} canvas - * A canvas element containing the image which should be scaled to - * produce the contents of the generated icon. - * - * @param {Number} width - * The width of the icon to generate, in pixels. - * - * @param {Number} height - * The height of the icon to generate, in pixels. - * - * @returns {HTMLCanvasElement} - * A new canvas element having the given dimensions and containing the - * provided image, scaled to fit. - */ - var generateIcon = function generateIcon(canvas, width, height) { - - // Create icon canvas having the provided dimensions - var icon = document.createElement('canvas'); - icon.width = width; - icon.height = height; - - // Calculate the scale factor necessary to fit the provided image - // within the icon dimensions - var scale = Math.min(width / canvas.width, height / canvas.height); - - // Calculate the dimensions and position of the scaled image within - // the icon, offsetting the image such that it is centered - var scaledWidth = canvas.width * scale; - var scaledHeight = canvas.height * scale; - var offsetX = (width - scaledWidth) / 2; - var offsetY = (height - scaledHeight) / 2; - - // Draw the icon, scaling the provided image as necessary - var context = icon.getContext('2d'); - context.drawImage(canvas, offsetX, offsetY, scaledWidth, scaledHeight); - return icon; - - }; - - /** - * Temporarily sets the icon of the current page to the contents of the - * given canvas element. The image within the canvas element will be - * automatically scaled and centered to fit within the dimensions of the - * page icons. The page icons will be automatically reset to their original - * values upon navigation. - * - * @param {HTMLCanvasElement} canvas - * The canvas element containing the icon. If this value is null or - * undefined, this function has no effect. - */ - service.setIcons = function setIcons(canvas) { - - // Do nothing if no canvas provided - if (!canvas) - return; - - // Assign low-resolution (64x64) icon - var smallIcon = generateIcon(canvas, 64, 64); - smallIcons.attr('href', smallIcon.toDataURL('image/png')); - - // Assign high-resolution (144x144) icon - var largeIcon = generateIcon(canvas, 144, 144); - largeIcons.attr('href', largeIcon.toDataURL('image/png')); - - }; - - /** - * Resets the icons of the current page to their original values, undoing - * any previous calls to setIcons(). This function is automatically invoked - * upon navigation. - */ - service.setDefaultIcons = function setDefaultIcons() { - smallIcons.attr('href', DEFAULT_SMALL_ICON_URL); - largeIcons.attr('href', DEFAULT_LARGE_ICON_URL); - }; - - // Automatically reset page icons after navigation - $rootScope.$on('$routeChangeSuccess', function resetIcon() { - service.setDefaultIcons(); - }); - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/index/styles/animation.css b/guacamole/src/main/frontend/src/app/index/styles/animation.css deleted file mode 100644 index c2d48d5e68..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/animation.css +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * fadein: Fade from fully transparent to fully opaque. - */ -@keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-moz-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-webkit-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} - -/** - * fadeout: Fade from fully opaque to fully transparent. - */ -@keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -@-moz-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -@-webkit-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} - -/** - * popin: Increase in size and opacity from invisibly tiny and transparent to - * full size and opaque. - */ -@keyframes popin { - from { transform: scale(0); opacity: 0; } - to { transform: scale(1); } -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/automatic-login-rejected.css b/guacamole/src/main/frontend/src/app/index/styles/automatic-login-rejected.css deleted file mode 100644 index d034f81f10..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/automatic-login-rejected.css +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.automatic-login-rejected-modal guac-modal { - background: white; - z-index: 20; -} - -.automatic-login-rejected-modal .notification { - display: inline-block; - max-width: 5in; - padding: 1em; - width: 100%; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/buttons.css b/guacamole/src/main/frontend/src/app/index/styles/buttons.css deleted file mode 100644 index 2f2ce9e2e0..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/buttons.css +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -a.button { - cursor: default; - display: inline-block; -} - -input[type="submit"], button, a.button { - - -webkit-appearance: none; - text-decoration: none; - - background-color: #3C3C3C; - border: 1px solid rgba(0, 0, 0, 0.4); - - color: white; - text-shadow: -1px -1px rgba(0, 0, 0, 0.3); - font-size: 1em; - font-weight: bold; - font-family: Carlito, FreeSans, Helvetica, Arial, sans-serif; - - padding: 0.35em 1em; - min-width: 5em; - margin: 0.25em; - - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25); - -} - -input[type="submit"]:hover, button:hover, a.button:hover { - background-color: #5A5A5A; -} - -input[type="submit"]:active, button:active, a.button:active { - - background-color: #2C2C2C; - - box-shadow: - inset 1px 1px 0.25em rgba(0, 0, 0, 0.25), - -1px -1px 0.25em rgba(0, 0, 0, 0.25), - 1px 1px 0.25em rgba(255, 255, 255, 0.25); -} - -button.danger, a.button.danger { - background: #A43; -} - -button.danger:hover, a.button.danger:hover { - background: #C54; -} - -button.danger:active, a.button.danger:active { - background: #932; -} - -input[type="submit"]:disabled, button:disabled, button.danger:disabled { - background-color: #3C3C3C; - color: rgba(255, 255, 255, 0.5); - opacity: 0.75; -} - -.button.logout, button.logout, -.button.reconnect, button.reconnect, -.button.manage, button.manage, -.button.back, button.back, -.button.home, button.home, -.button.change-password, button.change-password { - position: relative; - padding-left: 1.8em; -} - -.button.logout::before, button.logout::before, -.button.reconnect::before, button.reconnect::before, -.button.manage::before, button.manage::before, -.button.back::before, button.back::before, -.button.home::before, button.home::before, -.button.change-password::before, button.change-password::before { - content: ' '; - position: absolute; - left: 0; - top: 0; - bottom: 0; - width: 1.8em; - background-repeat: no-repeat; - background-size: 1em; - background-position: 0.5em 0.45em; -} - -.button.logout::before, -button.logout::before { - background-image: url('images/action-icons/guac-logout.svg'); -} - -.button.reconnect::before, -button.reconnect::before { - background-image: url('images/circle-arrows.svg'); -} - -.button.manage::before, -button.manage::before { - background-image: url('images/action-icons/guac-config.svg'); -} - -.button.back::before, -button.back::before { - background-image: url('images/action-icons/guac-back.svg'); -} - -.button.home::before, -button.home::before { - background-image: url('images/action-icons/guac-home.svg'); -} - -.button.change-password::before, -button.change-password::before { - background-image: url('images/action-icons/guac-key.svg'); -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/cloak.css b/guacamole/src/main/frontend/src/app/index/styles/cloak.css deleted file mode 100644 index 701107bdfe..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/cloak.css +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * Hide portions of DOM by default until Angular has finished loading, - * compiling, etc. - */ - -*[ng-cloak], .translate-cloak { - display: none !important; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/fatal-page-error.css b/guacamole/src/main/frontend/src/app/index/styles/fatal-page-error.css deleted file mode 100644 index 26841189c9..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/fatal-page-error.css +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.fatal-page-error-modal guac-modal { - z-index: 30; -} - -.fatal-page-error { - display: inline-block; - width: 100%; - max-width: 5in; - padding: 1em; - text-align: left; -} - -.fatal-page-error h1 { - text-transform: uppercase; - padding: 0; - padding-right: 1em; -} - -.fatal-page-error h1::before { - content: ' '; - display: inline-block; - background: url('images/warning.svg'); - background-repeat: no-repeat; - height: 1em; - width: 1em; - background-size: contain; - margin: 0 0.25em; - margin-bottom: -0.2em; -} - -/* Ensure fatal error is initially hidden, fading the error message in when - * needed */ - -.fatal-page-error-outer { - visibility: hidden; - opacity: 0; - transition: opacity, visibility; - transition-duration: 0.25s; -} - -.shown.fatal-page-error-outer { - visibility: visible; - opacity: 1; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/font-carlito.css b/guacamole/src/main/frontend/src/app/index/styles/font-carlito.css deleted file mode 100644 index e7edbd2f89..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/font-carlito.css +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * The Carlito font is licensed under the SIL Open Font License, and thus is - * freely redistributable so long as it is distributed with software. - * - * The SIL OFL license can be found at http://scripts.sil.org/OFL or in the - * "LICENSE" file within the same directory as the Carlito-*.woff font files. - */ - -@font-face { - font-family: 'Carlito'; - font-weight: normal; - font-style: normal; - src: url('fonts/carlito/Carlito-Regular.woff') format('woff'); -} - -@font-face { - font-family: 'Carlito'; - font-weight: bold; - font-style: normal; - src: url('fonts/carlito/Carlito-Bold.woff') format('woff'); -} - -@font-face { - font-family: 'Carlito'; - font-weight: normal; - font-style: italic; - src: url('fonts/carlito/Carlito-Italic.woff') format('woff'); -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/headers.css b/guacamole/src/main/frontend/src/app/index/styles/headers.css deleted file mode 100644 index 457eb5210b..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/headers.css +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -h1 { - - margin: 0; - padding: 0.5em; - - font-size: 2em; - vertical-align: middle; - text-align: center; - -} - -h2 { - font-size: 1.25em; - font-weight: bold; - text-transform: uppercase; - padding: 0.5em; - margin: 0; -} - -.header { - - border-bottom: 1px solid rgba(0, 0, 0, 0.125); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.125); - background: rgba(0, 0, 0, 0.04); - - margin-bottom: 0; - margin-top: 0; - border-top: none; - width: 100%; - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: row; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: horizontal; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: horizontal; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: row; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: row; - -} - -.header.tabbed { - margin-bottom: 0; -} - -.header:not(.ng-hide) ~ * .header, -.header:not(.ng-hide) ~ .header { - border-top: 1px solid rgba(0, 0, 0, 0.125); -} - -.header h2 { - -ms-flex: 1 1 auto; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - flex: 1 1 auto; -} - -.header .filter { - margin: 0; - padding: 0.5em; -} - -.header .filter input { - -moz-border-radius: 0; - -webkit-border-radius: 0; - -khtml-border-radius: 0; - border-radius: 0; - border: none; - border-left: 1px solid rgba(0, 0, 0, 0.125); - background-color: transparent; -} - -.header:not(.ng-hide) ~ .header .user-menu { - display: none; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/input.css b/guacamole/src/main/frontend/src/app/index/styles/input.css deleted file mode 100644 index 4141c768cd..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/input.css +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -input[type=checkbox], input[type=number], input[type=text], input[type=email], input[type=radio], label, textarea { - -webkit-tap-highlight-color: rgba(128,192,128,0.5); -} - -div.location, input[type=text], input[type=email], input[type=number], input[type=password], textarea { - border: 1px solid #777; - -moz-border-radius: 0.2em; - -webkit-border-radius: 0.2em; - -khtml-border-radius: 0.2em; - border-radius: 0.2em; - width: 100%; - max-width: 16em; - padding: 0.25em; - font-size: 0.8em; - background: white; - cursor: text; -} - -textarea { - max-width: none; - width: 30em; - height: 10em; - white-space: pre; - word-wrap: normal; - overflow: auto; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/lists.css b/guacamole/src/main/frontend/src/app/index/styles/lists.css deleted file mode 100644 index 80df4917c7..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/lists.css +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.user, -.user-group, -.connection-group, -.connection { - cursor: pointer; -} - -.user a, -.user-group a, -.connection a, -.connection-group a { - text-decoration:none; - color: black; -} - -.user a:hover, -.user-group a:hover, -.connection a:hover, -.connection-group a:hover { - text-decoration:none; - color: black; -} - -.user a:visited, -.user-group a:visited, -.connection a:visited, -.connection-group a:visited { - text-decoration:none; - color: black; -} - -.recent-connections .connection:hover { - background: #CDA; -} - -.recent-connections .connection .thumbnail { - display: block; - margin: 0.5em; -} - -.recent-connections .connection .thumbnail > * { - border: 1px solid black; - background: black; - box-shadow: 1px 1px 5px black; - max-width: 75%; - display: inline-block; -} - -.caption * { - vertical-align: middle; -} - -.caption .choice { - display: inline-block; -} - -.caption .name { - margin-left: 0.25em; -} - -.placeholder { - - color: rgba(255, 255, 255, 0.5); - text-shadow: -1px -1px rgba(0, 0, 0, 0.5); - text-align: center; - opacity: 0.5; - - font-size: 2em; - font-weight: bolder; - -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/loading.css b/guacamole/src/main/frontend/src/app/index/styles/loading.css deleted file mode 100644 index d7d81aeefa..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/loading.css +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.loading { - position: relative; - min-height: 200px; -} - -.view.loading { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.loading * { - visibility: hidden; -} - -.loading::before { - - display: block; - position: absolute; - content: ''; - - /* Dictated by size of image */ - width: 96px; - height: 96px; - margin-left: -48px; - margin-top: -48px; - - top: 50%; - left: 50%; - - background-image: url('images/cog.svg'); - background-size: 96px 96px; - background-position: center center; - background-repeat: no-repeat; - - animation: spinning-cog 4s linear infinite; - -moz-animation: spinning-cog 4s linear infinite; - -webkit-animation: spinning-cog 4s linear infinite; - -} - -@keyframes spinning-cog { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -@-moz-keyframes spinning-cog { - 0% { -moz-transform: rotate(0deg); } - 100% { -moz-transform: rotate(360deg); } -} - -@-webkit-keyframes spinning-cog { - 0% { -webkit-transform: rotate(0deg); } - 100% { -webkit-transform: rotate(360deg); } -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/logged-out.css b/guacamole/src/main/frontend/src/app/index/styles/logged-out.css deleted file mode 100644 index 531ef00cd1..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/logged-out.css +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.logged-out-modal guac-modal { - background: white; - z-index: 20; -} - -.logged-out-modal .notification { - display: inline-block; - max-width: 3in; - width: 100%; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/other-connections.css b/guacamole/src/main/frontend/src/app/index/styles/other-connections.css deleted file mode 100644 index 3fc8ff3848..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/other-connections.css +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#other-connections .client-panel { - - display: none; - position: fixed; - right: 0; - bottom: 0; - - border: 1px solid rgba(255, 255, 255, 0.25); - background: rgba(0, 0, 0, 0.25); - max-width: 100%; - white-space: nowrap; - transition: max-width 0.125s, width 0.125s; - - /* Render above modal status */ - z-index: 20; - -} - -#other-connections .client-panel.has-clients { - display: block; -} - -#other-connections .client-panel.hidden { - max-width: 16px; -} - -#other-connections .client-panel-handle { - - position: absolute; - left: 0; - bottom: 0; - height: 100%; - width: 16px; - z-index: 1; - - background-color: white; - background-repeat: no-repeat; - background-size: contain; - background-position: center center; - background-image: url(images/arrows/right.svg); - opacity: 0.5; - -} - -#other-connections .client-panel-handle:hover { - opacity: 0.75; -} - -#other-connections .client-panel.hidden .client-panel-handle { - background-image: url(images/arrows/left.svg); -} - -#other-connections .client-panel-connection-list { - - text-align: right; - - margin: 0; - padding: 0; - padding-left: 16px; - - overflow-x: auto; - overflow-y: hidden; - -} - -#other-connections .client-panel-connection { - - display: inline-block; - position: relative; - - margin: 0.5em; - border: 1px solid white; - background: black; - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); - - animation: 0.1s linear 0s popin; - opacity: 0.5; - transition: opacity 0.25s; - - max-height: 128px; - overflow: hidden; - vertical-align: middle; - -} - -#other-connections .client-panel-connection a[href]::before { - - display: block; - content: ' '; - - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 100%; - z-index: 1; - - background: url('images/warning-white.svg'); - background-size: 48px; - background-position: center; - background-repeat: no-repeat; - background-color: black; - - opacity: 0; - transition: opacity 0.25s; - -} - -#other-connections .client-panel-connection.needs-attention a[href]::before { - opacity: 0.75; -} - -#other-connections button.close-other-connection { - - position: absolute; - top: 0; - right: 0; - z-index: 2; - - margin: 0; - padding: 4px; - min-width: 0; - border: none; - background: transparent; - box-shadow: none; - text-shadow: none; - - opacity: 0.5; - line-height: 1; - -} - -#other-connections button.close-other-connection:hover { - opacity: 1; -} - -#other-connections button.close-other-connection img { - background: #A43; - border-radius: 18px; - width: 100%; - max-width: 18px; - padding: 3px; -} - -#other-connections button.close-other-connection:hover img { - background: #C54; -} - -#other-connections .client-panel.hidden .client-panel-connection-list { - /* Hide scrollbar when panel is hidden (will be visible through panel - * show/hide button otherwise) */ - overflow-x: hidden; -} - -#other-connections .client-panel.hidden .client-panel-connection { - /* Hide thumbnails when panel is hidden (will be visible through panel - * show/hide button otherwise) */ - visibility: hidden; -} - -#other-connections .client-panel-connection .name { - - position: absolute; - padding: 0.25em 0.5em; - left: 0; - right: 0; - bottom: 0; - z-index: 2; - - text-align: left; - color: white; - background: rgba(0, 0, 0, 0.5); - font-size: 0.75em; - font-weight: bold; - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - -} - -#other-connections .client-panel-connection:hover { - opacity: 1; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/sorted-tables.css b/guacamole/src/main/frontend/src/app/index/styles/sorted-tables.css deleted file mode 100644 index 70c43bb1ba..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/sorted-tables.css +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -table.sorted { - border-collapse: collapse; -} - -table.sorted th { - background: rgba(0, 0, 0, 0.125); - font-weight: normal; -} - -table.sorted th, -table.sorted td { - border: 1px solid #AAA; - padding: 0.5em 1em; -} - -table.sorted th.sortable { - cursor: pointer; -} - -table.sorted th.sort-primary { - font-weight: bold; - padding-right: 0; -} - -table.sorted th.sort-primary:after { - - display: inline-block; - width: 1em; - height: 1em; - vertical-align: middle; - content: ' '; - - background-size: 1em 1em; - background-position: right center; - background-repeat: no-repeat; - background-image: url('images/arrows/down.svg'); - -} - -table.sorted th.sort-primary.sort-descending:after { - background-image: url('images/arrows/up.svg'); -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/status.css b/guacamole/src/main/frontend/src/app/index/styles/status.css deleted file mode 100644 index 7fd63672dc..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/status.css +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.global-status-modal guac-modal { - background: rgba(0, 0, 0, 0.5); -} - -.global-status-modal .notification { - - width: 75%; - max-width: 5in; - margin-left: auto; - margin-right: auto; - overflow: auto; - - text-align: left; - -} - -.global-status-modal .notification .body { - margin: 1.25em; -} - -.global-status-modal .notification .buttons { - margin: 1em; -} diff --git a/guacamole/src/main/frontend/src/app/index/styles/ui.css b/guacamole/src/main/frontend/src/app/index/styles/ui.css deleted file mode 100644 index 453831fa8a..0000000000 --- a/guacamole/src/main/frontend/src/app/index/styles/ui.css +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -* { - -webkit-tap-highlight-color: rgba(0,0,0,0); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -body { - background: white; - font-family: Carlito, FreeSans, Helvetica, Arial, sans-serif; - padding: 0; - margin: 0; -} - -img { - border: none; - vertical-align: middle; -} - -div.section { - margin: 1em; - padding: 0; -} - -/* - * List elements - */ - -.list-item { - - display: block; - text-align: left; - cursor: pointer; - - position: relative; - -} - -.icon { - width: 24px; - height: 24px; - background-size: 16px 16px; - -moz-background-size: 16px 16px; - -webkit-background-size: 16px 16px; - -khtml-background-size: 16px 16px; - background-repeat: no-repeat; - background-position: center center; - display: inline-block; - vertical-align: middle; -} - -.list-item * { - vertical-align: middle; -} - -.list-item .caption { - padding: 0.1em; -} - -.list-item .caption:after { - clear: right; - content: ""; - display: block; -} - -.list-item .name { - color: black; - font-weight: normal; - padding: 0.1em; - margin-left: 0.25em; -} - -.list-item .usage { - float: right; - font-style: italic; - color: gray; -} - -.list-item.in-use { - opacity: 0.5; -} - -.choice .list-item.in-use { - opacity: 1; -} - -/* - * List element styling - */ - -.list-item.selected { - background: #DEB; -} - -.caption.active * { - opacity: 0.5; -} - -.caption .activeUserCount { - font-style: italic; - margin-right: 1em; - float: right; -} - -.list-item:not(.selected) .caption:hover { - background: #CDA; -} - -.choice .list-item { - display: inline-block; -} - -.choice input[type='checkbox'] { - vertical-align: top; - height: 24px; - padding: 0; - margin: 0; -} - -.disabled .list-item:not(.selected) { - opacity: 0.25; -} - -.disabled .list-item:not(.selected):hover { - background: inherit; -} - -/* - * List element icons - */ - -.icon.user { - background-image: url('images/user-icons/guac-user.svg'); -} - -.icon.user.add { - background-image: url('images/action-icons/guac-user-add.svg'); -} - -.icon.user-group { - background-image: url('images/user-icons/guac-user-group.svg'); -} - -.icon.user-group.add { - background-image: url('images/action-icons/guac-user-group-add.svg'); -} - -.icon.connection { - background-image: url('images/protocol-icons/guac-plug.svg'); -} - -.icon.connection.add { - background-image: url('images/action-icons/guac-monitor-add.svg'); -} - -.connection .icon, -.connection-group .icon, -.sharing-profile .icon { - display: inline-block; - width: 24px; - height: 24px; - background-size: 16px 16px; - -moz-background-size: 16px 16px; - -webkit-background-size: 16px 16px; - -khtml-background-size: 16px 16px; - background-repeat: no-repeat; - background-position: center center; -} - -.connection-group > .caption .icon { - background-image: url('images/folder-closed.svg'); -} - -.connection-group.expanded > .caption .icon { - background-image: url('images/folder-open.svg'); -} - -.connection .icon { - background-image: url('images/protocol-icons/guac-plug.svg'); -} - -.connection .icon.kubernetes, -.connection .icon.ssh, -.connection .icon.telnet { - background-image: url('images/protocol-icons/guac-text.svg'); -} - -.connection .icon.vnc, -.connection .icon.rdp { - background-image: url('images/protocol-icons/guac-monitor.svg'); -} - -.sharing-profile .icon { - background-image: url('images/share.svg'); -} - -/* - * Groups - */ - -.expandable > .children { - margin-left: 13px; - padding-left: 13px; -} - -.connection-group.empty.balancer .icon { - background-image: url('images/protocol-icons/guac-monitor.svg'); -} - -.expandable.expanded > .children > .list-item { - position: relative; -} - -.expandable.expanded > .children > .list-item:before, -.expandable.expanded > .children > .list-item:after { - display: block; - content: ' '; - position: absolute; - z-index: -1; -} - -.expandable.expanded > .children > .list-item:before { - border-left: 1px solid #BBB; - left: -13px; - top: -0.75em; - bottom: 0; -} - -.expandable.expanded > .children > .list-item:last-child:before { - height: 1.5em; -} - -.expandable.expanded > .children > .list-item:after { - display: block; - content: ' '; - border-bottom: 1px solid #BBB; - left: -13px; - width: 13px; - top: 0.75em; -} - -.expandable > .caption .icon.expand { - background-image: url('images/group-icons/guac-closed.svg'); -} - -.expandable.expanded > .caption .icon.expand { - background-image: url('images/group-icons/guac-open.svg'); -} - -.expandable.empty > .caption .icon.expand { - opacity: 0.25; - background-image: url('images/group-icons/guac-open.svg'); -} - -.history th, -.history td { - padding-left: 1em; - padding-right: 1em; -} - -.buttons { - text-align: center; - margin: 1em; -} diff --git a/guacamole/src/main/frontend/src/app/list/directives/guacFilter.js b/guacamole/src/main/frontend/src/app/list/directives/guacFilter.js deleted file mode 100644 index 5a284d6fba..0000000000 --- a/guacamole/src/main/frontend/src/app/list/directives/guacFilter.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides a filtering text input field which automatically - * produces a filtered subset of the elements of some given array. - */ -angular.module('list').directive('guacFilter', [function guacFilter() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The property to which a subset of the provided array will be - * assigned. - * - * @type Array - */ - filteredItems : '=', - - /** - * The placeholder text to display within the filter input field - * when no filter has been provided. - * - * @type String - */ - placeholder : '&', - - /** - * An array of objects to filter. A subset of this array will be - * exposed as filteredItems. - * - * @type Array - */ - items : '&', - - /** - * An array of expressions to filter against for each object in the - * items array. These expressions must be Angular expressions - * which resolve to properties on the objects in the items array. - * - * @type String[] - */ - properties : '&' - - }, - - templateUrl: 'app/list/templates/guacFilter.html', - controller: ['$scope', '$injector', function guacFilterController($scope, $injector) { - - // Required types - var FilterPattern = $injector.get('FilterPattern'); - - /** - * The pattern object to use when filtering items. - * - * @type FilterPattern - */ - var filterPattern = new FilterPattern($scope.properties()); - - /** - * The filter search string to use to restrict the displayed items. - * - * @type String - */ - $scope.searchString = null; - - /** - * Applies the current filter predicate, filtering all provided - * items and storing the result in filteredItems. - */ - var updateFilteredItems = function updateFilteredItems() { - - var items = $scope.items(); - if (items) - $scope.filteredItems = items.filter(filterPattern.predicate); - else - $scope.filteredItems = []; - - }; - - // Recompile and refilter when pattern is changed - $scope.$watch('searchString', function searchStringChanged(searchString) { - filterPattern.compile(searchString); - updateFilteredItems(); - }); - - // Refilter when items change - $scope.$watchCollection($scope.items, function itemsChanged() { - updateFilteredItems(); - }); - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/list/directives/guacPager.js b/guacamole/src/main/frontend/src/app/list/directives/guacPager.js deleted file mode 100644 index 956abc3b53..0000000000 --- a/guacamole/src/main/frontend/src/app/list/directives/guacPager.js +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides pagination controls, along with a paginated - * subset of the elements of some given array. - */ -angular.module('list').directive('guacPager', [function guacPager() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The property to which a subset of the provided array will be - * assigned. - * - * @type Array - */ - page : '=', - - /** - * The maximum number of items per page. - * - * @type Number - */ - pageSize : '&', - - /** - * The maximum number of page choices to provide, regardless of the - * total number of pages. - * - * @type Number - */ - pageCount : '&', - - /** - * An array objects to paginate. Subsets of this array will be - * exposed as pages. - * - * @type Array - */ - items : '&' - - }, - - templateUrl: 'app/list/templates/guacPager.html', - controller: ['$scope', function guacPagerController($scope) { - - /** - * The default size of a page, if not provided via the pageSize - * attribute. - * - * @type Number - */ - var DEFAULT_PAGE_SIZE = 10; - - /** - * The default maximum number of page choices to provide, if a - * value is not providede via the pageCount attribute. - * - * @type Number - */ - var DEFAULT_PAGE_COUNT = 11; - - /** - * An array of arrays, where the Nth array contains the contents of - * the Nth page. - * - * @type Array[] - */ - var pages = []; - - /** - * The number of the first selectable page. - * - * @type Number; - */ - $scope.firstPage = 1; - - /** - * The number of the page immediately before the currently-selected - * page. - * - * @type Number; - */ - $scope.previousPage = 1; - - /** - * The number of the currently-selected page. - * - * @type Number; - */ - $scope.currentPage = 1; - - /** - * The number of the page immediately after the currently-selected - * page. - * - * @type Number; - */ - $scope.nextPage = 1; - - /** - * The number of the last selectable page. - * - * @type Number; - */ - $scope.lastPage = 1; - - /** - * An array of relevant page numbers that the user may want to jump - * to directly. - * - * @type Number[] - */ - $scope.pageNumbers = []; - - /** - * Updates the displayed page number choices. - */ - var updatePageNumbers = function updatePageNumbers() { - - // Get page count - var pageCount = $scope.pageCount() || DEFAULT_PAGE_COUNT; - - // Determine start/end of page window - var windowStart = $scope.currentPage - (pageCount - 1) / 2; - var windowEnd = windowStart + pageCount - 1; - - // Shift window as necessary if it extends beyond the first page - if (windowStart < $scope.firstPage) { - windowEnd = Math.min($scope.lastPage, windowEnd - windowStart + $scope.firstPage); - windowStart = $scope.firstPage; - } - - // Shift window as necessary if it extends beyond the last page - else if (windowEnd > $scope.lastPage) { - windowStart = Math.max(1, windowStart - windowEnd + $scope.lastPage); - windowEnd = $scope.lastPage; - } - - // Generate list of relevant page numbers - $scope.pageNumbers = []; - for (var pageNumber = windowStart; pageNumber <= windowEnd; pageNumber++) - $scope.pageNumbers.push(pageNumber); - - }; - - /** - * Iterates through the bound items array, splitting it into pages - * based on the current page size. - */ - var updatePages = function updatePages() { - - // Get current items and page size - var items = $scope.items(); - var pageSize = $scope.pageSize() || DEFAULT_PAGE_SIZE; - - // Clear current pages - pages = []; - - // Only split into pages if items actually exist - if (items) { - - // Split into pages of pageSize items each - for (var i = 0; i < items.length; i += pageSize) - pages.push(items.slice(i, i + pageSize)); - - } - - // Update minimum and maximum values - $scope.firstPage = 1; - $scope.lastPage = pages.length; - - // Select an appropriate page - var adjustedCurrentPage = Math.min($scope.lastPage, Math.max($scope.firstPage, $scope.currentPage)); - $scope.selectPage(adjustedCurrentPage); - - }; - - /** - * Selects the page having the given number, assigning that page to - * the property bound to the page attribute. If no such page - * exists, the property will be set to undefined instead. Valid - * page numbers begin at 1. - * - * @param {Number} page - * The number of the page to select. Valid page numbers begin - * at 1. - */ - $scope.selectPage = function selectPage(page) { - - // Select the chosen page - $scope.currentPage = page; - $scope.page = pages[page-1]; - - // Update next/previous page numbers - $scope.nextPage = Math.min($scope.lastPage, $scope.currentPage + 1); - $scope.previousPage = Math.max($scope.firstPage, $scope.currentPage - 1); - - // Update which page numbers are shown - updatePageNumbers(); - - }; - - /** - * Returns whether the given page number can be legally selected - * via selectPage(), resulting in a different page being shown. - * - * @param {Number} page - * The page number to check. - * - * @returns {Boolean} - * true if the page having the given number can be selected, - * false otherwise. - */ - $scope.canSelectPage = function canSelectPage(page) { - return page !== $scope.currentPage - && page >= $scope.firstPage - && page <= $scope.lastPage; - }; - - /** - * Returns whether the page having the given number is currently - * selected. - * - * @param {Number} page - * The page number to check. - * - * @returns {Boolean} - * true if the page having the given number is currently - * selected, false otherwise. - */ - $scope.isSelected = function isSelected(page) { - return page === $scope.currentPage; - }; - - /** - * Returns whether pages exist before the first page listed in the - * pageNumbers array. - * - * @returns {Boolean} - * true if pages exist before the first page listed in the - * pageNumbers array, false otherwise. - */ - $scope.hasMorePagesBefore = function hasMorePagesBefore() { - var firstPageNumber = $scope.pageNumbers[0]; - return firstPageNumber !== $scope.firstPage; - }; - - /** - * Returns whether pages exist after the last page listed in the - * pageNumbers array. - * - * @returns {Boolean} - * true if pages exist after the last page listed in the - * pageNumbers array, false otherwise. - */ - $scope.hasMorePagesAfter = function hasMorePagesAfter() { - var lastPageNumber = $scope.pageNumbers[$scope.pageNumbers.length - 1]; - return lastPageNumber !== $scope.lastPage; - }; - - // Update available pages when available items are changed - $scope.$watchCollection($scope.items, function itemsChanged() { - updatePages(); - }); - - // Update available pages when page size is changed - $scope.$watch($scope.pageSize, function pageSizeChanged() { - updatePages(); - }); - - // Update available page numbers when page count is changed - $scope.$watch($scope.pageCount, function pageCountChanged() { - updatePageNumbers(); - }); - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/list/directives/guacSortOrder.js b/guacamole/src/main/frontend/src/app/list/directives/guacSortOrder.js deleted file mode 100644 index 09ed787c34..0000000000 --- a/guacamole/src/main/frontend/src/app/list/directives/guacSortOrder.js +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Updates the priority of the sorting property given by "guac-sort-property" - * within the SortOrder object given by "guac-sort-order". The CSS classes - * "sort-primary" and "sort-descending" will be applied to the associated - * element depending on the priority and sort direction of the given property. - * - * The associated element will automatically be assigned the "sortable" CSS - * class. - */ -angular.module('list').directive('guacSortOrder', [function guacFocus() { - - return { - restrict: 'A', - - link: function linkGuacSortOrder($scope, $element, $attrs) { - - /** - * The object defining the sorting order. - * - * @type SortOrder - */ - var sortOrder = $scope.$eval($attrs.guacSortOrder); - - /** - * The name of the property whose priority within the sort order - * is controlled by this directive. - * - * @type String - */ - var sortProperty = $scope.$eval($attrs.guacSortProperty); - - /** - * Returns whether the sort property defined via the - * "guac-sort-property" attribute is the primary sort property of - * the associated sort order. - * - * @returns {Boolean} - * true if the sort property defined via the - * "guac-sort-property" attribute is the primary sort property, - * false otherwise. - */ - var isPrimary = function isPrimary() { - return sortOrder.primary === sortProperty; - }; - - /** - * Returns whether the primary property of the sort order is - * sorted in descending order. - * - * @returns {Boolean} - * true if the primary property of the sort order is sorted in - * descending order, false otherwise. - */ - var isDescending = function isDescending() { - return sortOrder.descending; - }; - - // Assign "sortable" class to associated element - $element.addClass('sortable'); - - // Add/remove "sort-primary" class depending on sort order - $scope.$watch(isPrimary, function primaryChanged(primary) { - $element.toggleClass('sort-primary', primary); - }); - - // Add/remove "sort-descending" class depending on sort order - $scope.$watch(isDescending, function descendingChanged(descending) { - $element.toggleClass('sort-descending', descending); - }); - - // Update sort order when clicked - $element[0].addEventListener('click', function clicked() { - $scope.$evalAsync(function updateSortOrder() { - sortOrder.togglePrimary(sortProperty); - }); - }); - - } // end guacSortOrder link function - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/list/directives/guacUserItem.js b/guacamole/src/main/frontend/src/app/list/directives/guacUserItem.js deleted file mode 100644 index 6d13cec90a..0000000000 --- a/guacamole/src/main/frontend/src/app/list/directives/guacUserItem.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which graphically represents an individual user. - */ -angular.module('list').directive('guacUserItem', [function guacUserItem() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The username of the user represented by this guacUserItem. - * - * @type String - */ - username : '=' - - }, - - templateUrl: 'app/list/templates/guacUserItem.html', - controller: ['$scope', '$injector', - function guacUserItemController($scope, $injector) { - - // Required types - var AuthenticationResult = $injector.get('AuthenticationResult'); - - // Required services - var $translate = $injector.get('$translate'); - - /** - * The string to display when listing the user having the provided - * username. Generally, this will be the username itself, but can - * also be an arbitrary human-readable representation of the user, - * or null if the display name is not yet determined. - * - * @type String - */ - $scope.displayName = null; - - /** - * Returns whether the username provided to this directive denotes - * a user that authenticated anonymously. - * - * @returns {Boolean} - * true if the username provided represents an anonymous user, - * false otherwise. - */ - $scope.isAnonymous = function isAnonymous() { - return $scope.username === AuthenticationResult.ANONYMOUS_USERNAME; - }; - - // Update display name whenever provided username changes - $scope.$watch('username', function updateDisplayName(username) { - - // If the user is anonymous, pull the display name for anonymous - // users from the translation service - if ($scope.isAnonymous()) { - $translate('LIST.TEXT_ANONYMOUS_USER') - .then(function retrieveAnonymousDisplayName(anonymousDisplayName) { - $scope.displayName = anonymousDisplayName; - }, angular.noop); - } - - // For all other users, use the username verbatim - else - $scope.displayName = username; - - }); - - }] // end controller - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/list/listModule.js b/guacamole/src/main/frontend/src/app/list/listModule.js deleted file mode 100644 index 845c8c968c..0000000000 --- a/guacamole/src/main/frontend/src/app/list/listModule.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for displaying, sorting, and filtering the contents of a list, split - * into multiple pages. - */ -angular.module('list', [ - 'auth' -]); diff --git a/guacamole/src/main/frontend/src/app/list/styles/filter.css b/guacamole/src/main/frontend/src/app/list/styles/filter.css deleted file mode 100644 index ff4b568c8b..0000000000 --- a/guacamole/src/main/frontend/src/app/list/styles/filter.css +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.filter { - margin: 0.5em 0; -} - -.filter .search-string { - background-image: url('images/magnifier.svg'); - background-repeat: no-repeat; - background-size: 1.75em; - background-position: 0.25em center; - padding: 0.5em; - padding-left: 2.25em; - width: 100%; - max-width: none; -} diff --git a/guacamole/src/main/frontend/src/app/list/styles/pager.css b/guacamole/src/main/frontend/src/app/list/styles/pager.css deleted file mode 100644 index 7baa665b87..0000000000 --- a/guacamole/src/main/frontend/src/app/list/styles/pager.css +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.pager { - text-align: center; - margin: 1em; -} - -.pager .page-numbers { - display: inline-block; - margin: 0; - padding: 0; -} - -.pager .first-page, -.pager .prev-page, -.pager .set-page, -.pager .next-page, -.pager .last-page { - cursor: pointer; - vertical-align: middle; -} - -.pager .first-page.disabled, -.pager .prev-page.disabled, -.pager .set-page.disabled, -.pager .next-page.disabled, -.pager .last-page.disabled { - cursor: auto; - opacity: 0.25; -} - -.pager .set-page, -.pager .more-pages { - display: inline-block; - padding: 0.25em; - text-align: center; - min-width: 1.25em; -} - -.pager .set-page { - text-decoration: underline; -} - -.pager .set-page.current { - cursor: auto; - text-decoration: none; - font-weight: bold; - background: rgba(0, 0, 0, 0.1); - border: 1px solid rgba(0, 0, 0, 0.1); - -moz-border-radius: 0.2em; - -webkit-border-radius: 0.2em; - -khtml-border-radius: 0.2em; - border-radius: 0.2em; -} - -.pager .icon.first-page { - background-image: url('images/action-icons/guac-first-page.svg'); -} - -.pager .icon.prev-page { - background-image: url('images/action-icons/guac-prev-page.svg'); -} - -.pager .icon.next-page { - background-image: url('images/action-icons/guac-next-page.svg'); -} - -.pager .icon.last-page { - background-image: url('images/action-icons/guac-last-page.svg'); -} diff --git a/guacamole/src/main/frontend/src/app/list/styles/user-item.css b/guacamole/src/main/frontend/src/app/list/styles/user-item.css deleted file mode 100644 index ffedd39023..0000000000 --- a/guacamole/src/main/frontend/src/app/list/styles/user-item.css +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.user-item.anonymous { - font-style: italic; - opacity: 0.5; -} diff --git a/guacamole/src/main/frontend/src/app/list/templates/guacFilter.html b/guacamole/src/main/frontend/src/app/list/templates/guacFilter.html deleted file mode 100644 index d3025be22a..0000000000 --- a/guacamole/src/main/frontend/src/app/list/templates/guacFilter.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/list/templates/guacPager.html b/guacamole/src/main/frontend/src/app/list/templates/guacPager.html deleted file mode 100644 index eac2fe8533..0000000000 --- a/guacamole/src/main/frontend/src/app/list/templates/guacPager.html +++ /dev/null @@ -1,25 +0,0 @@ -
    - - -
    -
    - - -
    ...
    - - -
      -
    • {{pageNumber}}
    • -
    - - -
    ...
    - - -
    -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/list/templates/guacUserItem.html b/guacamole/src/main/frontend/src/app/list/templates/guacUserItem.html deleted file mode 100644 index e6ea670a63..0000000000 --- a/guacamole/src/main/frontend/src/app/list/templates/guacUserItem.html +++ /dev/null @@ -1,3 +0,0 @@ -
    - {{displayName}} -
    diff --git a/guacamole/src/main/frontend/src/app/list/types/FilterPattern.js b/guacamole/src/main/frontend/src/app/list/types/FilterPattern.js deleted file mode 100644 index f67b299025..0000000000 --- a/guacamole/src/main/frontend/src/app/list/types/FilterPattern.js +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the FilterPattern class. - */ -angular.module('list').factory('FilterPattern', ['$injector', - function defineFilterPattern($injector) { - - // Required types - var FilterToken = $injector.get('FilterToken'); - var IPv4Network = $injector.get('IPv4Network'); - var IPv6Network = $injector.get('IPv6Network'); - - // Required services - var $parse = $injector.get('$parse'); - - /** - * Object which handles compilation of filtering predicates as used by - * the Angular "filter" filter. Predicates are compiled from a user- - * specified search string. - * - * @constructor - * @param {String[]} expressions - * The Angular expressions whose values are to be filtered. - */ - var FilterPattern = function FilterPattern(expressions) { - - /** - * Reference to this instance. - * - * @type FilterPattern - */ - var filterPattern = this; - - /** - * Filter predicate which simply matches everything. This function - * always returns true. - * - * @returns {Boolean} - * true. - */ - var nullPredicate = function nullPredicate() { - return true; - }; - - /** - * Array of getters corresponding to the Angular expressions provided - * to the constructor of this class. The functions returns are those - * produced by the $parse service. - * - * @type Function[] - */ - var getters = []; - - // Parse all expressions - angular.forEach(expressions, function parseExpression(expression) { - getters.push($parse(expression)); - }); - - /** - * Determines whether the given object contains properties that match - * the given string, according to the provided getters. - * - * @param {Object} object - * The object to match against. - * - * @param {String} str - * The string to match. - * - * @returns {Boolean} - * true if the object matches the given string, false otherwise. - */ - var matchesString = function matchesString(object, str) { - - // For each defined getter - for (var i=0; i < getters.length; i++) { - - // Retrieve value of current getter - var value = getters[i](object); - - // If the value matches the pattern, the whole object matches - if (String(value).toLowerCase().indexOf(str) !== -1) - return true; - - } - - // No matches found - return false; - - }; - - /** - * Determines whether the given object contains properties that match - * the given IPv4 network, according to the provided getters. - * - * @param {Object} object - * The object to match against. - * - * @param {IPv4Network} network - * The IPv4 network to match. - * - * @returns {Boolean} - * true if the object matches the given network, false otherwise. - */ - var matchesIPv4 = function matchesIPv4(object, network) { - - // For each defined getter - for (var i=0; i < getters.length; i++) { - - // Test each possible IPv4 address within the string against - // the given IPv4 network - var addresses = String(getters[i](object)).split(/[^0-9.]+/); - for (var j=0; j < addresses.length; j++) { - var value = IPv4Network.parse(addresses[j]); - if (value && network.contains(value)) - return true; - } - - } - - // No matches found - return false; - - }; - - /** - * Determines whether the given object contains properties that match - * the given IPv6 network, according to the provided getters. - * - * @param {Object} object - * The object to match against. - * - * @param {IPv6Network} network - * The IPv6 network to match. - * - * @returns {Boolean} - * true if the object matches the given network, false otherwise. - */ - var matchesIPv6 = function matchesIPv6(object, network) { - - // For each defined getter - for (var i=0; i < getters.length; i++) { - - // Test each possible IPv6 address within the string against - // the given IPv6 network - var addresses = String(getters[i](object)).split(/[^0-9A-Fa-f:]+/); - for (var j=0; j < addresses.length; j++) { - var value = IPv6Network.parse(addresses[j]); - if (value && network.contains(value)) - return true; - } - - } - - // No matches found - return false; - - }; - - - /** - * Determines whether the given object matches the given filter pattern - * token. - * - * @param {Object} object - * The object to match the token against. - * - * @param {FilterToken} token - * The token from the tokenized filter pattern to match aginst the - * given object. - * - * @returns {Boolean} - * true if the object matches the token, false otherwise. - */ - var matchesToken = function matchesToken(object, token) { - - // Match depending on token type - switch (token.type) { - - // Simple string literal - case 'LITERAL': - return matchesString(object, token.value); - - // IPv4 network address / subnet - case 'IPV4_NETWORK': - return matchesIPv4(object, token.value); - - // IPv6 network address / subnet - case 'IPV6_NETWORK': - return matchesIPv6(object, token.value); - - // Unsupported token type - default: - return false; - - } - - }; - - /** - * The current filtering predicate. - * - * @type Function - */ - this.predicate = nullPredicate; - - /** - * Compiles the given pattern string, assigning the resulting filter - * predicate. The resulting predicate will accept only objects that - * match the given pattern. - * - * @param {String} pattern - * The pattern to compile. - */ - this.compile = function compile(pattern) { - - // If no pattern provided, everything matches - if (!pattern) { - filterPattern.predicate = nullPredicate; - return; - } - - // Tokenize pattern, converting to lower case for case-insensitive matching - var tokens = FilterToken.tokenize(pattern.toLowerCase()); - - // Return predicate which matches against the value of any getter in the getters array - filterPattern.predicate = function matchesAllTokens(object) { - - // False if any token does not match - for (var i=0; i < tokens.length; i++) { - if (!matchesToken(object, tokens[i])) - return false; - } - - // True if all tokens matched - return true; - - }; - - }; - - }; - - return FilterPattern; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/list/types/FilterToken.js b/guacamole/src/main/frontend/src/app/list/types/FilterToken.js deleted file mode 100644 index d512d38db2..0000000000 --- a/guacamole/src/main/frontend/src/app/list/types/FilterToken.js +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the FilterToken class. - */ -angular.module('list').factory('FilterToken', ['$injector', - function defineFilterToken($injector) { - - // Required types - var IPv4Network = $injector.get('IPv4Network'); - var IPv6Network = $injector.get('IPv6Network'); - - /** - * An arbitrary token having an associated type and value. - * - * @constructor - * @param {String} consumed - * The input string consumed to produce this token. - * - * @param {String} type - * The type of this token. Each legal type name is a property within - * FilterToken.Types. - * - * @param {Object} value - * The value of this token. The type of this value is determined by - * the token type. - */ - var FilterToken = function FilterToken(consumed, type, value) { - - /** - * The input string that was consumed to produce this token. - * - * @type String - */ - this.consumed = consumed; - - /** - * The type of this token. Each legal type name is a property within - * FilterToken.Types. - * - * @type String - */ - this.type = type; - - /** - * The value of this token. - * - * @type Object - */ - this.value = value; - - }; - - /** - * All legal token types, and corresponding functions which match them. - * Each function returns the parsed token, or null if no such token was - * found. - * - * @type Object. - */ - FilterToken.Types = { - - /** - * An IPv4 address or subnet. The value of an IPV4_NETWORK token is an - * IPv4Network. - */ - IPV4_NETWORK: function parseIPv4(str) { - - var pattern = /^\S+/; - - // Read first word via regex - var matches = pattern.exec(str); - if (!matches) - return null; - - // Validate and parse as IPv4 address - var network = IPv4Network.parse(matches[0]); - if (!network) - return null; - - return new FilterToken(matches[0], 'IPV4_NETWORK', network); - - }, - - /** - * An IPv6 address or subnet. The value of an IPV6_NETWORK token is an - * IPv6Network. - */ - IPV6_NETWORK: function parseIPv6(str) { - - var pattern = /^\S+/; - - // Read first word via regex - var matches = pattern.exec(str); - if (!matches) - return null; - - // Validate and parse as IPv6 address - var network = IPv6Network.parse(matches[0]); - if (!network) - return null; - - return new FilterToken(matches[0], 'IPV6_NETWORK', network); - - }, - - /** - * A string literal, which may be quoted. The value of a LITERAL token - * is a String. - */ - LITERAL: function parseLiteral(str) { - - var pattern = /^"([^"]*)"|^\S+/; - - // Validate against pattern - var matches = pattern.exec(str); - if (!matches) - return null; - - // If literal is quoted, parse within the quotes - if (matches[1]) - return new FilterToken(matches[0], 'LITERAL', matches[1]); - - // Otherwise, literal is unquoted - return new FilterToken(matches[0], 'LITERAL', matches[0]); - - }, - - /** - * Arbitrary contiguous whitespace. The value of a WHITESPACE token is - * a String. - */ - WHITESPACE: function parseWhitespace(str) { - - var pattern = /^\s+/; - - // Validate against pattern - var matches = pattern.exec(str); - if (!matches) - return null; - - // Generate token from matching whitespace - return new FilterToken(matches[0], 'WHITESPACE', matches[0]); - - } - - }; - - /** - * Tokenizes the given string, returning an array of tokens. Whitespace - * tokens are dropped. - * - * @param {String} str - * The string to tokenize. - * - * @returns {FilterToken[]} - * All tokens identified within the given string, in order. - */ - FilterToken.tokenize = function tokenize(str) { - - var tokens = []; - - /** - * Returns the first token on the current string, removing the token - * from that string. - * - * @returns FilterToken - * The first token on the string, or null if no tokens match. - */ - var popToken = function popToken() { - - // Attempt to find a matching token - for (var type in FilterToken.Types) { - - // Get matching function for current type - var matcher = FilterToken.Types[type]; - - // If token matches, return the matching group - var token = matcher(str); - if (token) { - str = str.substring(token.consumed.length); - return token; - } - - } - - // No match - return null; - - }; - - // Tokenize input until no input remains - while (str) { - - // Remove first token - var token = popToken(); - if (!token) - break; - - // Add token to tokens array, if not whitespace - if (token.type !== 'WHITESPACE') - tokens.push(token); - - } - - return tokens; - - }; - - return FilterToken; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/list/types/IPv4Network.js b/guacamole/src/main/frontend/src/app/list/types/IPv4Network.js deleted file mode 100644 index 564eb7f0cb..0000000000 --- a/guacamole/src/main/frontend/src/app/list/types/IPv4Network.js +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the IPv4Network class. - */ -angular.module('list').factory('IPv4Network', [ - function defineIPv4Network() { - - /** - * Represents an IPv4 network as a pairing of base address and netmask, - * both of which are in binary form. To obtain an IPv4Network from - * standard CIDR or dot-decimal notation, use IPv4Network.parse(). - * - * @constructor - * @param {Number} address - * The IPv4 address of the network in binary form. - * - * @param {Number} netmask - * The IPv4 netmask of the network in binary form. - */ - var IPv4Network = function IPv4Network(address, netmask) { - - /** - * Reference to this IPv4Network. - * - * @type IPv4Network - */ - var network = this; - - /** - * The binary address of this network. This will be a 32-bit quantity. - * - * @type Number - */ - this.address = address; - - /** - * The binary netmask of this network. This will be a 32-bit quantity. - * - * @type Number - */ - this.netmask = netmask; - - /** - * Tests whether the given network is entirely within this network, - * taking into account the base addresses and netmasks of both. - * - * @param {IPv4Network} other - * The network to test. - * - * @returns {Boolean} - * true if the other network is entirely within this network, false - * otherwise. - */ - this.contains = function contains(other) { - return network.address === (other.address & other.netmask & network.netmask); - }; - - }; - - /** - * Parses the given string as an IPv4 address or subnet, returning an - * IPv4Network object which describes that address or subnet. - * - * @param {String} str - * The string to parse. - * - * @returns {IPv4Network} - * The parsed network, or null if the given string is not valid. - */ - IPv4Network.parse = function parse(str) { - - // Regex which matches the general form of IPv4 addresses - var pattern = /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})(?:\/([0-9]{1,2}))?$/; - - // Parse IPv4 address via regex - var match = pattern.exec(str); - if (!match) - return null; - - // Parse netmask, if given - var netmask = 0xFFFFFFFF; - if (match[5]) { - var bits = parseInt(match[5]); - if (bits > 0 && bits <= 32) - netmask = 0xFFFFFFFF << (32 - bits); - } - - // Read each octet onto address - var address = 0; - for (var i=1; i <= 4; i++) { - - // Validate octet range - var octet = parseInt(match[i]); - if (octet > 255) - return null; - - // Shift on octet - address = (address << 8) | octet; - - } - - return new IPv4Network(address, netmask); - - }; - - return IPv4Network; - -}]); diff --git a/guacamole/src/main/frontend/src/app/list/types/IPv6Network.js b/guacamole/src/main/frontend/src/app/list/types/IPv6Network.js deleted file mode 100644 index 7fa85cbf4a..0000000000 --- a/guacamole/src/main/frontend/src/app/list/types/IPv6Network.js +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the IPv6Network class. - */ -angular.module('list').factory('IPv6Network', [ - function defineIPv6Network() { - - /** - * Represents an IPv6 network as a pairing of base address and netmask, - * both of which are in binary form. To obtain an IPv6Network from - * standard CIDR notation, use IPv6Network.parse(). - * - * @constructor - * @param {Number[]} addressGroups - * Array of eight IPv6 address groups in binary form, each group being - * 16-bit number. - * - * @param {Number[]} netmaskGroups - * Array of eight IPv6 netmask groups in binary form, each group being - * 16-bit number. - */ - var IPv6Network = function IPv6Network(addressGroups, netmaskGroups) { - - /** - * Reference to this IPv6Network. - * - * @type IPv6Network - */ - var network = this; - - /** - * The 128-bit binary address of this network as an array of eight - * 16-bit numbers. - * - * @type Number[] - */ - this.addressGroups = addressGroups; - - /** - * The 128-bit binary netmask of this network as an array of eight - * 16-bit numbers. - * - * @type Number - */ - this.netmaskGroups = netmaskGroups; - - /** - * Tests whether the given network is entirely within this network, - * taking into account the base addresses and netmasks of both. - * - * @param {IPv6Network} other - * The network to test. - * - * @returns {Boolean} - * true if the other network is entirely within this network, false - * otherwise. - */ - this.contains = function contains(other) { - - // Test that each masked 16-bit quantity matches the address - for (var i=0; i < 8; i++) { - if (network.addressGroups[i] !== (other.addressGroups[i] - & other.netmaskGroups[i] - & network.netmaskGroups[i])) - return false; - } - - // All 16-bit numbers match - return true; - - }; - - }; - - /** - * Generates a netmask having the given number of ones on the left side. - * All other bits within the netmask will be zeroes. The resulting netmask - * will be an array of eight numbers, where each number corresponds to a - * 16-bit group of an IPv6 netmask. - * - * @param {Number} bits - * The number of ones to include on the left side of the netmask. All - * other bits will be zeroes. - * - * @returns {Number[]} - * The generated netmask, having the given number of ones. - */ - var generateNetmask = function generateNetmask(bits) { - - var netmask = []; - - // Only generate up to 128 bits - bits = Math.min(128, bits); - - // Add any contiguous 16-bit sections of ones - while (bits >= 16) { - netmask.push(0xFFFF); - bits -= 16; - } - - // Add remaining ones - if (bits > 0 && bits <= 16) - netmask.push(0xFFFF & (0xFFFF << (16 - bits))); - - // Add remaining zeroes - while (netmask.length < 8) - netmask.push(0); - - return netmask; - - }; - - /** - * Splits the given IPv6 address or partial address into its corresponding - * 16-bit groups. - * - * @param {String} str - * The IPv6 address or partial address to split. - * - * @returns Number[] - * The numeric values of all 16-bit groups within the given IPv6 - * address. - */ - var splitAddress = function splitAddress(str) { - - var address = []; - - // Split address into groups - var groups = str.split(':'); - - // Parse the numeric value of each group - angular.forEach(groups, function addGroup(group) { - var value = parseInt(group || '0', 16); - address.push(value); - }); - - return address; - - }; - - /** - * Parses the given string as an IPv6 address or subnet, returning an - * IPv6Network object which describes that address or subnet. - * - * @param {String} str - * The string to parse. - * - * @returns {IPv6Network} - * The parsed network, or null if the given string is not valid. - */ - IPv6Network.parse = function parse(str) { - - // Regex which matches the general form of IPv6 addresses - var pattern = /^([0-9a-f]{0,4}(?::[0-9a-f]{0,4}){0,7})(?:\/([0-9]{1,3}))?$/; - - // Parse rudimentary IPv6 address via regex - var match = pattern.exec(str); - if (!match) - return null; - - // Extract address and netmask from parse results - var unparsedAddress = match[1]; - var unparsedNetmask = match[2]; - - // Parse netmask - var netmask; - if (unparsedNetmask) - netmask = generateNetmask(parseInt(unparsedNetmask)); - else - netmask = generateNetmask(128); - - var address; - - // Separate based on the double-colon, if present - var doubleColon = unparsedAddress.indexOf('::'); - - // If no double colon, just split into groups - if (doubleColon === -1) - address = splitAddress(unparsedAddress); - - // Otherwise, split either side of the double colon and pad with zeroes - else { - - // Parse either side of the double colon - var leftAddress = splitAddress(unparsedAddress.substring(0, doubleColon)); - var rightAddress = splitAddress(unparsedAddress.substring(doubleColon + 2)); - - // Pad with zeroes up to address length - var remaining = 8 - leftAddress.length - rightAddress.length; - while (remaining > 0) { - leftAddress.push(0); - remaining--; - } - - address = leftAddress.concat(rightAddress); - - } - - // Validate length of address - if (address.length !== 8) - return null; - - return new IPv6Network(address, netmask); - - }; - - return IPv6Network; - -}]); diff --git a/guacamole/src/main/frontend/src/app/list/types/SortOrder.js b/guacamole/src/main/frontend/src/app/list/types/SortOrder.js deleted file mode 100644 index ad3bc56dac..0000000000 --- a/guacamole/src/main/frontend/src/app/list/types/SortOrder.js +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the SortOrder class. - */ -angular.module('list').factory('SortOrder', [ - function defineSortOrder() { - - /** - * Maintains a sorting predicate as required by the Angular orderBy filter. - * The order of properties sorted by the predicate can be altered while - * otherwise maintaining the sort order. - * - * @constructor - * @param {String[]} predicate - * The properties to sort by, in order of precidence. - */ - var SortOrder = function SortOrder(predicate) { - - /** - * Reference to this instance. - * - * @type SortOrder - */ - var sortOrder = this; - - /** - * The current sorting predicate. - * - * @type String[] - */ - this.predicate = predicate; - - /** - * The name of the highest-precedence sorting property. - * - * @type String - */ - this.primary = predicate[0]; - - /** - * Whether the highest-precedence sorting property is sorted in - * descending order. - * - * @type Boolean - */ - this.descending = false; - - // Handle initially-descending primary properties - if (this.primary.charAt(0) === '-') { - this.primary = this.primary.substring(1); - this.descending = true; - } - - /** - * Reorders the currently-defined predicate such that the named - * property takes precidence over all others. The property will be - * sorted in ascending order unless otherwise specified. - * - * @param {String} name - * The name of the property to reorder by. - * - * @param {Boolean} [descending=false] - * Whether the property should be sorted in descending order. By - * default, all properties are sorted in ascending order. - */ - this.reorder = function reorder(name, descending) { - - // Build ascending and descending predicate components - var ascendingName = name; - var descendingName = '-' + name; - - // Remove requested property from current predicate - sortOrder.predicate = sortOrder.predicate.filter(function notRequestedProperty(current) { - return current !== ascendingName - && current !== descendingName; - }); - - // Add property to beginning of predicate - if (descending) - sortOrder.predicate.unshift(descendingName); - else - sortOrder.predicate.unshift(ascendingName); - - // Update sorted state - sortOrder.primary = name; - sortOrder.descending = !!descending; - - }; - - /** - * Returns whether the sort order is primarily determined by the given - * property. - * - * @param {String} property - * The name of the property to check. - * - * @returns {Boolean} - * true if the sort order is primarily determined by the given - * property, false otherwise. - */ - this.isSortedBy = function isSortedBy(property) { - return sortOrder.primary === property; - }; - - /** - * Sets the primary sorting property to the given property, if not already - * set. If already set, the ascending/descending sort order is toggled. - * - * @param {String} property - * The name of the property to assign as the primary sorting property. - */ - this.togglePrimary = function togglePrimary(property) { - - // Sort in ascending order by new property, if different - if (!sortOrder.isSortedBy(property)) - sortOrder.reorder(property, false); - - // Otherwise, toggle sort order - else - sortOrder.reorder(property, !sortOrder.descending); - - }; - - }; - - return SortOrder; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/locale/localeModule.js b/guacamole/src/main/frontend/src/app/locale/localeModule.js deleted file mode 100644 index 765eb4d449..0000000000 --- a/guacamole/src/main/frontend/src/app/locale/localeModule.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for handling common localization-related tasks. - */ -angular.module('locale', []); diff --git a/guacamole/src/main/frontend/src/app/locale/services/translationLoader.js b/guacamole/src/main/frontend/src/app/locale/services/translationLoader.js deleted file mode 100644 index 2be5e6a641..0000000000 --- a/guacamole/src/main/frontend/src/app/locale/services/translationLoader.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for loading translation definition files, conforming to the - * angular-translate documentation for custom translation loaders: - * - * https://github.com/angular-translate/angular-translate/wiki/Asynchronous-loading#using-custom-loader-service - */ -angular.module('locale').factory('translationLoader', ['$injector', function translationLoader($injector) { - - // Required services - var $http = $injector.get('$http'); - var $q = $injector.get('$q'); - var cacheService = $injector.get('cacheService'); - var languageService = $injector.get('languageService'); - - /** - * Satisfies a translation request for the given key by searching for the - * translation files for each key in the given array, in order. The request - * fails only if none of the files can be found. - * - * @param {Deferred} deferred - * The Deferred object to resolve or reject depending on whether at - * least one translation file can be successfully loaded. - * - * @param {String} requestedKey - * The originally-requested language key. - * - * @param {String[]} remainingKeys - * The keys of the languages to attempt to load, in order, where the - * first key in this array is the language to try within this function - * call. The first key in the array is not necessarily the originally- - * requested language key. - */ - var satisfyTranslation = function satisfyTranslation(deferred, requestedKey, remainingKeys) { - - // Get current language key - var currentKey = remainingKeys.shift(); - - // If no languages to try, "succeed" with an empty translation (force fallback) - if (!currentKey) { - deferred.resolve('{}'); - return; - } - - /** - * Continues trying possible translation files until no possibilities - * exist. - * - * @private - */ - var tryNextTranslation = function tryNextTranslation() { - satisfyTranslation(deferred, requestedKey, remainingKeys); - }; - - // Retrieve list of supported languages - languageService.getLanguages() - - // Attempt to retrieve translation if language is supported - .then(function retrievedLanguages(languages) { - - // Skip retrieval if language is not supported - if (!(currentKey in languages)) { - tryNextTranslation(); - return; - } - - // Attempt to retrieve language - $http({ - cache : cacheService.languages, - method : 'GET', - url : 'translations/' + encodeURIComponent(currentKey) + '.json' - }) - - // Resolve promise if translation retrieved successfully - .then(function translationFileRetrieved(request) { - deferred.resolve(request.data); - }, - - // Retry with remaining languages if translation file could not be - // retrieved - tryNextTranslation); - }, - - // Retry with remaining languages if translation does not exist - tryNextTranslation); - - }; - - /** - * Given a valid language key, returns all possible legal variations of - * that key. Currently, this will be the given key and the given key - * without the country code. If the key has no country code, only the - * given key will be included in the returned array. - * - * @param {String} key - * The language key to generate variations of. - * - * @returns {String[]} - * All possible variations of the given language key. - */ - var getKeyVariations = function getKeyVariations(key) { - - var underscore = key.indexOf('_'); - - // If no underscore, only one possibility - if (underscore === -1) - return [key]; - - // Otherwise, include the lack of country code as an option - return [key, key.substr(0, underscore)]; - - }; - - /** - * Custom loader function for angular-translate which loads the desired - * language file dynamically via HTTP. If the language file cannot be - * found, the fallback language is used instead. - * - * @param {Object} options - * Arbitrary options, containing at least a "key" property which - * contains the requested language key. - * - * @returns {Promise.} - * A promise which resolves to the requested translation string object. - */ - return function loadTranslationFile(options) { - - var translation = $q.defer(); - - // Satisfy the translation request using possible variations of the given key - satisfyTranslation(translation, options.key, getKeyVariations(options.key)); - - // Return promise which is resolved only after the translation file is loaded - return translation.promise; - - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/locale/services/translationStringService.js b/guacamole/src/main/frontend/src/app/locale/services/translationStringService.js deleted file mode 100644 index 6cd09f2b16..0000000000 --- a/guacamole/src/main/frontend/src/app/locale/services/translationStringService.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for manipulating translation strings and translation table - * identifiers. - */ -angular.module('locale').factory('translationStringService', [function translationStringService() { - - var service = {}; - - /** - * Given an arbitrary identifier, returns the corresponding translation - * table identifier. Translation table identifiers are uppercase strings, - * word components separated by single underscores. For example, the - * string "Swap red/blue" would become "SWAP_RED_BLUE". - * - * @param {String} identifier - * The identifier to transform into a translation table identifier. - * - * @returns {String} - * The translation table identifier. - */ - service.canonicalize = function canonicalize(identifier) { - return identifier.replace(/[^a-zA-Z0-9]+/g, '_').toUpperCase(); - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/login/directives/login.js b/guacamole/src/main/frontend/src/app/login/directives/login.js deleted file mode 100644 index 60272086a3..0000000000 --- a/guacamole/src/main/frontend/src/app/login/directives/login.js +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for displaying an arbitrary login form. - */ -angular.module('login').directive('guacLogin', [function guacLogin() { - - // Login directive - var directive = { - restrict : 'E', - replace : true, - templateUrl : 'app/login/templates/login.html' - }; - - // Login directive scope - directive.scope = { - - /** - * An optional instructional message to display within the login - * dialog. - * - * @type TranslatableMessage - */ - helpText : '=', - - /** - * The login form or set of fields. This will be displayed to the user - * to capture their credentials. - * - * @type Field[] - */ - form : '=', - - /** - * A map of all field name/value pairs that have already been provided. - * If not null, the user will be prompted to continue their login - * attempt using only the fields which remain. - */ - values : '=' - - }; - - // Controller for login directive - directive.controller = ['$scope', '$injector', - function loginController($scope, $injector) { - - // Required types - var Error = $injector.get('Error'); - var Field = $injector.get('Field'); - - // Required services - var $location = $injector.get('$location'); - var $rootScope = $injector.get('$rootScope'); - var $route = $injector.get('$route'); - var authenticationService = $injector.get('authenticationService'); - var requestService = $injector.get('requestService'); - - /** - * The initial value for all login fields. Note that this value must - * not be null. If null, empty fields may not be submitted back to the - * server at all, causing the request to misrepresent true login state. - * - * For example, if a user receives an insufficient credentials error - * due to their password expiring, failing to provide that new password - * should result in the user submitting their username, original - * password, and empty new password. If only the username and original - * password are sent, the invalid password reset request will be - * indistinguishable from a normal login attempt. - * - * @constant - * @type String - */ - var DEFAULT_FIELD_VALUE = ''; - - /** - * A description of the error that occurred during login, if any. - * - * @type TranslatableMessage - */ - $scope.loginError = null; - - /** - * All form values entered by the user, as parameter name/value pairs. - * - * @type Object. - */ - $scope.enteredValues = {}; - - /** - * All form fields which have not yet been filled by the user. - * - * @type Field[] - */ - $scope.remainingFields = []; - - /** - * Whether an authentication attempt has been submitted. This will be - * set to true once credentials have been submitted and will only be - * reset to false once the attempt has been fully processed, including - * rerouting the user to the requested page if the attempt succeeded. - * - * @type Boolean - */ - $scope.submitted = false; - - /** - * The field that is most relevant to the user. - * - * @type Field - */ - $scope.relevantField = null; - - /** - * Returns whether a previous login attempt is continuing. - * - * @return {Boolean} - * true if a previous login attempt is continuing, false otherwise. - */ - $scope.isContinuation = function isContinuation() { - - // The login is continuing if any parameter values are provided - for (var name in $scope.values) - return true; - - return false; - - }; - - // Ensure provided values are included within entered values, even if - // they have no corresponding input fields - $scope.$watch('values', function resetEnteredValues(values) { - angular.extend($scope.enteredValues, values || {}); - }); - - // Update field information when form is changed - $scope.$watch('form', function resetRemainingFields(fields) { - - // If no fields are provided, then no fields remain - if (!fields) { - $scope.remainingFields = []; - return; - } - - // Filter provided fields against provided values - $scope.remainingFields = fields.filter(function isRemaining(field) { - return !(field.name in $scope.values); - }); - - // Set default values for all unset fields - angular.forEach($scope.remainingFields, function setDefault(field) { - if (!$scope.enteredValues[field.name]) - $scope.enteredValues[field.name] = DEFAULT_FIELD_VALUE; - }); - - $scope.relevantField = getRelevantField(); - - }); - - /** - * Submits the currently-specified fields to the authentication service, - * as well as any URL parameters set for the current page, preferring - * the values from the fields, and redirecting to the main view if - * successful. - */ - $scope.login = function login() { - - // Any values from URL paramters - const urlValues = $location.search(); - - // Values from the fields - const fieldValues = $scope.enteredValues; - - // All the values to be submitted in the auth attempt, preferring - // any values from fields over those in the URL - const authParams = {...urlValues, ...fieldValues}; - - authenticationService.authenticate(authParams)['catch'](requestService.IGNORE); - }; - - /** - * Returns the field most relevant to the user given the current state - * of the login process. This will normally be the first empty field. - * - * @return {Field} - * The field most relevant, null if there is no single most relevant - * field. - */ - var getRelevantField = function getRelevantField() { - - for (var i = 0; i < $scope.remainingFields.length; i++) { - var field = $scope.remainingFields[i]; - if (!$scope.enteredValues[field.name]) - return field; - } - - return null; - - }; - - // Update UI to reflect in-progress auth status (clear any previous - // errors, flag as pending) - $rootScope.$on('guacLoginPending', function loginSuccessful() { - $scope.submitted = true; - $scope.loginError = null; - }); - - // Retry route upon success (entered values will be cleared only - // after route change has succeeded as this can take time) - $rootScope.$on('guacLogin', function loginSuccessful() { - $route.reload(); - }); - - // Reset upon failure - $rootScope.$on('guacLoginFailed', function loginFailed(event, parameters, error) { - - // Initial submission is complete and has failed - $scope.submitted = false; - - // Clear out passwords if the credentials were rejected for any reason - if (error.type !== Error.Type.INSUFFICIENT_CREDENTIALS) { - - // Flag generic error for invalid login - if (error.type === Error.Type.INVALID_CREDENTIALS) - $scope.loginError = { - 'key' : 'LOGIN.ERROR_INVALID_LOGIN' - }; - - // Display error if anything else goes wrong - else - $scope.loginError = error.translatableMessage; - - // Reset all remaining fields to default values, but - // preserve any usernames - angular.forEach($scope.remainingFields, function clearEnteredValueIfPassword(field) { - if (field.type !== Field.Type.USERNAME && field.name in $scope.enteredValues) - $scope.enteredValues[field.name] = DEFAULT_FIELD_VALUE; - }); - } - - }); - - // Reset state after authentication and routing have succeeded - $rootScope.$on('$routeChangeSuccess', function routeChanged() { - $scope.enteredValues = {}; - $scope.submitted = false; - }); - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/login/loginModule.js b/guacamole/src/main/frontend/src/app/login/loginModule.js deleted file mode 100644 index 891387ef4e..0000000000 --- a/guacamole/src/main/frontend/src/app/login/loginModule.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for the login functionality. - */ -angular.module('login', [ - 'element', - 'form', - 'navigation' -]); diff --git a/guacamole/src/main/frontend/src/app/login/styles/animation.css b/guacamole/src/main/frontend/src/app/login/styles/animation.css deleted file mode 100644 index d66b3fa428..0000000000 --- a/guacamole/src/main/frontend/src/app/login/styles/animation.css +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -@keyframes shake-head { - 0% { margin-left: 0.25em; margin-right: -0.25em; } - 25% { margin-left: -0.25em; margin-right: 0.25em; } - 50% { margin-left: 0.25em; margin-right: -0.25em; } - 75% { margin-left: -0.25em; margin-right: 0.25em; } - 100% { margin-left: 0.00em; margin-right: 0.00em; } -} - -@-webkit-keyframes shake-head { - 0% { margin-left: 0.25em; margin-right: -0.25em; } - 25% { margin-left: -0.25em; margin-right: 0.25em; } - 50% { margin-left: 0.25em; margin-right: -0.25em; } - 75% { margin-left: -0.25em; margin-right: 0.25em; } - 100% { margin-left: 0.00em; margin-right: 0.00em; } -} diff --git a/guacamole/src/main/frontend/src/app/login/styles/dialog.css b/guacamole/src/main/frontend/src/app/login/styles/dialog.css deleted file mode 100644 index 81ab8a98f6..0000000000 --- a/guacamole/src/main/frontend/src/app/login/styles/dialog.css +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.login-ui { - animation: fadein 0.125s linear; - -moz-animation: fadein 0.125s linear; - -webkit-animation: fadein 0.125s linear; -} - -.login-ui .login-dialog-middle { - width: 100%; - display: table-cell; - vertical-align: middle; - text-align: center; -} - -.login-ui .login-dialog { - - width: 100%; - max-width: 3in; - text-align: left; - padding: 1em; - font-size: 1.25em; - - display: inline-block; -} - -.login-ui .login-dialog h1 { - margin-top: 0; - margin-bottom: 0em; - text-align: center; -} - -.login-ui .login-dialog .buttons { - text-align: right; - margin: 0; - margin-top: 1em; -} - -.login-ui .login-dialog .login-fields { - vertical-align: middle; -} - -.login-ui .login-dialog th { - text-shadow: 1px 1px white; -} - -.login-ui .login-dialog .version { - padding: 0.5em 0; -} - -.login-ui .login-dialog .version .app-name { - font-weight: bold; - text-transform: uppercase; - text-align: center; - font-size: 1.25em; -} - -.login-ui .login-dialog .version .version-number { - - position: absolute; - right: 0; - bottom: 0; - - padding: 0.25em 0.75em; - margin: 0.25em; - - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; - -khtml-border-radius: 0.5em; - border-radius: 0.5em; - - color: white; - background: green; - font-size: 0.5em; - font-style: italic; - opacity: 0.5; - -} - -.login-ui .login-dialog .logo { - display: block; - margin: 0.5em auto; - width: 3em; - height: 3em; - background-size: 3em 3em; - -moz-background-size: 3em 3em; - -webkit-background-size: 3em 3em; - -khtml-background-size: 3em 3em; - background-image: url("images/guac-tricolor.svg"); -} - -.login-ui.continuation .login-dialog { - border-right: none; - border-left: none; - box-shadow: none; - max-width: 6in; -} - -.login-ui.continuation .login-dialog .logo, -.login-ui.continuation .login-dialog .version { - display: none; -} - -.login-ui.error .login-dialog { - animation-name: shake-head; - animation-duration: 0.25s; - animation-timing-function: linear; - -webkit-animation-name: shake-head; - -webkit-animation-duration: 0.25s; - -webkit-animation-timing-function: linear; -} diff --git a/guacamole/src/main/frontend/src/app/login/styles/input.css b/guacamole/src/main/frontend/src/app/login/styles/input.css deleted file mode 100644 index 57fa2b4b12..0000000000 --- a/guacamole/src/main/frontend/src/app/login/styles/input.css +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.login-ui .login-dialog .login-fields input { - display: block; - border: 1px solid rgba(0, 0, 0, 0.25); - -moz-border-radius: 0.2em; - -webkit-border-radius: 0.2em; - -khtml-border-radius: 0.2em; - font-family: Carlito, FreeSans, Helvetica, Arial, sans-serif; - border-radius: 0.2em; - width: 100%; - margin: 0; - margin-bottom: 0.5em; - padding: 0.5em 0.75em; - max-width: none; -} - -.login-ui .login-dialog .buttons input[type="submit"] { - width: 100%; - margin: 0; -} - -.login-ui.continuation .login-dialog .buttons input[type="submit"] { - width: auto; -} - -.login-ui.initial .login-dialog input.continue-login, -.login-ui.continuation .login-dialog input.login { - display: none; -} diff --git a/guacamole/src/main/frontend/src/app/login/styles/login.css b/guacamole/src/main/frontend/src/app/login/styles/login.css deleted file mode 100644 index 4cb07f18aa..0000000000 --- a/guacamole/src/main/frontend/src/app/login/styles/login.css +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -div.login-ui { - height: 100%; - width: 100%; - position: absolute; - left: 0; - top: 0; - display: table; - background: white; - z-index: 20; -} - -.login-ui p.login-error { - display: none; -} - -.login-ui.error p.login-error { - display: block; - - position: fixed; - left: 0; - right: 0; - top: 0; - - padding: 1em; - margin: 0.2em; - - background: #FDD; - border: 1px solid #964040; - -moz-border-radius: 0.25em; - -webkit-border-radius: 0.25em; - -khtml-border-radius: 0.25em; - text-align: center; - color: #964040; -} - -.login-ui .login-fields .form-field .password-field .toggle-password { - display: none; -} - -.login-ui .login-fields .labeled-field { - display: block; - position: relative; - z-index: 1; -} - -.login-ui .login-fields .labeled-field .field-header { - - display: block; - position: absolute; - left: 0; - right: 0; - overflow: hidden; - - z-index: -1; - margin: 0.5em; - font-size: 0.9em; - opacity: 0.5; - -} - -.login-ui .login-fields .labeled-field.empty input { - background: transparent; -} - -.login-ui .login-fields .labeled-field input:focus { - background: white; -} diff --git a/guacamole/src/main/frontend/src/app/login/templates/login.html b/guacamole/src/main/frontend/src/app/login/templates/login.html deleted file mode 100644 index 9a354163bb..0000000000 --- a/guacamole/src/main/frontend/src/app/login/templates/login.html +++ /dev/null @@ -1,53 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionController.js b/guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionController.js deleted file mode 100644 index 5635def0df..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionController.js +++ /dev/null @@ -1,355 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for editing or creating connections. - */ -angular.module('manage').controller('manageConnectionController', ['$scope', '$injector', - function manageConnectionController($scope, $injector) { - - // Required types - var Connection = $injector.get('Connection'); - var ConnectionGroup = $injector.get('ConnectionGroup'); - var HistoryEntryWrapper = $injector.get('HistoryEntryWrapper'); - var ManagementPermissions = $injector.get('ManagementPermissions'); - var PermissionSet = $injector.get('PermissionSet'); - var Protocol = $injector.get('Protocol'); - - // Required services - var $location = $injector.get('$location'); - var $q = $injector.get('$q'); - var $routeParams = $injector.get('$routeParams'); - var $translate = $injector.get('$translate'); - var $window = $injector.get('$window'); - var authenticationService = $injector.get('authenticationService'); - var connectionService = $injector.get('connectionService'); - var connectionGroupService = $injector.get('connectionGroupService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var schemaService = $injector.get('schemaService'); - - /** - * The unique identifier of the data source containing the connection being - * edited. - * - * @type String - */ - $scope.selectedDataSource = $routeParams.dataSource; - - /** - * The identifier of the original connection from which this connection is - * being cloned. Only valid if this is a new connection. - * - * @type String - */ - var cloneSourceIdentifier = $location.search().clone; - - /** - * The identifier of the connection being edited. If a new connection is - * being created, this will not be defined. - * - * @type String - */ - var identifier = $routeParams.id; - - /** - * All known protocols. - * - * @type Object. - */ - $scope.protocols = null; - - /** - * The root connection group of the connection group hierarchy. - * - * @type ConnectionGroup - */ - $scope.rootGroup = null; - - /** - * The connection being modified. - * - * @type Connection - */ - $scope.connection = null; - - /** - * The parameter name/value pairs associated with the connection being - * modified. - * - * @type Object. - */ - $scope.parameters = null; - - /** - * The date format for use within the connection history. - * - * @type String - */ - $scope.historyDateFormat = null; - - /** - * The usage history of the connection being modified. - * - * @type HistoryEntryWrapper[] - */ - $scope.historyEntryWrappers = null; - - /** - * The management-related actions that the current user may perform on the - * connection currently being created/modified, or null if the current - * user's permissions have not yet been loaded. - * - * @type ManagementPermissions - */ - $scope.managementPermissions = null; - - /** - * All available connection attributes. This is only the set of attribute - * definitions, organized as logical groupings of attributes, not attribute - * values. - * - * @type Form[] - */ - $scope.attributes = null; - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface to be - * useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.protocols !== null - && $scope.rootGroup !== null - && $scope.connection !== null - && $scope.parameters !== null - && $scope.historyDateFormat !== null - && $scope.historyEntryWrappers !== null - && $scope.managementPermissions !== null - && $scope.attributes !== null; - - }; - - /** - * Loads the data associated with the connection having the given - * identifier, preparing the interface for making modifications to that - * existing connection. - * - * @param {String} dataSource - * The unique identifier of the data source containing the connection to - * load. - * - * @param {String} identifier - * The identifier of the connection to load. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * editing the given connection. - */ - var loadExistingConnection = function loadExistingConnection(dataSource, identifier) { - return $q.all({ - connection : connectionService.getConnection(dataSource, identifier), - historyEntries : connectionService.getConnectionHistory(dataSource, identifier), - parameters : connectionService.getConnectionParameters(dataSource, identifier) - }) - .then(function connectionDataRetrieved(values) { - - $scope.connection = values.connection; - $scope.parameters = values.parameters; - - // Wrap all history entries for sake of display - $scope.historyEntryWrappers = []; - angular.forEach(values.historyEntries, function wrapHistoryEntry(historyEntry) { - $scope.historyEntryWrappers.push(new HistoryEntryWrapper(historyEntry)); - }); - - }); - }; - - /** - * Loads the data associated with the connection having the given - * identifier, preparing the interface for cloning that existing - * connection. - * - * @param {String} dataSource - * The unique identifier of the data source containing the connection - * to be cloned. - * - * @param {String} identifier - * The identifier of the connection being cloned. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * cloning the given connection. - */ - var loadClonedConnection = function loadClonedConnection(dataSource, identifier) { - return $q.all({ - connection : connectionService.getConnection(dataSource, identifier), - parameters : connectionService.getConnectionParameters(dataSource, identifier) - }) - .then(function connectionDataRetrieved(values) { - - $scope.connection = values.connection; - $scope.parameters = values.parameters; - - // Clear the identifier field because this connection is new - delete $scope.connection.identifier; - - // Cloned connections have no history - $scope.historyEntryWrappers = []; - - }); - }; - - /** - * Loads skeleton connection data, preparing the interface for creating a - * new connection. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * creating a new connection. - */ - var loadSkeletonConnection = function loadSkeletonConnection() { - - // Use skeleton connection object with no associated permissions, - // history, or parameters - $scope.connection = new Connection({ - protocol : 'vnc', - parentIdentifier : $location.search().parent - }); - $scope.historyEntryWrappers = []; - $scope.parameters = {}; - - return $q.resolve(); - - }; - - /** - * Loads the data required for performing the management task requested - * through the route parameters given at load time, automatically preparing - * the interface for editing an existing connection, cloning an existing - * connection, or creating an entirely new connection. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared - * for performing the requested management task. - */ - var loadRequestedConnection = function loadRequestedConnection() { - - // If we are editing an existing connection, pull its data - if (identifier) - return loadExistingConnection($scope.selectedDataSource, identifier); - - // If we are cloning an existing connection, pull its data instead - if (cloneSourceIdentifier) - return loadClonedConnection($scope.selectedDataSource, cloneSourceIdentifier); - - // If we are creating a new connection, populate skeleton connection data - return loadSkeletonConnection(); - - }; - - // Populate interface with requested data - $q.all({ - connectionData : loadRequestedConnection(), - attributes : schemaService.getConnectionAttributes($scope.selectedDataSource), - permissions : permissionService.getEffectivePermissions($scope.selectedDataSource, authenticationService.getCurrentUsername()), - protocols : schemaService.getProtocols($scope.selectedDataSource), - rootGroup : connectionGroupService.getConnectionGroupTree($scope.selectedDataSource, ConnectionGroup.ROOT_IDENTIFIER, [PermissionSet.ObjectPermissionType.ADMINISTER]) - }) - .then(function dataRetrieved(values) { - - $scope.attributes = values.attributes; - $scope.protocols = values.protocols; - $scope.rootGroup = values.rootGroup; - - $scope.managementPermissions = ManagementPermissions.fromPermissionSet( - values.permissions, - PermissionSet.SystemPermissionType.CREATE_CONNECTION, - PermissionSet.hasConnectionPermission, - identifier); - - }, requestService.DIE); - - // Get history date format - $translate('MANAGE_CONNECTION.FORMAT_HISTORY_START').then(function historyDateFormatReceived(historyDateFormat) { - $scope.historyDateFormat = historyDateFormat; - }, angular.noop); - - /** - * @borrows Protocol.getNamespace - */ - $scope.getNamespace = Protocol.getNamespace; - - /** - * @borrows Protocol.getName - */ - $scope.getProtocolName = Protocol.getName; - - /** - * Cancels all pending edits, returning to the main list of connections - * within the selected data source. - */ - $scope.returnToConnectionList = function returnToConnectionList() { - $location.url('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections'); - }; - - /** - * Cancels all pending edits, opening an edit page for a new connection - * which is prepopulated with the data from the connection currently being edited. - */ - $scope.cloneConnection = function cloneConnection() { - $location.path('/manage/' + encodeURIComponent($scope.selectedDataSource) + '/connections').search('clone', identifier); - $window.scrollTo(0,0); - }; - - /** - * Saves the current connection, creating a new connection or updating the - * existing connection, returning a promise which is resolved if the save - * operation succeeds and rejected if the save operation fails. - * - * @returns {Promise} - * A promise which is resolved if the save operation succeeds and is - * rejected with an {@link Error} if the save operation fails. - */ - $scope.saveConnection = function saveConnection() { - - $scope.connection.parameters = $scope.parameters; - - // Save the connection - return connectionService.saveConnection($scope.selectedDataSource, $scope.connection); - - }; - - /** - * Deletes the current connection, returning a promise which is resolved if - * the delete operation succeeds and rejected if the delete operation fails. - * - * @returns {Promise} - * A promise which is resolved if the delete operation succeeds and is - * rejected with an {@link Error} if the delete operation fails. - */ - $scope.deleteConnection = function deleteConnection() { - return connectionService.deleteConnection($scope.selectedDataSource, $scope.connection); - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionGroupController.js b/guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionGroupController.js deleted file mode 100644 index e0029cb157..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/controllers/manageConnectionGroupController.js +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for editing or creating connection groups. - */ -angular.module('manage').controller('manageConnectionGroupController', ['$scope', '$injector', - function manageConnectionGroupController($scope, $injector) { - - // Required types - var ConnectionGroup = $injector.get('ConnectionGroup'); - var ManagementPermissions = $injector.get('ManagementPermissions'); - var PermissionSet = $injector.get('PermissionSet'); - - // Required services - var $location = $injector.get('$location'); - var $q = $injector.get('$q'); - var $routeParams = $injector.get('$routeParams'); - var $window = $injector.get('$window'); - var authenticationService = $injector.get('authenticationService'); - var connectionGroupService = $injector.get('connectionGroupService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var schemaService = $injector.get('schemaService'); - - /** - * The unique identifier of the data source containing the connection group - * being edited. - * - * @type String - */ - $scope.selectedDataSource = $routeParams.dataSource; - - /** - * The identifier of the original connection group from which this - * connection group is being cloned. Only valid if this is a new - * connection group. - * - * @type String - */ - var cloneSourceIdentifier = $location.search().clone; - - /** - * The identifier of the connection group being edited. If a new connection - * group is being created, this will not be defined. - * - * @type String - */ - var identifier = $routeParams.id; - - /** - * Available connection group types, as translation string / internal value - * pairs. - * - * @type Object[] - */ - $scope.types = [ - { - label: "MANAGE_CONNECTION_GROUP.NAME_TYPE_ORGANIZATIONAL", - value: ConnectionGroup.Type.ORGANIZATIONAL - }, - { - label: "MANAGE_CONNECTION_GROUP.NAME_TYPE_BALANCING", - value : ConnectionGroup.Type.BALANCING - } - ]; - - /** - * The root connection group of the connection group hierarchy. - * - * @type ConnectionGroup - */ - $scope.rootGroup = null; - - /** - * The connection group being modified. - * - * @type ConnectionGroup - */ - $scope.connectionGroup = null; - - /** - * The management-related actions that the current user may perform on the - * connection group currently being created/modified, or null if the current - * user's permissions have not yet been loaded. - * - * @type ManagementPermissions - */ - $scope.managementPermissions = null; - - /** - * All available connection group attributes. This is only the set of - * attribute definitions, organized as logical groupings of attributes, not - * attribute values. - * - * @type Form[] - */ - $scope.attributes = null; - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface to be - * useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.rootGroup !== null - && $scope.connectionGroup !== null - && $scope.managementPermissions !== null - && $scope.attributes !== null; - - }; - - /** - * Loads the data associated with the connection group having the given - * identifier, preparing the interface for making modifications to that - * existing connection group. - * - * @param {String} dataSource - * The unique identifier of the data source containing the connection - * group to load. - * - * @param {String} identifier - * The identifier of the connection group to load. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * editing the given connection group. - */ - var loadExistingConnectionGroup = function loadExistingConnectionGroup(dataSource, identifier) { - return connectionGroupService.getConnectionGroup( - dataSource, - identifier - ) - .then(function connectionGroupReceived(connectionGroup) { - $scope.connectionGroup = connectionGroup; - }); - }; - - /** - * Loads the data associated with the connection group having the given - * identifier, preparing the interface for cloning that existing - * connection group. - * - * @param {String} dataSource - * The unique identifier of the data source containing the connection - * group to be cloned. - * - * @param {String} identifier - * The identifier of the connection group being cloned. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * cloning the given connection group. - */ - var loadClonedConnectionGroup = function loadClonedConnectionGroup(dataSource, identifier) { - return connectionGroupService.getConnectionGroup( - dataSource, - identifier - ) - .then(function connectionGroupReceived(connectionGroup) { - $scope.connectionGroup = connectionGroup; - delete $scope.connectionGroup.identifier; - }); - }; - - /** - * Loads skeleton connection group data, preparing the interface for - * creating a new connection group. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * creating a new connection group. - */ - var loadSkeletonConnectionGroup = function loadSkeletonConnectionGroup() { - - // Use skeleton connection group object with specified parent - $scope.connectionGroup = new ConnectionGroup({ - parentIdentifier : $location.search().parent - }); - - return $q.resolve(); - - }; - - /** - * Loads the data required for performing the management task requested - * through the route parameters given at load time, automatically preparing - * the interface for editing an existing connection group, cloning an - * existing connection group, or creating an entirely new connection group. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared - * for performing the requested management task. - */ - var loadRequestedConnectionGroup = function loadRequestedConnectionGroup() { - - // If we are editing an existing connection group, pull its data - if (identifier) - return loadExistingConnectionGroup($scope.selectedDataSource, identifier); - - // If we are cloning an existing connection group, pull its data - // instead - if (cloneSourceIdentifier) - return loadClonedConnectionGroup($scope.selectedDataSource, cloneSourceIdentifier); - - // If we are creating a new connection group, populate skeleton - // connection group data - return loadSkeletonConnectionGroup(); - - }; - - // Query the user's permissions for the current connection group - $q.all({ - connectionGroupData : loadRequestedConnectionGroup(), - attributes : schemaService.getConnectionGroupAttributes($scope.selectedDataSource), - permissions : permissionService.getEffectivePermissions($scope.selectedDataSource, authenticationService.getCurrentUsername()), - rootGroup : connectionGroupService.getConnectionGroupTree($scope.selectedDataSource, ConnectionGroup.ROOT_IDENTIFIER, [PermissionSet.ObjectPermissionType.ADMINISTER]) - }) - .then(function connectionGroupDataRetrieved(values) { - - $scope.attributes = values.attributes; - $scope.rootGroup = values.rootGroup; - - $scope.managementPermissions = ManagementPermissions.fromPermissionSet( - values.permissions, - PermissionSet.SystemPermissionType.CREATE_CONNECTION, - PermissionSet.hasConnectionGroupPermission, - identifier); - - }, requestService.DIE); - - /** - * Cancels all pending edits, returning to the main list of connections - * within the selected data source. - */ - $scope.returnToConnectionList = function returnToConnectionList() { - $location.path('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections'); - }; - - /** - * Cancels all pending edits, opening an edit page for a new connection - * group which is prepopulated with the data from the connection group - * currently being edited. - */ - $scope.cloneConnectionGroup = function cloneConnectionGRoup() { - $location.path('/manage/' + encodeURIComponent($scope.selectedDataSource) + '/connectionGroups').search('clone', identifier); - $window.scrollTo(0,0); - }; - - /** - * Saves the current connection group, creating a new connection group or - * updating the existing connection group, returning a promise which is - * resolved if the save operation succeeds and rejected if the save - * operation fails. - * - * @returns {Promise} - * A promise which is resolved if the save operation succeeds and is - * rejected with an {@link Error} if the save operation fails. - */ - $scope.saveConnectionGroup = function saveConnectionGroup() { - return connectionGroupService.saveConnectionGroup($scope.selectedDataSource, $scope.connectionGroup); - }; - - /** - * Deletes the current connection group, returning a promise which is - * resolved if the delete operation succeeds and rejected if the delete - * operation fails. - * - * @returns {Promise} - * A promise which is resolved if the delete operation succeeds and is - * rejected with an {@link Error} if the delete operation fails. - */ - $scope.deleteConnectionGroup = function deleteConnectionGroup() { - return connectionGroupService.deleteConnectionGroup($scope.selectedDataSource, $scope.connectionGroup); - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/controllers/manageSharingProfileController.js b/guacamole/src/main/frontend/src/app/manage/controllers/manageSharingProfileController.js deleted file mode 100644 index 139eaf893b..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/controllers/manageSharingProfileController.js +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for editing or creating sharing profiles. - */ -angular.module('manage').controller('manageSharingProfileController', ['$scope', '$injector', - function manageSharingProfileController($scope, $injector) { - - // Required types - var ManagementPermissions = $injector.get('ManagementPermissions'); - var SharingProfile = $injector.get('SharingProfile'); - var PermissionSet = $injector.get('PermissionSet'); - var Protocol = $injector.get('Protocol'); - - // Required services - var $location = $injector.get('$location'); - var $q = $injector.get('$q'); - var $routeParams = $injector.get('$routeParams'); - var $window = $injector.get('$window'); - var authenticationService = $injector.get('authenticationService'); - var connectionService = $injector.get('connectionService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var schemaService = $injector.get('schemaService'); - var sharingProfileService = $injector.get('sharingProfileService'); - - /** - * The unique identifier of the data source containing the sharing profile - * being edited. - * - * @type String - */ - $scope.selectedDataSource = $routeParams.dataSource; - - /** - * The identifier of the original sharing profile from which this sharing - * profile is being cloned. Only valid if this is a new sharing profile. - * - * @type String - */ - var cloneSourceIdentifier = $location.search().clone; - - /** - * The identifier of the sharing profile being edited. If a new sharing - * profile is being created, this will not be defined. - * - * @type String - */ - var identifier = $routeParams.id; - - /** - * Map of protocol name to corresponding Protocol object. - * - * @type Object. - */ - $scope.protocols = null; - - /** - * The sharing profile being modified. - * - * @type SharingProfile - */ - $scope.sharingProfile = null; - - /** - * The parameter name/value pairs associated with the sharing profile being - * modified. - * - * @type Object. - */ - $scope.parameters = null; - - /** - * The management-related actions that the current user may perform on the - * sharing profile currently being created/modified, or null if the current - * user's permissions have not yet been loaded. - * - * @type ManagementPermissions - */ - $scope.managementPermissions = null; - - /** - * All available sharing profile attributes. This is only the set of - * attribute definitions, organized as logical groupings of attributes, not - * attribute values. - * - * @type Form[] - */ - $scope.attributes = null; - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface to be - * useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.protocols !== null - && $scope.sharingProfile !== null - && $scope.primaryConnection !== null - && $scope.parameters !== null - && $scope.managementPermissions !== null - && $scope.attributes !== null; - - }; - - /** - * Loads the data associated with the sharing profile having the given - * identifier, preparing the interface for making modifications to that - * existing sharing profile. - * - * @param {String} dataSource - * The unique identifier of the data source containing the sharing - * profile to load. - * - * @param {String} identifier - * The identifier of the sharing profile to load. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * editing the given sharing profile. - */ - var loadExistingSharingProfile = function loadExistingSharingProfile(dataSource, identifier) { - return $q.all({ - sharingProfile : sharingProfileService.getSharingProfile(dataSource, identifier), - parameters : sharingProfileService.getSharingProfileParameters(dataSource, identifier) - }) - .then(function sharingProfileDataRetrieved(values) { - - $scope.sharingProfile = values.sharingProfile; - $scope.parameters = values.parameters; - - // Load connection object for associated primary connection - return connectionService.getConnection( - dataSource, - values.sharingProfile.primaryConnectionIdentifier - ) - .then(function connectionRetrieved(connection) { - $scope.primaryConnection = connection; - }); - - }); - }; - - /** - * Loads the data associated with the sharing profile having the given - * identifier, preparing the interface for cloning that existing - * sharing profile. - * - * @param {String} dataSource - * The unique identifier of the data source containing the sharing - * profile to be cloned. - * - * @param {String} identifier - * The identifier of the sharing profile being cloned. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * cloning the given sharing profile. - */ - var loadClonedSharingProfile = function loadClonedSharingProfile(dataSource, identifier) { - return $q.all({ - sharingProfile : sharingProfileService.getSharingProfile(dataSource, identifier), - parameters : sharingProfileService.getSharingProfileParameters(dataSource, identifier) - }) - .then(function sharingProfileDataRetrieved(values) { - - $scope.sharingProfile = values.sharingProfile; - $scope.parameters = values.parameters; - - // Clear the identifier field because this sharing profile is new - delete $scope.sharingProfile.identifier; - - // Load connection object for associated primary connection - return connectionService.getConnection( - dataSource, - values.sharingProfile.primaryConnectionIdentifier - ) - .then(function connectionRetrieved(connection) { - $scope.primaryConnection = connection; - }); - - }); - }; - - /** - * Loads skeleton sharing profile data, preparing the interface for - * creating a new sharing profile. - * - * @param {String} dataSource - * The unique identifier of the data source containing the sharing - * profile to be created. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * creating a new sharing profile. - */ - var loadSkeletonSharingProfile = function loadSkeletonSharingProfile(dataSource) { - - // Use skeleton sharing profile object with no associated parameters - $scope.sharingProfile = new SharingProfile({ - primaryConnectionIdentifier : $location.search().parent - }); - $scope.parameters = {}; - - // Load connection object for associated primary connection - return connectionService.getConnection( - dataSource, - $scope.sharingProfile.primaryConnectionIdentifier - ) - .then(function connectionRetrieved(connection) { - $scope.primaryConnection = connection; - }); - - }; - - /** - * Loads the data required for performing the management task requested - * through the route parameters given at load time, automatically preparing - * the interface for editing an existing sharing profile, cloning an - * existing sharing profile, or creating an entirely new sharing profile. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared - * for performing the requested management task. - */ - var loadRequestedSharingProfile = function loadRequestedSharingProfile() { - - // If we are editing an existing sharing profile, pull its data - if (identifier) - return loadExistingSharingProfile($scope.selectedDataSource, identifier); - - // If we are cloning an existing sharing profile, pull its data instead - if (cloneSourceIdentifier) - return loadClonedSharingProfile($scope.selectedDataSource, cloneSourceIdentifier); - - // If we are creating a new sharing profile, populate skeleton sharing - // profile data - return loadSkeletonSharingProfile($scope.selectedDataSource); - - }; - - - // Query the user's permissions for the current sharing profile - $q.all({ - sharingProfileData : loadRequestedSharingProfile(), - attributes : schemaService.getSharingProfileAttributes($scope.selectedDataSource), - protocols : schemaService.getProtocols($scope.selectedDataSource), - permissions : permissionService.getEffectivePermissions($scope.selectedDataSource, authenticationService.getCurrentUsername()) - }) - .then(function sharingProfileDataRetrieved(values) { - - $scope.attributes = values.attributes; - $scope.protocols = values.protocols; - - $scope.managementPermissions = ManagementPermissions.fromPermissionSet( - values.permissions, - PermissionSet.SystemPermissionType.CREATE_CONNECTION, - PermissionSet.hasConnectionPermission, - identifier); - - }, requestService.DIE); - - /** - * @borrows Protocol.getNamespace - */ - $scope.getNamespace = Protocol.getNamespace; - - /** - * Cancels all pending edits, returning to the main list of connections - * within the selected data source. - */ - $scope.returnToConnectionList = function returnToConnectionList() { - $location.url('/settings/' + encodeURIComponent($scope.selectedDataSource) + '/connections'); - }; - - /** - * Cancels all pending edits, opening an edit page for a new sharing profile - * which is prepopulated with the data from the sharing profile currently - * being edited. - */ - $scope.cloneSharingProfile = function cloneSharingProfile() { - $location.path('/manage/' + encodeURIComponent($scope.selectedDataSource) + '/sharingProfiles').search('clone', identifier); - $window.scrollTo(0,0); - }; - - /** - * Saves the current sharing profile, creating a new sharing profile or - * updating the existing sharing profile, returning a promise which is - * resolved if the save operation succeeds and rejected if the save - * operation fails. - * - * @returns {Promise} - * A promise which is resolved if the save operation succeeds and is - * rejected with an {@link Error} if the save operation fails. - */ - $scope.saveSharingProfile = function saveSharingProfile() { - - $scope.sharingProfile.parameters = $scope.parameters; - - // Save the sharing profile - return sharingProfileService.saveSharingProfile($scope.selectedDataSource, $scope.sharingProfile); - - }; - - /** - * Deletes the current sharing profile, returning a promise which is - * resolved if the delete operation succeeds and rejected if the delete - * operation fails. - * - * @returns {Promise} - * A promise which is resolved if the delete operation succeeds and is - * rejected with an {@link Error} if the delete operation fails. - */ - $scope.deleteSharingProfile = function deleteSharingProfile() { - return sharingProfileService.deleteSharingProfile($scope.selectedDataSource, $scope.sharingProfile); - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/controllers/manageUserController.js b/guacamole/src/main/frontend/src/app/manage/controllers/manageUserController.js deleted file mode 100644 index d1bbbb52fb..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/controllers/manageUserController.js +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for editing users. - */ -angular.module('manage').controller('manageUserController', ['$scope', '$injector', - function manageUserController($scope, $injector) { - - // Required types - var Error = $injector.get('Error'); - var ManagementPermissions = $injector.get('ManagementPermissions'); - var PermissionFlagSet = $injector.get('PermissionFlagSet'); - var PermissionSet = $injector.get('PermissionSet'); - var User = $injector.get('User'); - - // Required services - var $location = $injector.get('$location'); - var $routeParams = $injector.get('$routeParams'); - var $q = $injector.get('$q'); - var $window = $injector.get('$window'); - var authenticationService = $injector.get('authenticationService'); - var dataSourceService = $injector.get('dataSourceService'); - var membershipService = $injector.get('membershipService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var schemaService = $injector.get('schemaService'); - var userGroupService = $injector.get('userGroupService'); - var userService = $injector.get('userService'); - - /** - * The identifiers of all data sources currently available to the - * authenticated user. - * - * @type String[] - */ - var dataSources = authenticationService.getAvailableDataSources(); - - /** - * The username of the current, authenticated user. - * - * @type String - */ - var currentUsername = authenticationService.getCurrentUsername(); - - /** - * The username of the original user from which this user is - * being cloned. Only valid if this is a new user. - * - * @type String - */ - var cloneSourceUsername = $location.search().clone; - - /** - * The username of the user being edited. If a new user is - * being created, this will not be defined. - * - * @type String - */ - var username = $routeParams.id; - - /** - * The unique identifier of the data source containing the user being - * edited. - * - * @type String - */ - $scope.dataSource = $routeParams.dataSource; - - /** - * The string value representing the user currently being edited within the - * permission flag set. Note that his may not match the user's actual - * username - it is a marker that is (1) guaranteed to be associated with - * the current user's permissions in the permission set and (2) guaranteed - * not to collide with any user that does not represent the current user - * within the permission set. - * - * @type String - */ - $scope.selfUsername = ''; - - /** - * All user accounts associated with the same username as the account being - * created or edited, as a map of data source identifier to the User object - * within that data source. - * - * @type Object. - */ - $scope.users = null; - - /** - * The user being modified. - * - * @type User - */ - $scope.user = null; - - /** - * All permissions associated with the user being modified. - * - * @type PermissionFlagSet - */ - $scope.permissionFlags = null; - - /** - * The set of permissions that will be added to the user when the user is - * saved. Permissions will only be present in this set if they are - * manually added, and not later manually removed before saving. - * - * @type PermissionSet - */ - $scope.permissionsAdded = new PermissionSet(); - - /** - * The set of permissions that will be removed from the user when the user - * is saved. Permissions will only be present in this set if they are - * manually removed, and not later manually added before saving. - * - * @type PermissionSet - */ - $scope.permissionsRemoved = new PermissionSet(); - - /** - * The identifiers of all user groups which can be manipulated (all groups - * for which the user accessing this interface has UPDATE permission), - * either through adding the current user as a member or removing the - * current user from that group. If this information has not yet been - * retrieved, this will be null. - * - * @type String[] - */ - $scope.availableGroups = null; - - /** - * The identifiers of all user groups of which the user is a member, - * taking into account any user groups which will be added/removed when - * saved. If this information has not yet been retrieved, this will be - * null. - * - * @type String[] - */ - $scope.parentGroups = null; - - /** - * The set of identifiers of all parent user groups to which the user will - * be added when saved. Parent groups will only be present in this set if - * they are manually added, and not later manually removed before saving. - * - * @type String[] - */ - $scope.parentGroupsAdded = []; - - /** - * The set of identifiers of all parent user groups from which the user - * will be removed when saved. Parent groups will only be present in this - * set if they are manually removed, and not later manually added before - * saving. - * - * @type String[] - */ - $scope.parentGroupsRemoved = []; - - /** - * For each applicable data source, the management-related actions that the - * current user may perform on the user account currently being created - * or modified, as a map of data source identifier to the - * {@link ManagementPermissions} object describing the actions available - * within that data source, or null if the current user's permissions have - * not yet been loaded. - * - * @type Object. - */ - $scope.managementPermissions = null; - - /** - * All available user attributes. This is only the set of attribute - * definitions, organized as logical groupings of attributes, not attribute - * values. - * - * @type Form[] - */ - $scope.attributes = null; - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface to be - * useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.users !== null - && $scope.permissionFlags !== null - && $scope.managementPermissions !== null - && $scope.availableGroups !== null - && $scope.parentGroups !== null - && $scope.attributes !== null; - - }; - - /** - * Returns whether the current user can edit the username of the user being - * edited within the given data source. - * - * @param {String} [dataSource] - * The identifier of the data source to check. If omitted, this will - * default to the currently-selected data source. - * - * @returns {Boolean} - * true if the current user can edit the username of the user being - * edited, false otherwise. - */ - $scope.canEditUsername = function canEditUsername(dataSource) { - return !username; - }; - - /** - * Loads the data associated with the user having the given username, - * preparing the interface for making modifications to that existing user. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user to - * load. - * - * @param {String} username - * The username of the user to load. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * editing the given user. - */ - var loadExistingUser = function loadExistingUser(dataSource, username) { - return $q.all({ - users : dataSourceService.apply(userService.getUser, dataSources, username), - - // Use empty permission set if user cannot be found - permissions: - permissionService.getPermissions(dataSource, username) - ['catch'](requestService.defaultValue(new PermissionSet())), - - // Assume no parent groups if user cannot be found - parentGroups: - membershipService.getUserGroups(dataSource, username) - ['catch'](requestService.defaultValue([])) - - }) - .then(function userDataRetrieved(values) { - - $scope.users = values.users; - $scope.parentGroups = values.parentGroups; - - // Create skeleton user if user does not exist - $scope.user = values.users[dataSource] || new User({ - 'username' : username - }); - - // The current user will be associated with username of the existing - // user in the retrieved permission set - $scope.selfUsername = username; - $scope.permissionFlags = PermissionFlagSet.fromPermissionSet(values.permissions); - - }); - }; - - /** - * Loads the data associated with the user having the given username, - * preparing the interface for cloning that existing user. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user to - * be cloned. - * - * @param {String} username - * The username of the user being cloned. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * cloning the given user. - */ - var loadClonedUser = function loadClonedUser(dataSource, username) { - return $q.all({ - users : dataSourceService.apply(userService.getUser, [dataSource], username), - permissions : permissionService.getPermissions(dataSource, username), - parentGroups : membershipService.getUserGroups(dataSource, username) - }) - .then(function userDataRetrieved(values) { - - $scope.users = {}; - $scope.user = values.users[dataSource]; - $scope.parentGroups = values.parentGroups; - $scope.parentGroupsAdded = values.parentGroups; - - // The current user will be associated with cloneSourceUsername in the - // retrieved permission set - $scope.selfUsername = username; - $scope.permissionFlags = PermissionFlagSet.fromPermissionSet(values.permissions); - $scope.permissionsAdded = values.permissions; - - }); - }; - - /** - * Loads skeleton user data, preparing the interface for creating a new - * user. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * creating a new user. - */ - var loadSkeletonUser = function loadSkeletonUser() { - - // No users exist regardless of data source if there is no username - $scope.users = {}; - - // Use skeleton user object with no associated permissions - $scope.user = new User(); - $scope.parentGroups = []; - $scope.permissionFlags = new PermissionFlagSet(); - - // As no permissions are yet associated with the user, it is safe to - // use any non-empty username as a placeholder for self-referential - // permissions - $scope.selfUsername = 'SELF'; - - return $q.resolve(); - - }; - - /** - * Loads the data required for performing the management task requested - * through the route parameters given at load time, automatically preparing - * the interface for editing an existing user, cloning an existing user, or - * creating an entirely new user. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared - * for performing the requested management task. - */ - var loadRequestedUser = function loadRequestedUser() { - - // Pull user data and permissions if we are editing an existing user - if (username) - return loadExistingUser($scope.dataSource, username); - - // If we are cloning an existing user, pull his/her data instead - if (cloneSourceUsername) - return loadClonedUser($scope.dataSource, cloneSourceUsername); - - // If we are creating a new user, populate skeleton user data - return loadSkeletonUser(); - - }; - - // Populate interface with requested data - $q.all({ - userData : loadRequestedUser(), - permissions : dataSourceService.apply(permissionService.getEffectivePermissions, dataSources, currentUsername), - userGroups : userGroupService.getUserGroups($scope.dataSource, [ PermissionSet.ObjectPermissionType.UPDATE ]), - attributes : schemaService.getUserAttributes($scope.dataSource) - }) - .then(function dataReceived(values) { - - $scope.attributes = values.attributes; - - $scope.managementPermissions = {}; - angular.forEach(dataSources, function addAccountPage(dataSource) { - - // Determine whether data source contains this user - var exists = (dataSource in $scope.users); - - // Add the identifiers of all modifiable user groups - $scope.availableGroups = []; - angular.forEach(values.userGroups, function addUserGroupIdentifier(userGroup) { - $scope.availableGroups.push(userGroup.identifier); - }); - - // Calculate management actions available for this specific account - $scope.managementPermissions[dataSource] = ManagementPermissions.fromPermissionSet( - values.permissions[dataSource], - PermissionSet.SystemPermissionType.CREATE_USER, - PermissionSet.hasUserPermission, - exists ? username : null); - - }); - - }, requestService.DIE); - - /** - * Returns the URL for the page which manages the user account currently - * being edited under the given data source. The given data source need not - * be the same as the data source currently selected. - * - * @param {String} dataSource - * The unique identifier of the data source that the URL is being - * generated for. - * - * @returns {String} - * The URL for the page which manages the user account currently being - * edited under the given data source. - */ - $scope.getUserURL = function getUserURL(dataSource) { - return '/manage/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username || ''); - }; - - /** - * Cancels all pending edits, returning to the main list of users. - */ - $scope.returnToUserList = function returnToUserList() { - $location.url('/settings/users'); - }; - - /** - * Cancels all pending edits, opening an edit page for a new user - * which is prepopulated with the data from the user currently being edited. - */ - $scope.cloneUser = function cloneUser() { - $location.path('/manage/' + encodeURIComponent($scope.dataSource) + '/users').search('clone', username); - $window.scrollTo(0,0); - }; - - /** - * Saves the current user, creating a new user or updating the existing - * user depending on context, returning a promise which is resolved if the - * save operation succeeds and rejected if the save operation fails. - * - * @returns {Promise} - * A promise which is resolved if the save operation succeeds and is - * rejected with an {@link Error} if the save operation fails. - */ - $scope.saveUser = function saveUser() { - - // Verify passwords match - if ($scope.passwordMatch !== $scope.user.password) { - return $q.reject(new Error({ - translatableMessage : { - key : 'MANAGE_USER.ERROR_PASSWORD_MISMATCH' - } - })); - } - - // Save or create the user, depending on whether the user exists - var saveUserPromise; - if ($scope.dataSource in $scope.users) - saveUserPromise = userService.saveUser($scope.dataSource, $scope.user); - else - saveUserPromise = userService.createUser($scope.dataSource, $scope.user); - - return saveUserPromise.then(function savedUser() { - - // Move permission flags if username differs from marker - if ($scope.selfUsername !== $scope.user.username) { - - // Rename added permission - if ($scope.permissionsAdded.userPermissions[$scope.selfUsername]) { - $scope.permissionsAdded.userPermissions[$scope.user.username] = $scope.permissionsAdded.userPermissions[$scope.selfUsername]; - delete $scope.permissionsAdded.userPermissions[$scope.selfUsername]; - } - - // Rename removed permission - if ($scope.permissionsRemoved.userPermissions[$scope.selfUsername]) { - $scope.permissionsRemoved.userPermissions[$scope.user.username] = $scope.permissionsRemoved.userPermissions[$scope.selfUsername]; - delete $scope.permissionsRemoved.userPermissions[$scope.selfUsername]; - } - - } - - // Upon success, save any changed permissions/groups - return $q.all([ - permissionService.patchPermissions($scope.dataSource, $scope.user.username, $scope.permissionsAdded, $scope.permissionsRemoved), - membershipService.patchUserGroups($scope.dataSource, $scope.user.username, $scope.parentGroupsAdded, $scope.parentGroupsRemoved) - ]); - - }); - - }; - - /** - * Deletes the current user, returning a promise which is resolved if the - * delete operation succeeds and rejected if the delete operation fails. - * - * @returns {Promise} - * A promise which is resolved if the delete operation succeeds and is - * rejected with an {@link Error} if the delete operation fails. - */ - $scope.deleteUser = function deleteUser() { - return userService.deleteUser($scope.dataSource, $scope.user); - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/controllers/manageUserGroupController.js b/guacamole/src/main/frontend/src/app/manage/controllers/manageUserGroupController.js deleted file mode 100644 index b58fe283e9..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/controllers/manageUserGroupController.js +++ /dev/null @@ -1,555 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for editing user groups. - */ -angular.module('manage').controller('manageUserGroupController', ['$scope', '$injector', - function manageUserGroupController($scope, $injector) { - - // Required types - var ManagementPermissions = $injector.get('ManagementPermissions'); - var PermissionFlagSet = $injector.get('PermissionFlagSet'); - var PermissionSet = $injector.get('PermissionSet'); - var UserGroup = $injector.get('UserGroup'); - - // Required services - var $location = $injector.get('$location'); - var $routeParams = $injector.get('$routeParams'); - var $q = $injector.get('$q'); - var $window = $injector.get('$window'); - var authenticationService = $injector.get('authenticationService'); - var dataSourceService = $injector.get('dataSourceService'); - var membershipService = $injector.get('membershipService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var schemaService = $injector.get('schemaService'); - var userGroupService = $injector.get('userGroupService'); - var userService = $injector.get('userService'); - - /** - * The identifiers of all data sources currently available to the - * authenticated user. - * - * @type String[] - */ - var dataSources = authenticationService.getAvailableDataSources(); - - /** - * The username of the current, authenticated user. - * - * @type String - */ - var currentUsername = authenticationService.getCurrentUsername(); - - /** - * The identifier of the original user group from which this user group is - * being cloned. Only valid if this is a new user group. - * - * @type String - */ - var cloneSourceIdentifier = $location.search().clone; - - /** - * The identifier of the user group being edited. If a new user group is - * being created, this will not be defined. - * - * @type String - */ - var identifier = $routeParams.id; - - /** - * The unique identifier of the data source containing the user group being - * edited. - * - * @type String - */ - $scope.dataSource = $routeParams.dataSource; - - /** - * All user groups associated with the same identifier as the group being - * created or edited, as a map of data source identifier to the UserGroup - * object within that data source. - * - * @type Object. - */ - $scope.userGroups = null; - - /** - * The user group being modified. - * - * @type UserGroup - */ - $scope.userGroup = null; - - /** - * All permissions associated with the user group being modified. - * - * @type PermissionFlagSet - */ - $scope.permissionFlags = null; - - /** - * The set of permissions that will be added to the user group when the - * user group is saved. Permissions will only be present in this set if they - * are manually added, and not later manually removed before saving. - * - * @type PermissionSet - */ - $scope.permissionsAdded = new PermissionSet(); - - /** - * The set of permissions that will be removed from the user group when the - * user group is saved. Permissions will only be present in this set if they - * are manually removed, and not later manually added before saving. - * - * @type PermissionSet - */ - $scope.permissionsRemoved = new PermissionSet(); - - /** - * The identifiers of all user groups which can be manipulated (all groups - * for which the user accessing this interface has UPDATE permission), - * whether that means changing the members of those groups or changing the - * groups of which those groups are members. If this information has not - * yet been retrieved, this will be null. - * - * @type String[] - */ - $scope.availableGroups = null; - - /** - * The identifiers of all users which can be manipulated (all users for - * which the user accessing this interface has UPDATE permission), either - * through adding those users as a member of the current group or removing - * those users from the current group. If this information has not yet been - * retrieved, this will be null. - * - * @type String[] - */ - $scope.availableUsers = null; - - /** - * The identifiers of all user groups of which this group is a member, - * taking into account any user groups which will be added/removed when - * saved. If this information has not yet been retrieved, this will be - * null. - * - * @type String[] - */ - $scope.parentGroups = null; - - /** - * The set of identifiers of all parent user groups to which this group - * will be added when saved. Parent groups will only be present in this set - * if they are manually added, and not later manually removed before - * saving. - * - * @type String[] - */ - $scope.parentGroupsAdded = []; - - /** - * The set of identifiers of all parent user groups from which this group - * will be removed when saved. Parent groups will only be present in this - * set if they are manually removed, and not later manually added before - * saving. - * - * @type String[] - */ - $scope.parentGroupsRemoved = []; - - /** - * The identifiers of all user groups which are members of this group, - * taking into account any user groups which will be added/removed when - * saved. If this information has not yet been retrieved, this will be - * null. - * - * @type String[] - */ - $scope.memberGroups = null; - - /** - * The set of identifiers of all member user groups which will be added to - * this group when saved. Member groups will only be present in this set if - * they are manually added, and not later manually removed before saving. - * - * @type String[] - */ - $scope.memberGroupsAdded = []; - - /** - * The set of identifiers of all member user groups which will be removed - * from this group when saved. Member groups will only be present in this - * set if they are manually removed, and not later manually added before - * saving. - * - * @type String[] - */ - $scope.memberGroupsRemoved = []; - - /** - * The identifiers of all users which are members of this group, taking - * into account any users which will be added/removed when saved. If this - * information has not yet been retrieved, this will be null. - * - * @type String[] - */ - $scope.memberUsers = null; - - /** - * The set of identifiers of all member users which will be added to this - * group when saved. Member users will only be present in this set if they - * are manually added, and not later manually removed before saving. - * - * @type String[] - */ - $scope.memberUsersAdded = []; - - /** - * The set of identifiers of all member users which will be removed from - * this group when saved. Member users will only be present in this set if - * they are manually removed, and not later manually added before saving. - * - * @type String[] - */ - $scope.memberUsersRemoved = []; - - /** - * For each applicable data source, the management-related actions that the - * current user may perform on the user group currently being created - * or modified, as a map of data source identifier to the - * {@link ManagementPermissions} object describing the actions available - * within that data source, or null if the current user's permissions have - * not yet been loaded. - * - * @type Object. - */ - $scope.managementPermissions = null; - - /** - * All available user group attributes. This is only the set of attribute - * definitions, organized as logical groupings of attributes, not attribute - * values. - * - * @type Form[] - */ - $scope.attributes = null; - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user group interface to - * be useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.userGroups !== null - && $scope.permissionFlags !== null - && $scope.managementPermissions !== null - && $scope.availableGroups !== null - && $scope.availableUsers !== null - && $scope.parentGroups !== null - && $scope.memberGroups !== null - && $scope.memberUsers !== null - && $scope.attributes !== null; - - }; - - /** - * Returns whether the current user can edit the identifier of the user - * group being edited. - * - * @returns {Boolean} - * true if the current user can edit the identifier of the user group - * being edited, false otherwise. - */ - $scope.canEditIdentifier = function canEditIdentifier() { - return !identifier; - }; - - /** - * Loads the data associated with the user group having the given - * identifier, preparing the interface for making modifications to that - * existing user group. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group - * to load. - * - * @param {String} identifier - * The unique identifier of the user group to load. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * editing the given user group. - */ - var loadExistingUserGroup = function loadExistingGroup(dataSource, identifier) { - return $q.all({ - userGroups : dataSourceService.apply(userGroupService.getUserGroup, dataSources, identifier), - - // Use empty permission set if group cannot be found - permissions: - permissionService.getPermissions(dataSource, identifier, true) - ['catch'](requestService.defaultValue(new PermissionSet())), - - // Assume no parent groups if group cannot be found - parentGroups: - membershipService.getUserGroups(dataSource, identifier, true) - ['catch'](requestService.defaultValue([])), - - // Assume no member groups if group cannot be found - memberGroups: - membershipService.getMemberUserGroups(dataSource, identifier) - ['catch'](requestService.defaultValue([])), - - // Assume no member users if group cannot be found - memberUsers: - membershipService.getMemberUsers(dataSource, identifier) - ['catch'](requestService.defaultValue([])) - - }) - .then(function userGroupDataRetrieved(values) { - - $scope.userGroups = values.userGroups; - $scope.parentGroups = values.parentGroups; - $scope.memberGroups = values.memberGroups; - $scope.memberUsers = values.memberUsers; - - // Create skeleton user group if user group does not exist - $scope.userGroup = values.userGroups[dataSource] || new UserGroup({ - 'identifier' : identifier - }); - - $scope.permissionFlags = PermissionFlagSet.fromPermissionSet(values.permissions); - - }); - }; - - /** - * Loads the data associated with the user group having the given - * identifier, preparing the interface for cloning that existing user - * group. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group to - * be cloned. - * - * @param {String} identifier - * The unique identifier of the user group being cloned. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * cloning the given user group. - */ - var loadClonedUserGroup = function loadClonedUserGroup(dataSource, identifier) { - return $q.all({ - userGroups : dataSourceService.apply(userGroupService.getUserGroup, [dataSource], identifier), - permissions : permissionService.getPermissions(dataSource, identifier, true), - parentGroups : membershipService.getUserGroups(dataSource, identifier, true), - memberGroups : membershipService.getMemberUserGroups(dataSource, identifier), - memberUsers : membershipService.getMemberUsers(dataSource, identifier) - }) - .then(function userGroupDataRetrieved(values) { - - $scope.userGroups = {}; - $scope.userGroup = values.userGroups[dataSource]; - $scope.parentGroups = values.parentGroups; - $scope.parentGroupsAdded = values.parentGroups; - $scope.memberGroups = values.memberGroups; - $scope.memberGroupsAdded = values.memberGroups; - $scope.memberUsers = values.memberUsers; - $scope.memberUsersAdded = values.memberUsers; - - $scope.permissionFlags = PermissionFlagSet.fromPermissionSet(values.permissions); - $scope.permissionsAdded = values.permissions; - - }); - }; - - /** - * Loads skeleton user group data, preparing the interface for creating a - * new user group. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared for - * creating a new user group. - */ - var loadSkeletonUserGroup = function loadSkeletonUserGroup() { - - // No user groups exist regardless of data source if the user group is - // being created - $scope.userGroups = {}; - - // Use skeleton user group object with no associated permissions - $scope.userGroup = new UserGroup(); - $scope.parentGroups = []; - $scope.memberGroups = []; - $scope.memberUsers = []; - $scope.permissionFlags = new PermissionFlagSet(); - - return $q.resolve(); - - }; - - /** - * Loads the data required for performing the management task requested - * through the route parameters given at load time, automatically preparing - * the interface for editing an existing user group, cloning an existing - * user group, or creating an entirely new user group. - * - * @returns {Promise} - * A promise which is resolved when the interface has been prepared - * for performing the requested management task. - */ - var loadRequestedUserGroup = function loadRequestedUserGroup() { - - // Pull user group data and permissions if we are editing an existing - // user group - if (identifier) - return loadExistingUserGroup($scope.dataSource, identifier); - - // If we are cloning an existing user group, pull its data instead - if (cloneSourceIdentifier) - return loadClonedUserGroup($scope.dataSource, cloneSourceIdentifier); - - // If we are creating a new user group, populate skeleton user group data - return loadSkeletonUserGroup(); - - }; - - // Populate interface with requested data - $q.all({ - userGroupData : loadRequestedUserGroup(), - permissions : dataSourceService.apply(permissionService.getEffectivePermissions, dataSources, currentUsername), - userGroups : userGroupService.getUserGroups($scope.dataSource, [ PermissionSet.ObjectPermissionType.UPDATE ]), - users : userService.getUsers($scope.dataSource, [ PermissionSet.ObjectPermissionType.UPDATE ]), - attributes : schemaService.getUserGroupAttributes($scope.dataSource) - }) - .then(function dataReceived(values) { - - $scope.attributes = values.attributes; - - $scope.managementPermissions = {}; - angular.forEach(dataSources, function deriveManagementPermissions(dataSource) { - - // Determine whether data source contains this user group - var exists = (dataSource in $scope.userGroups); - - // Add the identifiers of all modifiable user groups - $scope.availableGroups = []; - angular.forEach(values.userGroups, function addUserGroupIdentifier(userGroup) { - $scope.availableGroups.push(userGroup.identifier); - }); - - // Add the identifiers of all modifiable users - $scope.availableUsers = []; - angular.forEach(values.users, function addUserIdentifier(user) { - $scope.availableUsers.push(user.username); - }); - - // Calculate management actions available for this specific group - $scope.managementPermissions[dataSource] = ManagementPermissions.fromPermissionSet( - values.permissions[dataSource], - PermissionSet.SystemPermissionType.CREATE_USER_GROUP, - PermissionSet.hasUserGroupPermission, - exists ? identifier : null); - - }); - - }, requestService.WARN); - - /** - * Returns the URL for the page which manages the user group currently - * being edited under the given data source. The given data source need not - * be the same as the data source currently selected. - * - * @param {String} dataSource - * The unique identifier of the data source that the URL is being - * generated for. - * - * @returns {String} - * The URL for the page which manages the user group currently being - * edited under the given data source. - */ - $scope.getUserGroupURL = function getUserGroupURL(dataSource) { - return '/manage/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier || ''); - }; - - /** - * Cancels all pending edits, returning to the main list of user groups. - */ - $scope.returnToUserGroupList = function returnToUserGroupList() { - $location.url('/settings/userGroups'); - }; - - /** - * Cancels all pending edits, opening an edit page for a new user group - * which is prepopulated with the data from the user currently being edited. - */ - $scope.cloneUserGroup = function cloneUserGroup() { - $location.path('/manage/' + encodeURIComponent($scope.dataSource) + '/userGroups').search('clone', identifier); - $window.scrollTo(0,0); - }; - - /** - * Saves the current user group, creating a new user group or updating the - * existing user group depending on context, returning a promise which is - * resolved if the save operation succeeds and rejected if the save - * operation fails. - * - * @returns {Promise} - * A promise which is resolved if the save operation succeeds and is - * rejected with an {@link Error} if the save operation fails. - */ - $scope.saveUserGroup = function saveUserGroup() { - - // Save or create the user group, depending on whether the user group exists - var saveUserGroupPromise; - if ($scope.dataSource in $scope.userGroups) - saveUserGroupPromise = userGroupService.saveUserGroup($scope.dataSource, $scope.userGroup); - else - saveUserGroupPromise = userGroupService.createUserGroup($scope.dataSource, $scope.userGroup); - - return saveUserGroupPromise.then(function savedUserGroup() { - return $q.all([ - permissionService.patchPermissions($scope.dataSource, $scope.userGroup.identifier, $scope.permissionsAdded, $scope.permissionsRemoved, true), - membershipService.patchUserGroups($scope.dataSource, $scope.userGroup.identifier, $scope.parentGroupsAdded, $scope.parentGroupsRemoved, true), - membershipService.patchMemberUserGroups($scope.dataSource, $scope.userGroup.identifier, $scope.memberGroupsAdded, $scope.memberGroupsRemoved), - membershipService.patchMemberUsers($scope.dataSource, $scope.userGroup.identifier, $scope.memberUsersAdded, $scope.memberUsersRemoved) - ]); - }); - - }; - - /** - * Deletes the current user group, returning a promise which is resolved if - * the delete operation succeeds and rejected if the delete operation - * fails. - * - * @returns {Promise} - * A promise which is resolved if the delete operation succeeds and is - * rejected with an {@link Error} if the delete operation fails. - */ - $scope.deleteUserGroup = function deleteUserGroup() { - return userGroupService.deleteUserGroup($scope.dataSource, $scope.userGroup); - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/directives/connectionPermissionEditor.js b/guacamole/src/main/frontend/src/app/manage/directives/connectionPermissionEditor.js deleted file mode 100644 index 9392bb0fc2..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/directives/connectionPermissionEditor.js +++ /dev/null @@ -1,557 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for manipulating the connection permissions granted within a - * given {@link PermissionFlagSet}, tracking the specific permissions added or - * removed within a separate pair of {@link PermissionSet} objects. - */ -angular.module('manage').directive('connectionPermissionEditor', ['$injector', - function connectionPermissionEditor($injector) { - - // Required types - var ConnectionGroup = $injector.get('ConnectionGroup'); - var GroupListItem = $injector.get('GroupListItem'); - var PermissionSet = $injector.get('PermissionSet'); - - // Required services - var connectionGroupService = $injector.get('connectionGroupService'); - var dataSourceService = $injector.get('dataSourceService'); - var requestService = $injector.get('requestService'); - - var directive = { - - // Element only - restrict: 'E', - replace: true, - - scope: { - - /** - * The unique identifier of the data source associated with the - * permissions being manipulated. - * - * @type String - */ - dataSource : '=', - - /** - * The current state of the permissions being manipulated. This - * {@link PemissionFlagSet} will be modified as changes are made - * through this permission editor. - * - * @type PermissionFlagSet - */ - permissionFlags : '=', - - /** - * The set of permissions that have been added, relative to the - * initial state of the permissions being manipulated. - * - * @type PermissionSet - */ - permissionsAdded : '=', - - /** - * The set of permissions that have been removed, relative to the - * initial state of the permissions being manipulated. - * - * @type PermissionSet - */ - permissionsRemoved : '=' - - }, - - templateUrl: 'app/manage/templates/connectionPermissionEditor.html' - - }; - - directive.controller = ['$scope', function connectionPermissionEditorController($scope) { - - /** - * A map of data source identifiers to all root connection groups - * within those data sources, regardless of the permissions granted for - * the items within those groups. As only one data source is applicable - * to any particular permission set being edited/created, this will only - * contain a single key. If the data necessary to produce this map has - * not yet been loaded, this will be null. - * - * @type Object. - */ - var allRootGroups = null; - - /** - * A map of data source identifiers to the root connection groups within - * those data sources, excluding all items which are not explicitly - * readable according to $scope.permissionFlags. As only one data - * source is applicable to any particular permission set being - * edited/created, this will only contain a single key. If the data - * necessary to produce this map has not yet been loaded, this will be - * null. - * - * @type Object. - */ - var readableRootGroups = null; - - /** - * The name of the tab within the connection permission editor which - * displays currently selected (readable) connections only. - * - * @constant - * @type String - */ - var CURRENT_CONNECTIONS = 'CURRENT_CONNECTIONS'; - - /** - * The name of the tab within the connection permission editor which - * displays all connections, regardless of whether they are readable. - * - * @constant - * @type String - */ - var ALL_CONNECTIONS = 'ALL_CONNECTIONS'; - - /** - * The names of all tabs which should be available within the - * connection permission editor, in display order. - * - * @type String[] - */ - $scope.tabs = [ - CURRENT_CONNECTIONS, - ALL_CONNECTIONS - ]; - - /** - * The name of the currently selected tab. - * - * @type String - */ - $scope.currentTab = ALL_CONNECTIONS; - - /** - * Array of all connection properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionProperties = [ - 'name', - 'protocol' - ]; - - /** - * Array of all connection group properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionGroupProperties = [ - 'name' - ]; - - /** - * Returns the root groups which should be displayed within the - * connection permission editor. - * - * @returns {Object.} - * The root groups which should be displayed within the connection - * permission editor as a map of data source identifiers to the - * root connection groups within those data sources. - */ - $scope.getRootGroups = function getRootGroups() { - return $scope.currentTab === CURRENT_CONNECTIONS ? readableRootGroups : allRootGroups; - }; - - /** - * Returns whether the given PermissionFlagSet declares explicit READ - * permission for the connection, connection group, or sharing profile - * represented by the given GroupListItem. - * - * @param {GroupListItem} item - * The GroupListItem which should be checked against the - * PermissionFlagSet. - * - * @param {PemissionFlagSet} flags - * The set of permissions which should be used to determine whether - * explicit READ permission is granted for the given item. - * - * @returns {Boolean} - * true if explicit READ permission is granted for the given item - * according to the given permission set, false otherwise. - */ - var isReadable = function isReadable(item, flags) { - - switch (item.type) { - - case GroupListItem.Type.CONNECTION: - return flags.connectionPermissions.READ[item.identifier]; - - case GroupListItem.Type.CONNECTION_GROUP: - return flags.connectionGroupPermissions.READ[item.identifier]; - - case GroupListItem.Type.SHARING_PROFILE: - return flags.sharingProfilePermissions.READ[item.identifier]; - - } - - return false; - - }; - - /** - * Expands all items within the tree descending from the given - * GroupListItem which have at least one descendant for which explicit - * READ permission is granted. The expanded state of all other items is - * left untouched. - * - * @param {GroupListItem} item - * The GroupListItem which should be conditionally expanded - * depending on whether READ permission is granted for any of its - * descendants. - * - * @param {PemissionFlagSet} flags - * The set of permissions which should be used to determine whether - * the given item and its descendants are expanded. - * - * @returns {Boolean} - * true if the given item has been expanded, false otherwise. - */ - var expandReadable = function expandReadable(item, flags) { - - // If the current item is expandable and has defined children, - // determine whether it should be expanded - if (item.expandable && item.children) { - angular.forEach(item.children, function expandReadableChild(child) { - - // The parent should be expanded by default if the child is - // expanded by default OR the permission set contains READ - // permission on the child - item.expanded |= expandReadable(child, flags) || isReadable(child, flags); - - }); - } - - return item.expanded; - - }; - - /** - * Creates a deep copy of all items within the tree descending from the - * given GroupListItem which have at least one descendant for which - * explicit READ permission is granted. Items which lack explicit READ - * permission and which have no descendants having explicit READ - * permission are omitted from the copy. - * - * @param {GroupListItem} item - * The GroupListItem which should be conditionally copied - * depending on whether READ permission is granted for any of its - * descendants. - * - * @param {PemissionFlagSet} flags - * The set of permissions which should be used to determine whether - * the given item or any of its descendants are copied. - * - * @returns {GroupListItem} - * A new GroupListItem containing a deep copy of the given item, - * omitting any items which lack explicit READ permission and whose - * descendants also lack explicit READ permission, or null if even - * the given item would not be copied. - */ - var copyReadable = function copyReadable(item, flags) { - - // Produce initial shallow copy of given item - item = new GroupListItem(item); - - // Replace children array with an array containing only readable - // children (or children with at least one readable descendant), - // flagging the current item for copying if any such children exist - if (item.children) { - - var children = []; - angular.forEach(item.children, function copyReadableChildren(child) { - - // Reduce child tree to only explicitly readable items and - // their parents - child = copyReadable(child, flags); - - // Include child only if they are explicitly readable, they - // have explicitly readable descendants, or their parent is - // readable (and thus all children are relevant) - if ((child.children && child.children.length) - || isReadable(item, flags) - || isReadable(child, flags)) - children.push(child); - - }); - - item.children = children; - - } - - return item; - - }; - - // Retrieve all connections for which we have ADMINISTER permission - dataSourceService.apply( - connectionGroupService.getConnectionGroupTree, - [$scope.dataSource], - ConnectionGroup.ROOT_IDENTIFIER, - [PermissionSet.ObjectPermissionType.ADMINISTER] - ) - .then(function connectionGroupReceived(rootGroups) { - - // Update default expanded state and the all / readable-only views - // when associated permissions change - $scope.$watchGroup(['permissionFlags'], function updateDefaultExpandedStates() { - - if (!$scope.permissionFlags) - return; - - allRootGroups = {}; - readableRootGroups = {}; - - angular.forEach(rootGroups, function addGroupListItem(rootGroup, dataSource) { - - // Convert all received ConnectionGroup objects into GroupListItems - var item = GroupListItem.fromConnectionGroup(dataSource, rootGroup); - allRootGroups[dataSource] = item; - - // Automatically expand all objects with any descendants for - // which the permission set contains READ permission - expandReadable(item, $scope.permissionFlags); - - // Create a duplicate view which contains only readable - // items - readableRootGroups[dataSource] = copyReadable(item, $scope.permissionFlags); - - }); - - // Display only readable connections by default if at least one - // readable connection exists - $scope.currentTab = !!readableRootGroups[$scope.dataSource].children.length ? CURRENT_CONNECTIONS : ALL_CONNECTIONS; - - }); - - }, requestService.DIE); - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the addition of the given connection permission. - * - * @param {String} identifier - * The identifier of the connection to add READ permission for. - */ - var addConnectionPermission = function addConnectionPermission(identifier) { - - // If permission was previously removed, simply un-remove it - if (PermissionSet.hasConnectionPermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier)) - PermissionSet.removeConnectionPermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier); - - // Otherwise, explicitly add the permission - else - PermissionSet.addConnectionPermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the removal of the given connection permission. - * - * @param {String} identifier - * The identifier of the connection to remove READ permission for. - */ - var removeConnectionPermission = function removeConnectionPermission(identifier) { - - // If permission was previously added, simply un-add it - if (PermissionSet.hasConnectionPermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier)) - PermissionSet.removeConnectionPermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier); - - // Otherwise, explicitly remove the permission - else - PermissionSet.addConnectionPermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the addition of the given connection group permission. - * - * @param {String} identifier - * The identifier of the connection group to add READ permission - * for. - */ - var addConnectionGroupPermission = function addConnectionGroupPermission(identifier) { - - // If permission was previously removed, simply un-remove it - if (PermissionSet.hasConnectionGroupPermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier)) - PermissionSet.removeConnectionGroupPermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier); - - // Otherwise, explicitly add the permission - else - PermissionSet.addConnectionGroupPermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the removal of the given connection group permission. - * - * @param {String} identifier - * The identifier of the connection group to remove READ permission - * for. - */ - var removeConnectionGroupPermission = function removeConnectionGroupPermission(identifier) { - - // If permission was previously added, simply un-add it - if (PermissionSet.hasConnectionGroupPermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier)) - PermissionSet.removeConnectionGroupPermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier); - - // Otherwise, explicitly remove the permission - else - PermissionSet.addConnectionGroupPermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the addition of the given sharing profile permission. - * - * @param {String} identifier - * The identifier of the sharing profile to add READ permission for. - */ - var addSharingProfilePermission = function addSharingProfilePermission(identifier) { - - // If permission was previously removed, simply un-remove it - if (PermissionSet.hasSharingProfilePermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier)) - PermissionSet.removeSharingProfilePermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier); - - // Otherwise, explicitly add the permission - else - PermissionSet.addSharingProfilePermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the removal of the given sharing profile permission. - * - * @param {String} identifier - * The identifier of the sharing profile to remove READ permission - * for. - */ - var removeSharingProfilePermission = function removeSharingProfilePermission(identifier) { - - // If permission was previously added, simply un-add it - if (PermissionSet.hasSharingProfilePermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier)) - PermissionSet.removeSharingProfilePermission($scope.permissionsAdded, PermissionSet.ObjectPermissionType.READ, identifier); - - // Otherwise, explicitly remove the permission - else - PermissionSet.addSharingProfilePermission($scope.permissionsRemoved, PermissionSet.ObjectPermissionType.READ, identifier); - - }; - - // Expose permission query and modification functions to group list template - $scope.groupListContext = { - - /** - * Returns the PermissionFlagSet that contains the current state of - * granted permissions. - * - * @returns {PermissionFlagSet} - * The PermissionFlagSet describing the current state of granted - * permissions for the permission set being edited. - */ - getPermissionFlags : function getPermissionFlags() { - return $scope.permissionFlags; - }, - - /** - * Notifies the controller that a change has been made to the given - * connection permission for the permission set being edited. This - * only applies to READ permissions. - * - * @param {String} identifier - * The identifier of the connection affected by the changed - * permission. - */ - connectionPermissionChanged : function connectionPermissionChanged(identifier) { - - // Determine current permission setting - var granted = $scope.permissionFlags.connectionPermissions.READ[identifier]; - - // Add/remove permission depending on flag state - if (granted) - addConnectionPermission(identifier); - else - removeConnectionPermission(identifier); - - }, - - /** - * Notifies the controller that a change has been made to the given - * connection group permission for the permission set being edited. - * This only applies to READ permissions. - * - * @param {String} identifier - * The identifier of the connection group affected by the - * changed permission. - */ - connectionGroupPermissionChanged : function connectionGroupPermissionChanged(identifier) { - - // Determine current permission setting - var granted = $scope.permissionFlags.connectionGroupPermissions.READ[identifier]; - - // Add/remove permission depending on flag state - if (granted) - addConnectionGroupPermission(identifier); - else - removeConnectionGroupPermission(identifier); - - }, - - /** - * Notifies the controller that a change has been made to the given - * sharing profile permission for the permission set being edited. - * This only applies to READ permissions. - * - * @param {String} identifier - * The identifier of the sharing profile affected by the changed - * permission. - */ - sharingProfilePermissionChanged : function sharingProfilePermissionChanged(identifier) { - - // Determine current permission setting - var granted = $scope.permissionFlags.sharingProfilePermissions.READ[identifier]; - - // Add/remove permission depending on flag state - if (granted) - addSharingProfilePermission(identifier); - else - removeSharingProfilePermission(identifier); - - } - - }; - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/directives/dataSourceTabs.js b/guacamole/src/main/frontend/src/app/manage/directives/dataSourceTabs.js deleted file mode 100644 index 627197bf4f..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/directives/dataSourceTabs.js +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Directive which displays a set of tabs pointing to the same object within - * different data sources, such as user accounts which span multiple data - * sources. - */ -angular.module('manage').directive('dataSourceTabs', ['$injector', - function dataSourceTabs($injector) { - - // Required types - var PageDefinition = $injector.get('PageDefinition'); - - // Required services - var translationStringService = $injector.get('translationStringService'); - - var directive = { - - restrict : 'E', - replace : true, - templateUrl : 'app/manage/templates/dataSourceTabs.html', - - scope : { - - /** - * The permissions which dictate the management actions available - * to the current user. - * - * @type Object. - */ - permissions : '=', - - /** - * A function which returns the URL of the object within a given - * data source. The relevant data source will be made available to - * the Angular expression defining this function as the - * "dataSource" variable. No other values will be made available, - * including values from the scope. - * - * @type Function - */ - url : '&' - - } - - }; - - directive.controller = ['$scope', function dataSourceTabsController($scope) { - - /** - * The set of pages which each manage the same object within different - * data sources. - * - * @type PageDefinition[] - */ - $scope.pages = null; - - // Keep pages synchronized with permissions - $scope.$watch('permissions', function permissionsChanged(permissions) { - - $scope.pages = []; - - var dataSources = _.keys($scope.permissions).sort(); - angular.forEach(dataSources, function addDataSourcePage(dataSource) { - - // Determine whether data source contains this object - var managementPermissions = permissions[dataSource]; - var exists = !!managementPermissions.identifier; - - // Data source is not relevant if the associated object does not - // exist and cannot be created - var readOnly = !managementPermissions.canSaveObject; - if (!exists && readOnly) - return; - - // Determine class name based on read-only / linked status - var className; - if (readOnly) className = 'read-only'; - else if (exists) className = 'linked'; - else className = 'unlinked'; - - // Add page entry - $scope.pages.push(new PageDefinition({ - name : translationStringService.canonicalize('DATA_SOURCE_' + dataSource) + '.NAME', - url : $scope.url({ dataSource : dataSource }), - className : className - })); - - }); - - }); - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/directives/identifierSetEditor.js b/guacamole/src/main/frontend/src/app/manage/directives/identifierSetEditor.js deleted file mode 100644 index d2936e7b9c..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/directives/identifierSetEditor.js +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for manipulating a set of objects sharing some common relation - * and represented by an array of their identifiers. The specific objects - * added or removed are tracked within a separate pair of arrays of - * identifiers. - */ -angular.module('manage').directive('identifierSetEditor', ['$injector', - function identifierSetEditor($injector) { - - var directive = { - - // Element only - restrict: 'E', - replace: true, - - scope: { - - /** - * The translation key of the text which should be displayed within - * the main header of the identifier set editor. - * - * @type String - */ - header : '@', - - /** - * The translation key of the text which should be displayed if no - * identifiers are currently present within the set. - * - * @type String - */ - emptyPlaceholder : '@', - - /** - * The translation key of the text which should be displayed if no - * identifiers are available to be added within the set. - * - * @type String - */ - unavailablePlaceholder : '@', - - /** - * All identifiers which are available to be added to or removed - * from the identifier set being edited. - * - * @type String[] - */ - identifiersAvailable : '=', - - /** - * The current state of the identifier set being manipulated. This - * array will be modified as changes are made through this - * identifier set editor. - * - * @type String[] - */ - identifiers : '=', - - /** - * The set of identifiers that have been added, relative to the - * initial state of the identifier set being manipulated. - * - * @type String[] - */ - identifiersAdded : '=', - - /** - * The set of identifiers that have been removed, relative to the - * initial state of the identifier set being manipulated. - * - * @type String[] - */ - identifiersRemoved : '=' - - }, - - templateUrl: 'app/manage/templates/identifierSetEditor.html' - - }; - - directive.controller = ['$scope', function identifierSetEditorController($scope) { - - /** - * Whether the full list of available identifiers should be displayed. - * Initially, only an abbreviated list of identifiers currently present - * is shown. - * - * @type Boolean - */ - $scope.expanded = false; - - /** - * Map of identifiers to boolean flags indicating whether that - * identifier is currently present (true) or absent (false). If an - * identifier is absent, it may also be absent from this map. - * - * @type Object. - */ - $scope.identifierFlags = {}; - - /** - * Map of identifiers to boolean flags indicating whether that - * identifier is editable. If an identifier is not editable, it will be - * absent from this map. - * - * @type Object. - */ - $scope.isEditable = {}; - - /** - * Adds the given identifier to the given sorted array of identifiers, - * preserving the sorted order of the array. If the identifier is - * already present, no change is made to the array. The given array - * must already be sorted in ascending order. - * - * @param {String[]} arr - * The sorted array of identifiers to add the given identifier to. - * - * @param {String} identifier - * The identifier to add to the given array. - */ - var addIdentifier = function addIdentifier(arr, identifier) { - - // Determine location that the identifier should be added to - // maintain sorted order - var index = _.sortedIndex(arr, identifier); - - // Do not add if already present - if (arr[index] === identifier) - return; - - // Insert identifier at determined location - arr.splice(index, 0, identifier); - - }; - - /** - * Removes the given identifier from the given sorted array of - * identifiers, preserving the sorted order of the array. If the - * identifier is already absent, no change is made to the array. The - * given array must already be sorted in ascending order. - * - * @param {String[]} arr - * The sorted array of identifiers to remove the given identifier - * from. - * - * @param {String} identifier - * The identifier to remove from the given array. - * - * @returns {Boolean} - * true if the identifier was present in the given array and has - * been removed, false otherwise. - */ - var removeIdentifier = function removeIdentifier(arr, identifier) { - - // Search for identifier in sorted array - var index = _.sortedIndexOf(arr, identifier); - - // Nothing to do if already absent - if (index === -1) - return false; - - // Remove identifier - arr.splice(index, 1); - return true; - - }; - - // Keep identifierFlags up to date when identifiers array is replaced - // or initially assigned - $scope.$watch('identifiers', function identifiersChanged(identifiers) { - - // Maintain identifiers in sorted order so additions and removals - // can be made more efficiently - if (identifiers) - identifiers.sort(); - - // Convert array of identifiers into set of boolean - // presence/absence flags - $scope.identifierFlags = {}; - angular.forEach(identifiers, function storeIdentifierFlag(identifier) { - $scope.identifierFlags[identifier] = true; - }); - - }); - - // An identifier is editable iff it is available to be added or removed - // from the identifier set being edited (iff it is within the - // identifiersAvailable array) - $scope.$watch('identifiersAvailable', function availableIdentifiersChanged(identifiers) { - $scope.isEditable = {}; - angular.forEach(identifiers, function storeEditableIdentifier(identifier) { - $scope.isEditable[identifier] = true; - }); - }); - - /** - * Notifies the controller that a change has been made to the flag - * denoting presence/absence of a particular identifier within the - * identifierFlags map. The identifiers, - * identifiersAdded, and identifiersRemoved - * arrays are updated accordingly. - * - * @param {String} identifier - * The identifier which has been added or removed through modifying - * its boolean flag within identifierFlags. - */ - $scope.identifierChanged = function identifierChanged(identifier) { - - // Determine status of modified identifier - var present = !!$scope.identifierFlags[identifier]; - - // Add/remove identifier from added/removed sets depending on - // change in flag state - if (present) { - - addIdentifier($scope.identifiers, identifier); - - if (!removeIdentifier($scope.identifiersRemoved, identifier)) - addIdentifier($scope.identifiersAdded, identifier); - - } - else { - - removeIdentifier($scope.identifiers, identifier); - - if (!removeIdentifier($scope.identifiersAdded, identifier)) - addIdentifier($scope.identifiersRemoved, identifier); - - } - - }; - - /** - * Removes the given identifier, updating identifierFlags, - * identifiers, identifiersAdded, and - * identifiersRemoved accordingly. - * - * @param {String} identifier - * The identifier to remove. - */ - $scope.removeIdentifier = function removeIdentifier(identifier) { - $scope.identifierFlags[identifier] = false; - $scope.identifierChanged(identifier); - }; - - /** - * Shows the full list of available identifiers. If the full list is - * already shown, this function has no effect. - */ - $scope.expand = function expand() { - $scope.expanded = true; - }; - - /** - * Hides the full list of available identifiers. If the full list is - * already hidden, this function has no effect. - */ - $scope.collapse = function collapse() { - $scope.expanded = false; - }; - - /** - * Returns whether there are absolutely no identifiers that can be - * managed using this editor. If true, the editor is effectively - * useless, as there is nothing whatsoever to display. - * - * @returns {Boolean} - * true if there are no identifiers that can be managed using this - * editor, false otherwise. - */ - $scope.isEmpty = function isEmpty() { - return _.isEmpty($scope.identifiers) - && _.isEmpty($scope.identifiersAvailable); - }; - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/directives/locationChooser.js b/guacamole/src/main/frontend/src/app/manage/directives/locationChooser.js deleted file mode 100644 index d91c5d4932..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/directives/locationChooser.js +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -/** - * A directive for choosing the location of a connection or connection group. - */ -angular.module('manage').directive('locationChooser', [function locationChooser() { - - return { - // Element only - restrict: 'E', - replace: true, - - scope: { - - /** - * The identifier of the data source from which the given root - * connection group was retrieved. - * - * @type String - */ - dataSource : '=', - - /** - * The root connection group of the connection group hierarchy to - * display. - * - * @type ConnectionGroup - */ - rootGroup : '=', - - /** - * The unique identifier of the currently-selected connection - * group. If not specified, the root group will be used. - * - * @type String - */ - value : '=' - - }, - - templateUrl: 'app/manage/templates/locationChooser.html', - controller: ['$scope', function locationChooserController($scope) { - - /** - * Map of unique identifiers to their corresponding connection - * groups. - * - * @type Object. - */ - var connectionGroups = {}; - - /** - * Recursively traverses the given connection group and all - * children, storing each encountered connection group within the - * connectionGroups map by its identifier. - * - * @param {GroupListItem} group - * The connection group to traverse. - */ - var mapConnectionGroups = function mapConnectionGroups(group) { - - // Map given group - connectionGroups[group.identifier] = group; - - // Map all child groups - if (group.childConnectionGroups) - group.childConnectionGroups.forEach(mapConnectionGroups); - - }; - - /** - * Whether the group list menu is currently open. - * - * @type Boolean - */ - $scope.menuOpen = false; - - /** - * The human-readable name of the currently-chosen connection - * group. - * - * @type String - */ - $scope.chosenConnectionGroupName = null; - - /** - * Toggle the current state of the menu listing connection groups. - * If the menu is currently open, it will be closed. If currently - * closed, it will be opened. - */ - $scope.toggleMenu = function toggleMenu() { - $scope.menuOpen = !$scope.menuOpen; - }; - - // Update the root group map when data source or root group change - $scope.$watchGroup(['dataSource', 'rootGroup'], function updateRootGroups() { - - // Abort if the root group is not set - if (!$scope.dataSource || !$scope.rootGroup) - return null; - - // Wrap root group in map - $scope.rootGroups = {}; - $scope.rootGroups[$scope.dataSource] = $scope.rootGroup; - - }); - - // Expose selection function to group list template - $scope.groupListContext = { - - /** - * Selects the given group item. - * - * @param {GroupListItem} item - * The chosen item. - */ - chooseGroup : function chooseGroup(item) { - - // Record new parent - $scope.value = item.identifier; - $scope.chosenConnectionGroupName = item.name; - - // Close menu - $scope.menuOpen = false; - - } - - }; - - $scope.$watch('rootGroup', function setRootGroup(rootGroup) { - - connectionGroups = {}; - - if (!rootGroup) - return; - - // Map all known groups - mapConnectionGroups(rootGroup); - - // If no value is specified, default to the root identifier - if (!$scope.value || !($scope.value in connectionGroups)) - $scope.value = rootGroup.identifier; - - $scope.chosenConnectionGroupName = connectionGroups[$scope.value].name; - - }); - - }] - }; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/directives/managementButtons.js b/guacamole/src/main/frontend/src/app/manage/directives/managementButtons.js deleted file mode 100644 index f44515aa6e..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/directives/managementButtons.js +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Directive which displays a set of object management buttons (save, delete, - * clone, etc.) representing the actions available to the current user in - * context of the object being edited/created. - */ -angular.module('manage').directive('managementButtons', ['$injector', - function managementButtons($injector) { - - // Required services - var guacNotification = $injector.get('guacNotification'); - - var directive = { - - restrict : 'E', - replace : true, - templateUrl : 'app/manage/templates/managementButtons.html', - - scope : { - - /** - * The translation namespace associated with all applicable - * translation strings. This directive requires at least the - * following translation strings within the given namespace: - * - * - ACTION_CANCEL - * - ACTION_CLONE - * - ACTION_DELETE - * - ACTION_SAVE - * - DIALOG_HEADER_CONFIRM_DELETE - * - TEXT_CONFIRM_DELETE - * - * @type String - */ - namespace : '@', - - /** - * The permissions which dictate the management actions available - * to the current user. - * - * @type ManagementPermissions - */ - permissions : '=', - - /** - * The function to invoke to save the arbitrary object being edited - * if the current user has permission to do so. The provided - * function MUST return a promise which is resolved if the save - * operation succeeds and is rejected with an {@link Error} if the - * save operation fails. - * - * @type Function - */ - save : '&', - - /** - * The function to invoke when the current user chooses to clone - * the object being edited. The provided function MUST perform the - * actions necessary to produce an interface which will clone the - * object. - * - * @type Function - */ - clone : '&', - - /** - * The function to invoke to delete the arbitrary object being edited - * if the current user has permission to do so. The provided - * function MUST return a promise which is resolved if the delete - * operation succeeds and is rejected with an {@link Error} if the - * delete operation fails. - * - * @type Function - */ - delete : '&', - - /** - * The function to invoke when the current user chooses to cancel - * the edit in progress, or when a save/delete operation has - * succeeded. The provided function MUST perform the actions - * necessary to return the user to a reasonable starting point. - * - * @type Function - */ - return : '&' - - } - - }; - - directive.controller = ['$scope', function managementButtonsController($scope) { - - /** - * An action to be provided along with the object sent to showStatus which - * immediately deletes the current connection. - */ - var DELETE_ACTION = { - name : $scope.namespace + '.ACTION_DELETE', - className : 'danger', - callback : function deleteCallback() { - deleteObjectImmediately(); - guacNotification.showStatus(false); - } - }; - - /** - * An action to be provided along with the object sent to showStatus which - * closes the currently-shown status dialog. - */ - var CANCEL_ACTION = { - name : $scope.namespace + '.ACTION_CANCEL', - callback : function cancelCallback() { - guacNotification.showStatus(false); - } - }; - - /** - * Invokes the provided return function to navigate the user back to - * the page they started from. - */ - var navigateBack = function navigateBack() { - $scope['return']($scope.$parent); - }; - - /** - * Invokes the provided delete function, immediately deleting the - * current object without prompting the user for confirmation. If - * deletion is successful, the user is navigated back to the page they - * started from. If the deletion fails, an error notification is - * displayed. - */ - var deleteObjectImmediately = function deleteObjectImmediately() { - $scope['delete']($scope.$parent).then(navigateBack, guacNotification.SHOW_REQUEST_ERROR); - }; - - /** - * Cancels all pending edits, returning to the page the user started - * from. - */ - $scope.cancel = navigateBack; - - /** - * Cancels all pending edits, invoking the provided clone function to - * open an edit page for a new object which is prepopulated with the - * data from the current object. - */ - $scope.cloneObject = function cloneObject () { - $scope.clone($scope.$parent); - }; - - /** - * Invokes the provided save function to save the current object. If - * saving is successful, the user is navigated back to the page they - * started from. If saving fails, an error notification is displayed. - */ - $scope.saveObject = function saveObject() { - $scope.save($scope.$parent).then(navigateBack, guacNotification.SHOW_REQUEST_ERROR); - }; - - /** - * Deletes the current object, prompting the user first to confirm that - * deletion is desired. If the user confirms that deletion is desired, - * the object is deleted through invoking the provided delete function. - * The user is automatically navigated back to the page they started - * from or given an error notification depending on whether deletion - * succeeds. - */ - $scope.deleteObject = function deleteObject() { - - // Confirm deletion request - guacNotification.showStatus({ - title : $scope.namespace + '.DIALOG_HEADER_CONFIRM_DELETE', - text : { key : $scope.namespace + '.TEXT_CONFIRM_DELETE' }, - actions : [ DELETE_ACTION, CANCEL_ACTION] - }); - - }; - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/directives/systemPermissionEditor.js b/guacamole/src/main/frontend/src/app/manage/directives/systemPermissionEditor.js deleted file mode 100644 index 079c0d03ff..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/directives/systemPermissionEditor.js +++ /dev/null @@ -1,316 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for manipulating the system permissions granted within a given - * {@link PermissionFlagSet}, tracking the specific permissions added or - * removed within a separate pair of {@link PermissionSet} objects. Optionally, - * the permission for a particular user to update themselves (change their own - * password/attributes) may also be manipulated. - */ -angular.module('manage').directive('systemPermissionEditor', ['$injector', - function systemPermissionEditor($injector) { - - // Required services - var authenticationService = $injector.get('authenticationService'); - var dataSourceService = $injector.get('dataSourceService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - - // Required types - var PermissionSet = $injector.get('PermissionSet'); - - var directive = { - - // Element only - restrict: 'E', - replace: true, - - scope: { - - /** - * The unique identifier of the data source associated with the - * permissions being manipulated. - * - * @type String - */ - dataSource : '=', - - /** - * The username of the user whose self-update permission (whether - * the user has permission to update their own user account) should - * be additionally controlled by this editor. If no such user - * permissions should be controlled, this should be left undefined. - * - * @type String - */ - username : '=', - - /** - * The current state of the permissions being manipulated. This - * {@link PemissionFlagSet} will be modified as changes are made - * through this permission editor. - * - * @type PermissionFlagSet - */ - permissionFlags : '=', - - /** - * The set of permissions that have been added, relative to the - * initial state of the permissions being manipulated. - * - * @type PermissionSet - */ - permissionsAdded : '=', - - /** - * The set of permissions that have been removed, relative to the - * initial state of the permissions being manipulated. - * - * @type PermissionSet - */ - permissionsRemoved : '=' - - }, - - templateUrl: 'app/manage/templates/systemPermissionEditor.html' - - }; - - directive.controller = ['$scope', function systemPermissionEditorController($scope) { - - /** - * The identifiers of all data sources currently available to the - * authenticated user. - * - * @type String[] - */ - var dataSources = authenticationService.getAvailableDataSources(); - - /** - * The username of the current, authenticated user. - * - * @type String - */ - var currentUsername = authenticationService.getCurrentUsername(); - - /** - * Available system permission types, as translation string / internal - * value pairs. - * - * @type Object[] - */ - $scope.systemPermissionTypes = [ - { - label: "MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - value: PermissionSet.SystemPermissionType.ADMINISTER - }, - { - label: "MANAGE_USER.FIELD_HEADER_AUDIT_SYSTEM", - value: PermissionSet.SystemPermissionType.AUDIT - }, - { - label: "MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - value: PermissionSet.SystemPermissionType.CREATE_USER - }, - { - label: "MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - value: PermissionSet.SystemPermissionType.CREATE_USER_GROUP - }, - { - label: "MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - value: PermissionSet.SystemPermissionType.CREATE_CONNECTION - }, - { - label: "MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - value: PermissionSet.SystemPermissionType.CREATE_CONNECTION_GROUP - }, - { - label: "MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - value: PermissionSet.SystemPermissionType.CREATE_SHARING_PROFILE - } - ]; - - // Query the permissions granted to the currently-authenticated user - dataSourceService.apply( - permissionService.getEffectivePermissions, - dataSources, - currentUsername - ) - .then(function permissionsReceived(permissions) { - $scope.permissions = permissions; - }, requestService.DIE); - - /** - * Returns whether the current user has permission to change the system - * permissions granted to users. - * - * @returns {Boolean} - * true if the current user can grant or revoke system permissions - * to the permission set being edited, false otherwise. - */ - $scope.canChangeSystemPermissions = function canChangeSystemPermissions() { - - // Do not check if permissions are not yet loaded - if (!$scope.permissions) - return false; - - // Only the administrator can modify system permissions - return PermissionSet.hasSystemPermission($scope.permissions[$scope.dataSource], - PermissionSet.SystemPermissionType.ADMINISTER); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the addition of the given system permission. - * - * @param {String} type - * The system permission to add, as defined by - * PermissionSet.SystemPermissionType. - */ - var addSystemPermission = function addSystemPermission(type) { - - // If permission was previously removed, simply un-remove it - if (PermissionSet.hasSystemPermission($scope.permissionsRemoved, type)) - PermissionSet.removeSystemPermission($scope.permissionsRemoved, type); - - // Otherwise, explicitly add the permission - else - PermissionSet.addSystemPermission($scope.permissionsAdded, type); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the removal of the given system permission. - * - * @param {String} type - * The system permission to remove, as defined by - * PermissionSet.SystemPermissionType. - */ - var removeSystemPermission = function removeSystemPermission(type) { - - // If permission was previously added, simply un-add it - if (PermissionSet.hasSystemPermission($scope.permissionsAdded, type)) - PermissionSet.removeSystemPermission($scope.permissionsAdded, type); - - // Otherwise, explicitly remove the permission - else - PermissionSet.addSystemPermission($scope.permissionsRemoved, type); - - }; - - /** - * Notifies the controller that a change has been made to the given - * system permission for the permission set being edited. - * - * @param {String} type - * The system permission that was changed, as defined by - * PermissionSet.SystemPermissionType. - */ - $scope.systemPermissionChanged = function systemPermissionChanged(type) { - - // Determine current permission setting - var granted = $scope.permissionFlags.systemPermissions[type]; - - // Add/remove permission depending on flag state - if (granted) - addSystemPermission(type); - else - removeSystemPermission(type); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the addition of the given user permission. - * - * @param {String} type - * The user permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user affected by the permission being added. - */ - var addUserPermission = function addUserPermission(type, identifier) { - - // If permission was previously removed, simply un-remove it - if (PermissionSet.hasUserPermission($scope.permissionsRemoved, type, identifier)) - PermissionSet.removeUserPermission($scope.permissionsRemoved, type, identifier); - - // Otherwise, explicitly add the permission - else - PermissionSet.addUserPermission($scope.permissionsAdded, type, identifier); - - }; - - /** - * Updates the permissionsAdded and permissionsRemoved permission sets - * to reflect the removal of the given user permission. - * - * @param {String} type - * The user permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user affected by the permission being - * removed. - */ - var removeUserPermission = function removeUserPermission(type, identifier) { - - // If permission was previously added, simply un-add it - if (PermissionSet.hasUserPermission($scope.permissionsAdded, type, identifier)) - PermissionSet.removeUserPermission($scope.permissionsAdded, type, identifier); - - // Otherwise, explicitly remove the permission - else - PermissionSet.addUserPermission($scope.permissionsRemoved, type, identifier); - - }; - - /** - * Notifies the controller that a change has been made to the given user - * permission for the permission set being edited. - * - * @param {String} type - * The user permission that was changed, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user affected by the changed permission. - */ - $scope.userPermissionChanged = function userPermissionChanged(type, identifier) { - - // Determine current permission setting - var granted = $scope.permissionFlags.userPermissions[type][identifier]; - - // Add/remove permission depending on flag state - if (granted) - addUserPermission(type, identifier); - else - removeUserPermission(type, identifier); - - }; - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/manageModule.js b/guacamole/src/main/frontend/src/app/manage/manageModule.js deleted file mode 100644 index 3e775dba21..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/manageModule.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for the administration functionality. - */ -angular.module('manage', [ - 'form', - 'groupList', - 'list', - 'locale', - 'navigation', - 'notification', - 'rest' -]); diff --git a/guacamole/src/main/frontend/src/app/manage/styles/attributes.css b/guacamole/src/main/frontend/src/app/manage/styles/attributes.css deleted file mode 100644 index 2b5bc92fc1..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/styles/attributes.css +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* Do not stretch attributes to fit available area */ -.attributes input[type=text], -.attributes input[type=email], -.attributes input[type=password], -.attributes input[type=number] { - width: auto; -} - -.attributes .form .fields { - display: table; - margin: 1em; -} - -.attributes .form .fields .labeled-field { - display: table-row; -} - -.attributes .form .fields .field-header, -.attributes .form .fields .form-field { - display: table-cell; - padding: 0.125em; - vertical-align: top; -} - -.attributes .form .fields .field-header { - padding-right: 1em; -} - -.attributes .form h3 { - - font-size: 1.25em; - font-weight: bold; - text-transform: uppercase; - padding: 0.5em; - margin: 1em 0; - - border-bottom: 1px solid rgba(0, 0, 0, 0.125); - border-top: 1px solid rgba(0, 0, 0, 0.125); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.125); - background: rgba(0, 0, 0, 0.04); - - width: 100%; - -} diff --git a/guacamole/src/main/frontend/src/app/manage/styles/connection-parameter.css b/guacamole/src/main/frontend/src/app/manage/styles/connection-parameter.css deleted file mode 100644 index c5645fb36f..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/styles/connection-parameter.css +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* Do not stretch connection parameters to fit available area */ -.connection-parameters input[type=text], -.connection-parameters input[type=email], -.connection-parameters input[type=password], -.connection-parameters input[type=number] { - width: auto; -} - -.connection-parameters .form .fields { - display: table; - padding-left: .5em; - border-left: 3px solid rgba(0,0,0,0.125); - width: 100%; -} - -.connection-parameters .form .fields .labeled-field { - display: table-row; -} - -.connection-parameters .form .fields .field-header, -.connection-parameters .form .fields .form-field { - display: table-cell; - padding: 0.125em; - vertical-align: top; - width: 100%; -} - -.connection-parameters .form .fields .field-header { - padding-right: 1em; - width: 0; - white-space: nowrap; -} diff --git a/guacamole/src/main/frontend/src/app/manage/styles/forms.css b/guacamole/src/main/frontend/src/app/manage/styles/forms.css deleted file mode 100644 index 0f3b3df9b2..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/styles/forms.css +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.manage table.properties th { - text-align: left; - font-weight: normal; - padding-right: 1em; -} - -.manage .action-buttons { - text-align: center; - margin-bottom: 1em; -} diff --git a/guacamole/src/main/frontend/src/app/manage/styles/locationChooser.css b/guacamole/src/main/frontend/src/app/manage/styles/locationChooser.css deleted file mode 100644 index 0eda66a163..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/styles/locationChooser.css +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.location-chooser .dropdown { - - position: absolute; - z-index: 2; - margin-top: -1px; - - width: 3in; - max-height: 2in; - overflow: auto; - - border: 1px solid rgba(0, 0, 0, 0.5); - background: white; - - font-size: 10pt; - -} diff --git a/guacamole/src/main/frontend/src/app/manage/styles/manage-user-group.css b/guacamole/src/main/frontend/src/app/manage/styles/manage-user-group.css deleted file mode 100644 index 4c5adc9f73..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/styles/manage-user-group.css +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.manage-user-group .page-tabs .page-list li.read-only a[href], -.manage-user-group .page-tabs .page-list li.unlinked a[href], -.manage-user-group .page-tabs .page-list li.linked a[href] { - padding-right: 2.5em; - position: relative; -} - -.manage-user-group .page-tabs .page-list li.read-only a[href]:before, -.manage-user-group .page-tabs .page-list li.unlinked a[href]:before, -.manage-user-group .page-tabs .page-list li.linked a[href]:before { - content: ' '; - position: absolute; - right: 0; - bottom: 0; - top: 0; - width: 2.5em; - background-size: 1.25em; - background-repeat: no-repeat; - background-position: center; -} - -.manage-user-group .page-tabs .page-list li.read-only a[href]:before { - background-image: url('images/lock.svg'); -} - -.manage-user-group .page-tabs .page-list li.unlinked a[href]:before { - background-image: url('images/plus.svg'); -} - -.manage-user-group .page-tabs .page-list li.unlinked a[href] { - opacity: 0.5; -} - -.manage-user-group .page-tabs .page-list li.unlinked a[href]:hover, -.manage-user-group .page-tabs .page-list li.unlinked a[href].current { - opacity: 1; -} - -.manage-user-group .page-tabs .page-list li.linked a[href]:before { - background-image: url('images/checkmark.svg'); -} - -.manage-user-group .notice.read-only { - - background: #FDA; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.25em; - - text-align: center; - padding: 1em; - -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/styles/manage-user.css b/guacamole/src/main/frontend/src/app/manage/styles/manage-user.css deleted file mode 100644 index 0afaf4e675..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/styles/manage-user.css +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.manage-user .page-tabs .page-list li.read-only a[href], -.manage-user .page-tabs .page-list li.unlinked a[href], -.manage-user .page-tabs .page-list li.linked a[href] { - padding-right: 2.5em; - position: relative; -} - -.manage-user .page-tabs .page-list li.read-only a[href]:before, -.manage-user .page-tabs .page-list li.unlinked a[href]:before, -.manage-user .page-tabs .page-list li.linked a[href]:before { - content: ' '; - position: absolute; - right: 0; - bottom: 0; - top: 0; - width: 2.5em; - background-size: 1.25em; - background-repeat: no-repeat; - background-position: center; -} - -.manage-user .page-tabs .page-list li.read-only a[href]:before { - background-image: url('images/lock.svg'); -} - -.manage-user .page-tabs .page-list li.unlinked a[href]:before { - background-image: url('images/plus.svg'); -} - -.manage-user .page-tabs .page-list li.unlinked a[href] { - opacity: 0.5; -} - -.manage-user .page-tabs .page-list li.unlinked a[href]:hover, -.manage-user .page-tabs .page-list li.unlinked a[href].current { - opacity: 1; -} - -.manage-user .page-tabs .page-list li.linked a[href]:before { - background-image: url('images/checkmark.svg'); -} - -.manage-user .notice.read-only { - - background: #FDA; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.25em; - - text-align: center; - padding: 1em; - -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/styles/related-objects.css b/guacamole/src/main/frontend/src/app/manage/styles/related-objects.css deleted file mode 100644 index ddc85b1de1..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/styles/related-objects.css +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.related-objects .abbreviated-related-objects { - display: table; - margin: 1em 0; -} - -.related-objects .abbreviated-related-objects ul { - display: table-cell; - vertical-align: top; -} - -.related-objects .abbreviated-related-objects ul, -.related-objects .all-related-objects ul { - padding: 0; - list-style: none; -} - -.related-objects .abbreviated-related-objects ul li { - - display: inline-block; - margin: 0.25em; - padding: 0.25em; - - border: 1px solid silver; - background: #F5F5F5; - -moz-border-radius: 0.25em; - -webkit-border-radius: 0.25em; - -khtml-border-radius: 0.25em; - border-radius: 0.25em; - -} - -.related-objects .abbreviated-related-objects ul li img.remove { - max-height: 0.75em; - max-width: 0.75em; - margin: 0 0.25em; -} - -.related-objects .abbreviated-related-objects ul li .identifier { - margin: 0 0.25em; -} - -.related-objects .abbreviated-related-objects img.expand, -.related-objects .abbreviated-related-objects img.collapse { - display: table-cell; - max-height: 1.5em; - max-width: 1.5em; - margin: 0.375em 0; -} - -.related-objects .all-related-objects { - border-top: 1px solid silver; -} - -.related-objects .abbreviated-related-objects p.no-related-objects, -.related-objects .all-related-objects p.no-objects-available { - font-style: italic; - opacity: 0.5; -} - -.related-objects .abbreviated-related-objects p.no-related-objects { - display: table-cell; - vertical-align: middle; -} diff --git a/guacamole/src/main/frontend/src/app/manage/templates/connectionGroupPermission.html b/guacamole/src/main/frontend/src/app/manage/templates/connectionGroupPermission.html deleted file mode 100644 index 2bc90cce9e..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/connectionGroupPermission.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - - -
    - - - - - - {{item.name}} - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/connectionPermission.html b/guacamole/src/main/frontend/src/app/manage/templates/connectionPermission.html deleted file mode 100644 index e94f9114e9..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/connectionPermission.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - - -
    - - - - - - {{item.name}} - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/connectionPermissionEditor.html b/guacamole/src/main/frontend/src/app/manage/templates/connectionPermissionEditor.html deleted file mode 100644 index f010fb9ca4..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/connectionPermissionEditor.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    {{'MANAGE_USER.SECTION_HEADER_CONNECTIONS' | translate}}

    - -
    - -
    - -
    -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/templates/dataSourceTabs.html b/guacamole/src/main/frontend/src/app/manage/templates/dataSourceTabs.html deleted file mode 100644 index a8a08431b2..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/dataSourceTabs.html +++ /dev/null @@ -1,3 +0,0 @@ -
    - -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/templates/identifierSetEditor.html b/guacamole/src/main/frontend/src/app/manage/templates/identifierSetEditor.html deleted file mode 100644 index e6a309a781..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/identifierSetEditor.html +++ /dev/null @@ -1,47 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/templates/locationChooser.html b/guacamole/src/main/frontend/src/app/manage/templates/locationChooser.html deleted file mode 100644 index 068b13b3a6..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/locationChooser.html +++ /dev/null @@ -1,17 +0,0 @@ -
    - - -
    {{chosenConnectionGroupName}}
    - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/locationChooserConnectionGroup.html b/guacamole/src/main/frontend/src/app/manage/templates/locationChooserConnectionGroup.html deleted file mode 100644 index e49b4c0b94..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/locationChooserConnectionGroup.html +++ /dev/null @@ -1,4 +0,0 @@ - - {{item.name}} - diff --git a/guacamole/src/main/frontend/src/app/manage/templates/manageConnection.html b/guacamole/src/main/frontend/src/app/manage/templates/manageConnection.html deleted file mode 100644 index 7be5d75de0..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/manageConnection.html +++ /dev/null @@ -1,96 +0,0 @@ - -
    - - -
    -

    {{'MANAGE_CONNECTION.SECTION_HEADER_EDIT_CONNECTION' | translate}}

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    {{'MANAGE_CONNECTION.FIELD_HEADER_NAME' | translate}}
    {{'MANAGE_CONNECTION.FIELD_HEADER_LOCATION' | translate}} - -
    {{'MANAGE_CONNECTION.FIELD_HEADER_PROTOCOL' | translate}} - -
    -
    - - -
    - -
    - - -

    {{'MANAGE_CONNECTION.SECTION_HEADER_PARAMETERS' | translate}}

    -
    - -
    - - - - - - -

    {{'MANAGE_CONNECTION.SECTION_HEADER_HISTORY' | translate}}

    -
    -

    {{'MANAGE_CONNECTION.INFO_CONNECTION_NOT_USED' | translate}}

    - - - - - - - - - - - - - - - - - - - -
    {{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_USERNAME' | translate}}{{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_START' | translate}}{{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_DURATION' | translate}}{{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_REMOTEHOST' | translate}}
    {{wrapper.entry.startDate | date:historyDateFormat}}{{wrapper.entry.remoteHost}}
    - - - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/manageConnectionGroup.html b/guacamole/src/main/frontend/src/app/manage/templates/manageConnectionGroup.html deleted file mode 100644 index 712183dc68..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/manageConnectionGroup.html +++ /dev/null @@ -1,56 +0,0 @@ - -
    - - -
    -

    {{'MANAGE_CONNECTION_GROUP.SECTION_HEADER_EDIT_CONNECTION_GROUP' | translate}}

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    {{'MANAGE_CONNECTION_GROUP.FIELD_HEADER_NAME' | translate}}
    {{'MANAGE_CONNECTION_GROUP.FIELD_HEADER_LOCATION' | translate}} - -
    {{'MANAGE_CONNECTION_GROUP.FIELD_HEADER_TYPE' | translate}} - -
    -
    - - -
    - -
    - - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/manageSharingProfile.html b/guacamole/src/main/frontend/src/app/manage/templates/manageSharingProfile.html deleted file mode 100644 index 6458075c07..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/manageSharingProfile.html +++ /dev/null @@ -1,45 +0,0 @@ -
    - - -
    -

    {{'MANAGE_SHARING_PROFILE.SECTION_HEADER_EDIT_SHARING_PROFILE' | translate}}

    - -
    -
    - - - - - - - - - -
    {{'MANAGE_SHARING_PROFILE.FIELD_HEADER_NAME' | translate}}
    {{'MANAGE_SHARING_PROFILE.FIELD_HEADER_PRIMARY_CONNECTION' | translate}}{{primaryConnection.name}}
    -
    - - -
    - -
    - - -

    {{'MANAGE_SHARING_PROFILE.SECTION_HEADER_PARAMETERS' | translate}}

    -
    - -
    - - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/manageUser.html b/guacamole/src/main/frontend/src/app/manage/templates/manageUser.html deleted file mode 100644 index d5896ecdd5..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/manageUser.html +++ /dev/null @@ -1,93 +0,0 @@ - -
    - - -
    -

    {{'MANAGE_USER.SECTION_HEADER_EDIT_USER' | translate}}

    - -
    - - - - -
    -

    {{'MANAGE_USER.INFO_READ_ONLY' | translate}}

    -
    - - -
    - - -
    - - - - - - - - - - - - - - - - - -
    {{'MANAGE_USER.FIELD_HEADER_USERNAME' | translate}} - - {{user.username}} -
    {{'MANAGE_USER.FIELD_HEADER_PASSWORD' | translate}}
    {{'MANAGE_USER.FIELD_HEADER_PASSWORD_AGAIN' | translate}}
    {{'MANAGE_USER.FIELD_HEADER_USER_DISABLED' | translate}}
    -
    - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/manageUserGroup.html b/guacamole/src/main/frontend/src/app/manage/templates/manageUserGroup.html deleted file mode 100644 index c450baab98..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/manageUserGroup.html +++ /dev/null @@ -1,105 +0,0 @@ -
    - - -
    -

    {{'MANAGE_USER_GROUP.SECTION_HEADER_EDIT_USER_GROUP' | translate}}

    - -
    - - - - -
    -

    {{'MANAGE_USER_GROUP.INFO_READ_ONLY' | translate}}

    -
    - - -
    - - -
    - - - - - - - - - -
    {{'MANAGE_USER_GROUP.FIELD_HEADER_USER_GROUP_NAME' | translate}} - - {{userGroup.identifier}} -
    {{'MANAGE_USER_GROUP.FIELD_HEADER_USER_GROUP_DISABLED' | translate}}
    -
    - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/managementButtons.html b/guacamole/src/main/frontend/src/app/manage/templates/managementButtons.html deleted file mode 100644 index 68e4108cc6..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/managementButtons.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/manage/templates/sharingProfilePermission.html b/guacamole/src/main/frontend/src/app/manage/templates/sharingProfilePermission.html deleted file mode 100644 index 0d16472556..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/sharingProfilePermission.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/manage/templates/systemPermissionEditor.html b/guacamole/src/main/frontend/src/app/manage/templates/systemPermissionEditor.html deleted file mode 100644 index aa5ee475ac..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/templates/systemPermissionEditor.html +++ /dev/null @@ -1,18 +0,0 @@ -
    -

    {{'MANAGE_USER.SECTION_HEADER_PERMISSIONS' | translate}}

    -
    - - - - - - - - - -
    {{systemPermissionType.label | translate}}
    {{'MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD' | translate}}
    -
    -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/types/HistoryEntryWrapper.js b/guacamole/src/main/frontend/src/app/manage/types/HistoryEntryWrapper.js deleted file mode 100644 index a45c2e5e75..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/types/HistoryEntryWrapper.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the HistoryEntryWrapper class. - */ -angular.module('manage').factory('HistoryEntryWrapper', ['$injector', - function defineHistoryEntryWrapper($injector) { - - // Required types - var ConnectionHistoryEntry = $injector.get('ConnectionHistoryEntry'); - - /** - * Wrapper for ConnectionHistoryEntry which adds display-specific - * properties, such as the connection duration. - * - * @constructor - * @param {ConnectionHistoryEntry} historyEntry - * The history entry to wrap. - */ - var HistoryEntryWrapper = function HistoryEntryWrapper(historyEntry) { - - /** - * The wrapped ConnectionHistoryEntry. - * - * @type ConnectionHistoryEntry - */ - this.entry = historyEntry; - - /** - * An object providing value and unit properties, denoting the duration - * and its corresponding units. - * - * @type ConnectionHistoryEntry.Duration - */ - this.duration = null; - - /** - * The string to display as the duration of this history entry. If a - * duration is available, its value and unit will be exposed to any - * given translation string as the VALUE and UNIT substitution - * variables respectively. - * - * @type String - */ - this.durationText = 'MANAGE_CONNECTION.TEXT_HISTORY_DURATION'; - - // Notify if connection is active right now - if (historyEntry.active) - this.durationText = 'MANAGE_CONNECTION.INFO_CONNECTION_ACTIVE_NOW'; - - // If connection is not active, inform user if end date is not known - else if (!historyEntry.endDate) - this.durationText = 'MANAGE_CONNECTION.INFO_CONNECTION_DURATION_UNKNOWN'; - - // Set the duration if the necessary information is present - if (historyEntry.endDate && historyEntry.startDate) - this.duration = new ConnectionHistoryEntry.Duration(historyEntry.endDate - historyEntry.startDate); - - }; - - return HistoryEntryWrapper; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/manage/types/ManageableUser.js b/guacamole/src/main/frontend/src/app/manage/types/ManageableUser.js deleted file mode 100644 index d6c987472d..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/types/ManageableUser.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the ManageableUser class. - */ -angular.module('manage').factory('ManageableUser', [function defineManageableUser() { - - /** - * A pairing of an @link{User} with the identifier of its corresponding - * data source. - * - * @constructor - * @param {Object|ManageableUser} template - */ - var ManageableUser = function ManageableUser(template) { - - /** - * The unique identifier of the data source containing this user. - * - * @type String - */ - this.dataSource = template.dataSource; - - /** - * The @link{User} object represented by this ManageableUser and - * contained within the associated data source. - * - * @type User - */ - this.user = template.user; - - /** - * Return true if the underlying user account is disabled, otherwise - * return false. - * - * @returns - * True if the underlying user account is disabled, otherwise false. - */ - this.isDisabled = function isDisabled() { - return template.user.disabled; - }; - - }; - - return ManageableUser; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/types/ManageableUserGroup.js b/guacamole/src/main/frontend/src/app/manage/types/ManageableUserGroup.js deleted file mode 100644 index 6853fa0fcd..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/types/ManageableUserGroup.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the ManageableUserGroup class. - */ -angular.module('manage').factory('ManageableUserGroup', [function defineManageableUserGroup() { - - /** - * A pairing of an @link{UserGroup} with the identifier of its corresponding - * data source. - * - * @constructor - * @param {Object|ManageableUserGroup} template - */ - var ManageableUserGroup = function ManageableUserGroup(template) { - - /** - * The unique identifier of the data source containing this user. - * - * @type String - */ - this.dataSource = template.dataSource; - - /** - * The @link{UserGroup} object represented by this ManageableUserGroup - * and contained within the associated data source. - * - * @type UserGroup - */ - this.userGroup = template.userGroup; - - }; - - return ManageableUserGroup; - -}]); diff --git a/guacamole/src/main/frontend/src/app/manage/types/ManagementPermissions.js b/guacamole/src/main/frontend/src/app/manage/types/ManagementPermissions.js deleted file mode 100644 index 5d02a76f0a..0000000000 --- a/guacamole/src/main/frontend/src/app/manage/types/ManagementPermissions.js +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the ManagementPermissions class. - */ -angular.module('manage').factory('ManagementPermissions', ['$injector', - function defineManagementPermissions($injector) { - - // Required types - var PermissionSet = $injector.get('PermissionSet'); - - /** - * Higher-level representation of the management-related permissions - * available to the current user on a particular, arbitrary object. - * - * @constructor - * @param {ManagementPermissions|Object} template - * An object whose properties should be copied into the new - * ManagementPermissions object. - */ - var ManagementPermissions = function ManagementPermissions(template) { - - /** - * The identifier of the associated object, or null if the object does - * not yet exist. - * - * @type String - */ - this.identifier = template.identifier || null; - - /** - * Whether the user can save the associated object. This could be - * updating an existing object, or creating a new object. - * - * @type Boolean - */ - this.canSaveObject = template.canSaveObject; - - /** - * Whether the user can clone the associated object. - * - * @type Boolean - */ - this.canCloneObject = template.canCloneObject; - - /** - * Whether the user can delete the associated object. - * - * @type Boolean - */ - this.canDeleteObject = template.canDeleteObject; - - /** - * Whether the user can change attributes which are currently - * associated with the object. - * - * @type Boolean - */ - this.canChangeAttributes = template.canChangeAttributes; - - /** - * Whether the user can change absolutely all attributes associated - * with the object, including those which are not already present. - * - * @type Boolean - */ - this.canChangeAllAttributes = template.canChangeAllAttributes; - - /** - * Whether the user can change permissions which are assigned to the - * associated object, if the object is capable of being assigned - * permissions. - * - * @type Boolean - */ - this.canChangePermissions = template.canChangePermissions; - - }; - - /** - * Creates a new {@link ManagementPermissions} which defines the high-level - * actions the current user may take for the given object. - * - * @param {PermissionSet} permissions - * The effective permissions granted to the current user within the - * data source associated with the object being managed. - * - * @param {String} createPermission - * The system permission required to create objects of the same type as - * the object being managed, as defined by - * {@link PermissionSet.SystemPermissionTypes}. - * - * @param {Function} hasObjectPermission - * The function to invoke to test whether a {@link PermissionSet} - * contains a particular object permission. The parameters accepted - * by this function must be identical to those accepted by - * {@link PermissionSet.hasUserPermission()}, - * {@link PermissionSet.hasConnectionPermission()}, etc. - * - * @param {String} [identifier] - * The identifier of the object being managed. If the object does not - * yet exist, this parameter should be omitted or set to null. - * - * @returns {ManagementPermissions} - * A new {@link ManagementPermissions} which defines the high-level - * actions the current user may take for the given object. - */ - ManagementPermissions.fromPermissionSet = function fromPermissionSet( - permissions, createPermission, hasObjectPermission, identifier) { - - var isAdmin = PermissionSet.hasSystemPermission(permissions, - PermissionSet.SystemPermissionType.ADMINISTER); - - var canCreate = PermissionSet.hasSystemPermission(permissions, createPermission); - var canAdminister = hasObjectPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER, identifier); - var canUpdate = hasObjectPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE, identifier); - var canDelete = hasObjectPermission(permissions, PermissionSet.ObjectPermissionType.DELETE, identifier); - - var exists = !!identifier; - - return new ManagementPermissions({ - - identifier : identifier, - - // A user can save (create or update) an object if they are a - // system-level administrator, OR the object does not yet exist and - // the user has explicit permission to create such objects, OR the - // object does already exist and the user has explicit UPDATE - // permission on the object - canSaveObject : isAdmin || (!exists && canCreate) || canUpdate, - - // A user can clone an object only if the object exists, and - // only if they are a system-level administrator OR they have - // explicit permission to create such objects - canCloneObject : exists && (isAdmin || canCreate), - - // A user can delete an object only if the object exists, and - // only if they are a system-level administrator OR they have - // explicit DELETE permission on the object - canDeleteObject : exists && (isAdmin || canDelete), - - // Attributes in general (with or without existing values) can only - // be changed if the object is being created, OR the user is a - // system-level administrator, OR the user has explicit UPDATE - // permission on the object - canChangeAttributes : !exists || isAdmin || canUpdate, - - // A user can change the attributes of an object which are not - // explicitly defined on that object when the object is being - // created - canChangeAllAttributes : !exists, - - // A user can change the system permissions related to an object - // if they are a system-level admin, OR they are creating the - // object, OR they have explicit ADMINISTER permission on the - // existing object - canChangePermissions : isAdmin || !exists || canAdminister - - }); - - }; - - return ManagementPermissions; - -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/directives/guacMenu.js b/guacamole/src/main/frontend/src/app/navigation/directives/guacMenu.js deleted file mode 100644 index 230e9028de..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/directives/guacMenu.js +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides an arbitrary menu-style container. The contents - * of the directive are displayed only when the menu is open. - */ -angular.module('navigation').directive('guacMenu', [function guacMenu() { - - return { - restrict: 'E', - transclude: true, - replace: true, - scope: { - - /** - * The string which should be rendered as the menu title. - * - * @type String - */ - menuTitle : '=', - - /** - * Whether the menu should remain open while the user interacts - * with the contents of the menu. By default, the menu will close - * if the user clicks within the menu contents. - * - * @type Boolean - */ - interactive : '=' - - }, - - templateUrl: 'app/navigation/templates/guacMenu.html', - controller: ['$scope', '$injector', '$element', - function guacMenuController($scope, $injector, $element) { - - // Get required services - var $document = $injector.get('$document'); - - /** - * The outermost element of the guacMenu directive. - * - * @type Element - */ - var element = $element[0]; - - /** - * The element containing the menu contents that display when the - * menu is open. - * - * @type Element - */ - var contents = $element.find('.menu-contents')[0]; - - /** - * The main document object. - * - * @type Document - */ - var document = $document[0]; - - /** - * Whether the contents of the menu are currently shown. - * - * @type Boolean - */ - $scope.menuShown = false; - - /** - * Toggles visibility of the menu contents. - */ - $scope.toggleMenu = function toggleMenu() { - $scope.menuShown = !$scope.menuShown; - }; - - // Close menu when user clicks anywhere outside this specific menu - document.body.addEventListener('click', function clickOutsideMenu(e) { - $scope.$apply(function closeMenu() { - if (e.target !== element && !element.contains(e.target)) - $scope.menuShown = false; - }); - }, false); - - // Prevent clicks within menu contents from toggling menu visibility - // if the menu contents are intended to be interactive - contents.addEventListener('click', function clickInsideMenuContents(e) { - if ($scope.interactive) - e.stopPropagation(); - }, false); - - }] // end controller - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/directives/guacPageList.js b/guacamole/src/main/frontend/src/app/navigation/directives/guacPageList.js deleted file mode 100644 index c8eb90a966..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/directives/guacPageList.js +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides a list of links to specific pages. - */ -angular.module('navigation').directive('guacPageList', [function guacPageList() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The array of pages to display. - * - * @type PageDefinition[] - */ - pages : '=' - - }, - - templateUrl: 'app/navigation/templates/guacPageList.html', - controller: ['$scope', '$injector', function guacPageListController($scope, $injector) { - - // Required types - var PageDefinition = $injector.get('PageDefinition'); - - // Required services - var $location = $injector.get('$location'); - - /** - * The URL of the currently-displayed page. - * - * @type String - */ - var currentURL = $location.url(); - - /** - * The names associated with the current page, if the current page - * is known. The value of this property corresponds to the value of - * PageDefinition.name. Though PageDefinition.name may be a String, - * this will always be an Array. - * - * @type String[] - */ - var currentPageName = []; - - /** - * Array of each level of the page list, where a level is defined - * by a mapping of names (translation strings) to the - * PageDefinitions corresponding to those names. - * - * @type Object.[] - */ - $scope.levels = []; - - /** - * Returns the names associated with the given page, in - * hierarchical order. If the page is only associated with a single - * name, and that name is not stored as an array, it will be still - * be returned as an array containing a single item. - * - * @param {PageDefinition} page - * The page to return the names of. - * - * @return {String[]} - * An array of all names associated with the given page, in - * hierarchical order. - */ - var getPageNames = function getPageNames(page) { - - // If already an array, simply return the name - if (angular.isArray(page.name)) - return page.name; - - // Otherwise, transform into array - return [page.name]; - - }; - - /** - * Adds the given PageDefinition to the overall set of pages - * displayed by this guacPageList, automatically updating the - * available levels ($scope.levels) and the contents of those - * levels. - * - * @param {PageDefinition} page - * The PageDefinition to add. - * - * @param {Number} weight - * The sorting weight to use for the page if it does not - * already have an associated weight. - */ - var addPage = function addPage(page, weight) { - - // Pull all names for page - var names = getPageNames(page); - - // Copy the hierarchy of this page into the displayed levels - // as far as is relevant for the currently-displayed page - for (var i = 0; i < names.length; i++) { - - // Create current level, if it doesn't yet exist - var pages = $scope.levels[i]; - if (!pages) - pages = $scope.levels[i] = {}; - - // Get the name at the current level - var name = names[i]; - - // Determine whether this page definition is part of the - // hierarchy containing the current page - var isCurrentPage = (currentPageName[i] === name); - - // Store new page if it doesn't yet exist at this level - if (!pages[name]) { - pages[name] = new PageDefinition({ - name : name, - url : isCurrentPage ? currentURL : page.url, - className : page.className, - weight : page.weight || (weight + i) - }); - } - - // If the name at this level no longer matches the - // hierarchy of the current page, do not go any deeper - if (currentPageName[i] !== name) - break; - - } - - }; - - /** - * Navigate to the given page. - * - * @param {PageDefinition} page - * The page to navigate to. - */ - $scope.navigateToPage = function navigateToPage(page) { - $location.path(page.url); - }; - - /** - * Tests whether the given page is the page currently being viewed. - * - * @param {PageDefinition} page - * The page to test. - * - * @returns {Boolean} - * true if the given page is the current page, false otherwise. - */ - $scope.isCurrentPage = function isCurrentPage(page) { - return currentURL === page.url; - }; - - /** - * Given an arbitrary map of PageDefinitions, returns an array of - * those PageDefinitions, sorted by weight. - * - * @param {Object.<*, PageDefinition>} level - * A map of PageDefinitions with arbitrary keys. The value of - * each key is ignored. - * - * @returns {PageDefinition[]} - * An array of all PageDefinitions in the given map, sorted by - * weight. - */ - $scope.getPages = function getPages(level) { - - var pages = []; - - // Convert contents of level to a flat array of pages - angular.forEach(level, function addPageFromLevel(page) { - pages.push(page); - }); - - // Sort page array by weight - pages.sort(function comparePages(a, b) { - return a.weight - b.weight; - }); - - return pages; - - }; - - // Update page levels whenever pages changes - $scope.$watch('pages', function setPages(pages) { - - // Determine current page name - currentPageName = []; - angular.forEach(pages, function findCurrentPageName(page) { - - // If page is current page, store its names - if ($scope.isCurrentPage(page)) - currentPageName = getPageNames(page); - - }); - - // Reset contents of levels - $scope.levels = []; - - // Add all page definitions - angular.forEach(pages, addPage); - - // Filter to only relevant levels - $scope.levels = $scope.levels.filter(function isRelevant(level) { - - // Determine relevancy by counting the number of pages - var pageCount = 0; - for (var name in level) { - - // Level is relevant if it has two or more pages - if (++pageCount === 2) - return true; - - } - - // Otherwise, the level is not relevant - return false; - - }); - - }); - - }] // end controller - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/directives/guacSectionTabs.js b/guacamole/src/main/frontend/src/app/navigation/directives/guacSectionTabs.js deleted file mode 100644 index 97c87c2e6b..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/directives/guacSectionTabs.js +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Directive which displays a set of tabs dividing a section of a page into - * logical subsections or views. The currently selected tab is communicated - * through assignment to the variable bound to the current - * attribute. No navigation occurs as a result of selecting a tab. - */ -angular.module('navigation').directive('guacSectionTabs', ['$injector', - function guacSectionTabs($injector) { - - // Required services - var translationStringService = $injector.get('translationStringService'); - - var directive = { - - restrict : 'E', - replace : true, - templateUrl : 'app/navigation/templates/guacSectionTabs.html', - - scope : { - - /** - * The translation namespace to use when producing translation - * strings for each tab. Tab translation strings will be of the - * form: - * - * NAMESPACE.SECTION_HEADER_NAME - * - * where NAMESPACE is the namespace provided to this - * attribute and NAME is one of the names within the - * array provided to the tabs attribute and - * transformed via translationStringService.canonicalize(). - */ - namespace : '@', - - /** - * The name of the currently selected tab. This name MUST be one of - * the names present in the array given via the tabs - * attribute. This directive will not automatically choose an - * initially selected tab, and a default value should be manually - * assigned to current to ensure a tab is initially - * selected. - * - * @type String - */ - current : '=', - - /** - * The unique names of all tabs which should be made available, in - * display order. These names will be assigned to the variable - * bound to the current attribute when the current - * tab changes. - * - * @type String[] - */ - tabs : '=' - - } - - }; - - directive.controller = ['$scope', function dataSourceTabsController($scope) { - - /** - * Produces the translation string for the section header representing - * the tab having the given name. The translation string will be of the - * form: - * - * NAMESPACE.SECTION_HEADER_NAME - * - * where NAMESPACE is the namespace provided to the - * directive and NAME is the given name transformed - * via translationStringService.canonicalize(). - * - * @param {String} name - * The name of the tab. - * - * @returns {String} - * The translation string which produces the translated header - * of the tab having the given name. - */ - $scope.getSectionHeader = function getSectionHeader(name) { - - // If no name, then no header - if (!name) - return ''; - - return translationStringService.canonicalize($scope.namespace || 'MISSING_NAMESPACE') - + '.SECTION_HEADER_' + translationStringService.canonicalize(name); - - }; - - /** - * Selects the tab having the given name. The name of the currently - * selected tab will be communicated outside the directive through - * $scope.current. - * - * @param {String} name - * The name of the tab to select. - */ - $scope.selectTab = function selectTab(name) { - $scope.current = name; - }; - - /** - * Returns whether the tab having the given name is currently - * selected. A tab is currently selected if its name is stored within - * $scope.current, as assigned externally or by selectTab(). - * - * @param {String} name - * The name of the tab to test. - * - * @returns {Boolean} - * true if the tab having the given name is currently selected, - * false otherwise. - */ - $scope.isSelected = function isSelected(name) { - return $scope.current === name; - }; - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/directives/guacUserMenu.js b/guacamole/src/main/frontend/src/app/navigation/directives/guacUserMenu.js deleted file mode 100644 index 44a2fb5a7c..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/directives/guacUserMenu.js +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which provides a user-oriented menu containing options for - * navigation and configuration. - */ -angular.module('navigation').directive('guacUserMenu', [function guacUserMenu() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * Optional array of actions which are specific to this particular - * location, as these actions may not be appropriate for other - * locations which contain the user menu. - * - * @type MenuAction[] - */ - localActions : '=' - - }, - - templateUrl: 'app/navigation/templates/guacUserMenu.html', - controller: ['$scope', '$injector', - function guacUserMenuController($scope, $injector) { - - // Required types - var User = $injector.get('User'); - - // Get required services - var $location = $injector.get('$location'); - var $route = $injector.get('$route'); - var authenticationService = $injector.get('authenticationService'); - var requestService = $injector.get('requestService'); - var userService = $injector.get('userService'); - var userPageService = $injector.get('userPageService'); - - /** - * The username of the current user. - * - * @type String - */ - $scope.username = authenticationService.getCurrentUsername(); - - /** - * The user's full name. If not yet available, or if not defined, - * this will be null. - * - * @type String - */ - $scope.fullName = null; - - /** - * A URL pointing to relevant user information such as the user's - * email address. If not yet available, or if no such URL can be - * determined, this will be null. - * - * @type String - */ - $scope.userURL = null; - - /** - * The organization, company, group, etc. that the user belongs to. - * If not yet available, or if not defined, this will be null. - * - * @type String - */ - $scope.organization = null; - - /** - * The role that the user has at the organization, company, group, - * etc. they belong to. If not yet available, or if not defined, - * this will be null. - * - * @type String - */ - $scope.role = null; - - // Display user profile attributes if available - userService.getUser(authenticationService.getDataSource(), $scope.username) - .then(function userRetrieved(user) { - - // Pull basic profile information - $scope.fullName = user.attributes[User.Attributes.FULL_NAME]; - $scope.organization = user.attributes[User.Attributes.ORGANIZATION]; - $scope.role = user.attributes[User.Attributes.ORGANIZATIONAL_ROLE]; - - // Link to email address if available - var email = user.attributes[User.Attributes.EMAIL_ADDRESS]; - $scope.userURL = email ? 'mailto:' + email : null; - - }, requestService.IGNORE); - - /** - * The available main pages for the current user. - * - * @type Page[] - */ - $scope.pages = null; - - // Retrieve the main pages from the user page service - userPageService.getMainPages() - .then(function retrievedMainPages(pages) { - $scope.pages = pages; - }); - - /** - * Returns whether the current user has authenticated anonymously. - * - * @returns {Boolean} - * true if the current user has authenticated anonymously, false - * otherwise. - */ - $scope.isAnonymous = function isAnonymous() { - return authenticationService.isAnonymous(); - }; - - /** - * Logs out the current user, redirecting them to back to the root - * after logout completes. - */ - $scope.logout = function logout() { - authenticationService.logout() - ['catch'](requestService.IGNORE); - }; - - /** - * Action which logs out the current user, redirecting them to back - * to the login screen after logout completes. - */ - var LOGOUT_ACTION = { - name : 'USER_MENU.ACTION_LOGOUT', - className : 'logout', - callback : $scope.logout - }; - - /** - * All available actions for the current user. - */ - $scope.actions = [ LOGOUT_ACTION ]; - - }] // end controller - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/navigationModule.js b/guacamole/src/main/frontend/src/app/navigation/navigationModule.js deleted file mode 100644 index 24c63e3c3d..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/navigationModule.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for generating and implementing user navigation options. - */ -angular.module('navigation', [ - 'auth', - 'form', - 'notification', - 'rest' -]); diff --git a/guacamole/src/main/frontend/src/app/navigation/services/userPageService.js b/guacamole/src/main/frontend/src/app/navigation/services/userPageService.js deleted file mode 100644 index 9a9f693f6d..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/services/userPageService.js +++ /dev/null @@ -1,488 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for generating all the important pages a user can visit. - */ -angular.module('navigation').factory('userPageService', ['$injector', - function userPageService($injector) { - - // Get required types - var ClientIdentifier = $injector.get('ClientIdentifier'); - var ConnectionGroup = $injector.get('ConnectionGroup'); - var PageDefinition = $injector.get('PageDefinition'); - var PermissionSet = $injector.get('PermissionSet'); - - // Get required services - var $q = $injector.get('$q'); - var authenticationService = $injector.get('authenticationService'); - var connectionGroupService = $injector.get('connectionGroupService'); - var dataSourceService = $injector.get('dataSourceService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var translationStringService = $injector.get('translationStringService'); - - var service = {}; - - /** - * The home page to assign to a user if they can navigate to more than one - * page. - * - * @type PageDefinition - */ - var SYSTEM_HOME_PAGE = new PageDefinition({ - name : 'USER_MENU.ACTION_NAVIGATE_HOME', - url : '/' - }); - - /** - * Returns an appropriate home page for the current user. - * - * @param {Object.} rootGroups - * A map of all root connection groups visible to the current user, - * where each key is the identifier of the corresponding data source. - * - * @param {Object.} permissions - * A map of all permissions granted to the current user, where each - * key is the identifier of the corresponding data source. - * - * @returns {PageDefinition} - * The user's home page. - */ - var generateHomePage = function generateHomePage(rootGroups, permissions) { - - var settingsPages = generateSettingsPages(permissions); - - // If user has access to settings pages, return home page and skip - // evaluation for automatic connections. The Preferences page is - // a Settings page and is always visible, and the Session management - // page is also available to all users so that they can kill their - // own session. We look for more than those two pages to determine - // if we should go to the home page. - if (settingsPages.length > 2) - return SYSTEM_HOME_PAGE; - - // If exactly one connection or balancing group is available, use - // that as the home page - var clientPages = service.getClientPages(rootGroups); - return (clientPages.length === 1) ? clientPages[0] : SYSTEM_HOME_PAGE; - - }; - - /** - * Adds to the given array all pages that the current user may use to - * access connections or balancing groups that are descendants of the given - * connection group. - * - * @param {PageDefinition[]} clientPages - * The array that pages should be added to. - * - * @param {String} dataSource - * The data source containing the given connection group. - * - * @param {ConnectionGroup} connectionGroup - * The connection group ancestor of the connection or balancing group - * descendants whose pages should be added to the given array. - */ - var addClientPages = function addClientPages(clientPages, dataSource, connectionGroup) { - - // Add pages for all child connections - angular.forEach(connectionGroup.childConnections, function addConnectionPage(connection) { - clientPages.push(new PageDefinition({ - name : connection.name, - url : '/client/' + ClientIdentifier.toString({ - dataSource : dataSource, - type : ClientIdentifier.Types.CONNECTION, - id : connection.identifier - }) - })); - }); - - // Add pages for all child balancing groups, as well as the connectable - // descendants of all balancing groups of any type - angular.forEach(connectionGroup.childConnectionGroups, function addConnectionGroupPage(connectionGroup) { - - if (connectionGroup.type === ConnectionGroup.Type.BALANCING) { - clientPages.push(new PageDefinition({ - name : connectionGroup.name, - url : '/client/' + ClientIdentifier.toString({ - dataSource : dataSource, - type : ClientIdentifier.Types.CONNECTION_GROUP, - id : connectionGroup.identifier - }) - })); - } - - addClientPages(clientPages, dataSource, connectionGroup); - - }); - - }; - - /** - * Returns a full list of all pages that the current user may use to access - * a connection or balancing group, regardless of the depth of those - * connections/groups within the connection hierarchy. - * - * @param {Object.} rootGroups - * A map of all root connection groups visible to the current user, - * where each key is the identifier of the corresponding data source. - * - * @returns {PageDefinition[]} - * A list of all pages that the current user may use to access a - * connection or balancing group. - */ - service.getClientPages = function getClientPages(rootGroups) { - - var clientPages = []; - - // Determine whether a connection or balancing group should serve as - // the home page - for (var dataSource in rootGroups) { - addClientPages(clientPages, dataSource, rootGroups[dataSource]); - } - - return clientPages; - - }; - - /** - * Returns a promise which resolves with an appropriate home page for the - * current user. The promise will not be rejected. - * - * @returns {Promise.} - * A promise which resolves with the user's default home page. - */ - service.getHomePage = function getHomePage() { - - var deferred = $q.defer(); - - // Resolve promise using home page derived from root connection groups - var getRootGroups = dataSourceService.apply( - connectionGroupService.getConnectionGroupTree, - authenticationService.getAvailableDataSources(), - ConnectionGroup.ROOT_IDENTIFIER - ); - var getPermissionSets = dataSourceService.apply( - permissionService.getEffectivePermissions, - authenticationService.getAvailableDataSources(), - authenticationService.getCurrentUsername() - ); - - $q.all({ - rootGroups : getRootGroups, - permissionsSets : getPermissionSets - }) - .then(function rootConnectionGroupsPermissionsRetrieved(data) { - deferred.resolve(generateHomePage(data.rootGroups,data.permissionsSets)); - }, requestService.DIE); - - return deferred.promise; - - }; - - /** - * Returns all settings pages that the current user can visit. This can - * include any of the various manage pages. - * - * @param {Object.} permissionSets - * A map of all permissions granted to the current user, where each - * key is the identifier of the corresponding data source. - * - * @returns {Page[]} - * An array of all settings pages that the current user can visit. - */ - var generateSettingsPages = function generateSettingsPages(permissionSets) { - - var pages = []; - - var canManageUsers = []; - var canManageUserGroups = []; - var canManageConnections = []; - var canViewConnectionRecords = []; - - // Inspect the contents of each provided permission set - angular.forEach(authenticationService.getAvailableDataSources(), function inspectPermissions(dataSource) { - - // Get permissions for current data source, skipping if non-existent - var permissions = permissionSets[dataSource]; - if (!permissions) - return; - - // Do not modify original object - permissions = angular.copy(permissions); - - // Ignore permission to update root group - PermissionSet.removeConnectionGroupPermission(permissions, - PermissionSet.ObjectPermissionType.UPDATE, - ConnectionGroup.ROOT_IDENTIFIER); - - // Ignore permission to update self - PermissionSet.removeUserPermission(permissions, - PermissionSet.ObjectPermissionType.UPDATE, - authenticationService.getCurrentUsername()); - - // Determine whether the current user needs access to the user management UI - if ( - // System permissions - PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_USER) - - // Permission to update users - || PermissionSet.hasUserPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) - - // Permission to delete users - || PermissionSet.hasUserPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) - - // Permission to administer users - || PermissionSet.hasUserPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) - ) { - canManageUsers.push(dataSource); - } - - // Determine whether the current user needs access to the group management UI - if ( - // System permissions - PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_USER_GROUP) - - // Permission to update user groups - || PermissionSet.hasUserGroupPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) - - // Permission to delete user groups - || PermissionSet.hasUserGroupPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) - - // Permission to administer user groups - || PermissionSet.hasUserGroupPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) - ) { - canManageUserGroups.push(dataSource); - } - - // Determine whether the current user needs access to the connection management UI - if ( - // System permissions - PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION) - || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION_GROUP) - - // Permission to update connections or connection groups - || PermissionSet.hasConnectionPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) - || PermissionSet.hasConnectionGroupPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) - - // Permission to delete connections or connection groups - || PermissionSet.hasConnectionPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) - || PermissionSet.hasConnectionGroupPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) - - // Permission to administer connections or connection groups - || PermissionSet.hasConnectionPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) - || PermissionSet.hasConnectionGroupPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) - ) { - canManageConnections.push(dataSource); - } - - // Determine whether the current user needs access to view connection history - if ( - // A user must be a system administrator or auditor to view connection records - PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.AUDIT) - ) { - canViewConnectionRecords.push(dataSource); - } - - }); - - // Add link to Session management (always accessible) - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_SESSIONS', - url : '/settings/sessions' - })); - - // If user can view connection records, add links for connection history pages - angular.forEach(canViewConnectionRecords, function addConnectionHistoryLink(dataSource) { - pages.push(new PageDefinition({ - name : [ - 'USER_MENU.ACTION_VIEW_HISTORY', - translationStringService.canonicalize('DATA_SOURCE_' + dataSource) + '.NAME' - ], - url : '/settings/' + encodeURIComponent(dataSource) + '/history' - })); - }); - - // If user can manage users, add link to user management page - if (canManageUsers.length) { - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_USERS', - url : '/settings/users' - })); - } - - // If user can manage user groups, add link to group management page - if (canManageUserGroups.length) { - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_USER_GROUPS', - url : '/settings/userGroups' - })); - } - - // If user can manage connections, add links for connection management pages - angular.forEach(canManageConnections, function addConnectionManagementLink(dataSource) { - pages.push(new PageDefinition({ - name : [ - 'USER_MENU.ACTION_MANAGE_CONNECTIONS', - translationStringService.canonicalize('DATA_SOURCE_' + dataSource) + '.NAME' - ], - url : '/settings/' + encodeURIComponent(dataSource) + '/connections' - })); - }); - - // Add link to user preferences (always accessible) - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_PREFERENCES', - url : '/settings/preferences' - })); - - return pages; - }; - - /** - * Returns a promise which resolves to an array of all settings pages that - * the current user can visit. This can include any of the various manage - * pages. The promise will not be rejected. - * - * @returns {Promise.} - * A promise which resolves to an array of all settings pages that the - * current user can visit. - */ - service.getSettingsPages = function getSettingsPages() { - - var deferred = $q.defer(); - - // Retrieve current permissions - dataSourceService.apply( - permissionService.getEffectivePermissions, - authenticationService.getAvailableDataSources(), - authenticationService.getCurrentUsername() - ) - - // Resolve promise using settings pages derived from permissions - .then(function permissionsRetrieved(permissions) { - deferred.resolve(generateSettingsPages(permissions)); - }, requestService.DIE); - - return deferred.promise; - - }; - - /** - * Returns all the main pages that the current user can visit. This can - * include the home page, manage pages, etc. In the case that there are no - * applicable pages of this sort, it may return a client page. - * - * @param {Object.} rootGroups - * A map of all root connection groups visible to the current user, - * where each key is the identifier of the corresponding data source. - * - * @param {Object.} permissions - * A map of all permissions granted to the current user, where each - * key is the identifier of the corresponding data source. - * - * @returns {Page[]} - * An array of all main pages that the current user can visit. - */ - var generateMainPages = function generateMainPages(rootGroups, permissions) { - - var pages = []; - - // Get home page and settings pages - var homePage = generateHomePage(rootGroups, permissions); - var settingsPages = generateSettingsPages(permissions); - - // Only include the home page in the list of main pages if the user - // can navigate elsewhere. - if (homePage === SYSTEM_HOME_PAGE || settingsPages.length) - pages.push(homePage); - - // Add generic link to the first-available settings page - if (settingsPages.length) { - pages.push(new PageDefinition({ - name : 'USER_MENU.ACTION_MANAGE_SETTINGS', - url : settingsPages[0].url - })); - } - - return pages; - }; - - /** - * Returns a promise which resolves to an array of all main pages that the - * current user can visit. This can include the home page, manage pages, - * etc. In the case that there are no applicable pages of this sort, it may - * return a client page. The promise will not be rejected. - * - * @returns {Promise.} - * A promise which resolves to an array of all main pages that the - * current user can visit. - */ - service.getMainPages = function getMainPages() { - - var deferred = $q.defer(); - - var rootGroups = null; - var permissions = null; - - /** - * Resolves the main pages retrieval promise, if possible. If - * insufficient data is available, this function does nothing. - */ - var resolveMainPages = function resolveMainPages() { - if (rootGroups && permissions) - deferred.resolve(generateMainPages(rootGroups, permissions)); - }; - - // Retrieve root group, resolving main pages if possible - dataSourceService.apply( - connectionGroupService.getConnectionGroupTree, - authenticationService.getAvailableDataSources(), - ConnectionGroup.ROOT_IDENTIFIER - ) - .then(function rootConnectionGroupsRetrieved(retrievedRootGroups) { - rootGroups = retrievedRootGroups; - resolveMainPages(); - }, requestService.DIE); - - // Retrieve current permissions - dataSourceService.apply( - permissionService.getEffectivePermissions, - authenticationService.getAvailableDataSources(), - authenticationService.getCurrentUsername() - ) - - // Resolving main pages if possible - .then(function permissionsRetrieved(retrievedPermissions) { - permissions = retrievedPermissions; - resolveMainPages(); - }, requestService.DIE); - - return deferred.promise; - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/styles/menu.css b/guacamole/src/main/frontend/src/app/navigation/styles/menu.css deleted file mode 100644 index 608650ea8a..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/styles/menu.css +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.menu-dropdown { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: center; - -ms-flex-direction: row; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: center; - -moz-box-orient: horizontal; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: center; - -webkit-box-orient: horizontal; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: center; - -webkit-flex-direction: row; - - /* W3C */ - display: flex; - align-items: center; - flex-direction: row; - -} - -.menu-dropdown { - position: relative; - border-left: 1px solid rgba(0,0,0,0.125); - background: rgba(0,0,0,0.04); -} - -.menu-dropdown:hover { - background: rgba(0,0,0,0.01); -} - -.menu-dropdown.open, -.menu-dropdown.open:hover { - background: rgba(0,0,0,0.3); -} - -.menu-dropdown .menu-title { - - cursor: default; - margin: 0; - padding: 0.5em; - padding-right: 2em; - - white-space: nowrap; - overflow: hidden; - width: 100%; - text-overflow: ellipsis; - - -ms-flex: 0 0 auto; - -moz-box-flex: 0; - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - flex: 0 0 auto; - -} - -.menu-dropdown .menu-indicator { - - position: absolute; - right: 0; - top: 0; - bottom: 0; - - width: 2em; - background-repeat: no-repeat; - background-size: 1em; - background-position: center center; - background-image: url('images/arrows/down.svg'); - -} - -.menu-dropdown .menu-contents { - - visibility: hidden; - - position: absolute; - top: 100%; - right: 0; - min-width: 100%; - white-space: nowrap; - - background: #EEE; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.125); - border-left: 1px solid rgba(0,0,0,0.125); - border-bottom: 1px solid rgba(0,0,0,0.125); - - z-index: 5; - -} - -.menu-dropdown .menu-contents ul { - margin: 0; - padding: 0; -} - -.menu-dropdown.open .menu-contents { - visibility: visible; -} - -.menu-dropdown .menu-contents li { - padding: 0; - list-style-type: none; -} - -.menu-dropdown .menu-contents li a { - - display: block; - cursor: pointer; - color: black; - text-decoration: none; - padding: 0.75em; - -} - -.menu-dropdown .menu-contents li a:hover { - background-color: #CDA; -} - -.menu-dropdown .menu-contents li a.current, -.menu-dropdown .menu-contents li a.current:hover { - background-color: transparent; - cursor: default; - opacity: 0.25; -} - -.menu-dropdown .menu-contents li a.danger { - color: white; - font-weight: bold; - background-color: #A43; -} - -.menu-dropdown .menu-contents li a.danger:hover { - background-color: #C54; -} diff --git a/guacamole/src/main/frontend/src/app/navigation/styles/tabs.css b/guacamole/src/main/frontend/src/app/navigation/styles/tabs.css deleted file mode 100644 index 3d1c8cdec3..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/styles/tabs.css +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.page-tabs .page-list ul, -.section-tabs ul { - margin: 0; - padding: 0; - background: rgba(0, 0, 0, 0.0125); - border-bottom: 1px solid rgba(0, 0, 0, 0.05); -} - -.page-tabs .page-list ul + ul, -.section-tabs ul + ul { - font-size: 0.75em; -} - -.page-tabs .page-list li, -.section-tabs li { - display: inline-block; - list-style: none; -} - -.page-tabs .page-list li a[href], -.section-tabs li a { - display: block; - color: black; - text-decoration: none; - padding: 0.75em 1em; -} - -.page-tabs .page-list li a[href]:visited { - color: black; -} - -.page-tabs .page-list li a[href]:hover, -.section-tabs li a:hover { - background-color: #CDA; - cursor: pointer; -} - -.page-tabs .page-list li a[href].current, -.page-tabs .page-list li a[href].current:hover, -.section-tabs li a.current, -.section-tabs li a.current:hover { - background: rgba(0,0,0,0.3); - cursor: default; -} diff --git a/guacamole/src/main/frontend/src/app/navigation/styles/user-menu.css b/guacamole/src/main/frontend/src/app/navigation/styles/user-menu.css deleted file mode 100644 index 0af3f82c65..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/styles/user-menu.css +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.user-menu { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: row; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: horizontal; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: horizontal; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: row; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: row; - -} - -.user-menu .menu-dropdown .menu-title { - - font-weight: bold; - padding-left: 2em; - - background-repeat: no-repeat; - background-size: 1em; - background-position: 0.5em center; - background-image: url('images/user-icons/guac-user.svg'); - -} - -.user-menu .menu-dropdown .menu-contents li a { - - background-repeat: no-repeat; - background-size: 1em; - background-position: 0.75em center; - padding-left: 2.5em; - background-image: url('images/protocol-icons/guac-monitor.svg'); - -} - -.user-menu .menu-dropdown .menu-contents li a[href="#/"] { - background-image: url('images/action-icons/guac-home-dark.svg'); -} - -.user-menu .menu-dropdown .menu-contents li a[href="#/settings/users"], -.user-menu .menu-dropdown .menu-contents li a[href="#/settings/connections"], -.user-menu .menu-dropdown .menu-contents li a[href="#/settings/sessions"], -.user-menu .menu-dropdown .menu-contents li a[href="#/settings/preferences"] { - background-image: url('images/action-icons/guac-config-dark.svg'); -} - -.user-menu .menu-dropdown .menu-contents li a.logout { - background-image: url('images/action-icons/guac-logout-dark.svg'); -} - -.user-menu .menu-dropdown .menu-contents .profile { - margin: 1em; - padding-bottom: 1em; - border-bottom: 1px solid rgba(0, 0, 0, 0.25); - width: 2in; -} - -.user-menu .menu-dropdown .menu-contents .profile .full-name { - font-weight: bold; -} -.user-menu .menu-dropdown .menu-contents .profile .organization, -.user-menu .menu-dropdown .menu-contents .profile .organizational-role { - font-size: 0.8em; -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/navigation/templates/guacMenu.html b/guacamole/src/main/frontend/src/app/navigation/templates/guacMenu.html deleted file mode 100644 index f7ddee974c..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/templates/guacMenu.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/navigation/templates/guacPageList.html b/guacamole/src/main/frontend/src/app/navigation/templates/guacPageList.html deleted file mode 100644 index efadd0a903..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/templates/guacPageList.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/navigation/templates/guacSectionTabs.html b/guacamole/src/main/frontend/src/app/navigation/templates/guacSectionTabs.html deleted file mode 100644 index a028715343..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/templates/guacSectionTabs.html +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/navigation/templates/guacUserMenu.html b/guacamole/src/main/frontend/src/app/navigation/templates/guacUserMenu.html deleted file mode 100644 index 9869cd6e83..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/templates/guacUserMenu.html +++ /dev/null @@ -1,33 +0,0 @@ -
    - - - -
    - -
    {{ role }}
    -
    {{ organization }}
    -
    - - - - - - - - - - -
    -
    diff --git a/guacamole/src/main/frontend/src/app/navigation/types/ClientIdentifier.js b/guacamole/src/main/frontend/src/app/navigation/types/ClientIdentifier.js deleted file mode 100644 index 47af7adc53..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/types/ClientIdentifier.js +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the ClientIdentifier class definition. - */ -angular.module('navigation').factory('ClientIdentifier', ['$injector', - function defineClientIdentifier($injector) { - - // Required services - var authenticationService = $injector.get('authenticationService'); - var $window = $injector.get('$window'); - - /** - * Object which uniquely identifies a particular connection or connection - * group within Guacamole. This object can be converted to/from a string to - * generate a guaranteed-unique, deterministic identifier for client URLs. - * - * @constructor - * @param {ClientIdentifier|Object} [template={}] - * The object whose properties should be copied within the new - * ClientIdentifier. - */ - var ClientIdentifier = function ClientIdentifier(template) { - - // Use empty object by default - template = template || {}; - - /** - * The identifier of the data source associated with the object to - * which the client will connect. This identifier will be the - * identifier of an AuthenticationProvider within the Guacamole web - * application. - * - * @type String - */ - this.dataSource = template.dataSource; - - /** - * The type of object to which the client will connect. Possible values - * are defined within ClientIdentifier.Types. - * - * @type String - */ - this.type = template.type; - - /** - * The unique identifier of the object to which the client will - * connect. - * - * @type String - */ - this.id = template.id; - - }; - - /** - * All possible ClientIdentifier types. - * - * @type Object. - */ - ClientIdentifier.Types = { - - /** - * The type string for a Guacamole connection. - * - * @type String - */ - CONNECTION : 'c', - - /** - * The type string for a Guacamole connection group. - * - * @type String - */ - CONNECTION_GROUP : 'g', - - /** - * The type string for an active Guacamole connection. - * - * @type String - */ - ACTIVE_CONNECTION : 'a' - - }; - - /** - * Encodes the given value as base64url, a variant of base64 defined by - * RFC 4648: https://datatracker.ietf.org/doc/html/rfc4648#section-5. - * - * The "base64url" variant is identical to standard base64 except that it - * uses "-" instead of "+", "_" instead of "/", and padding with "=" is - * optional. - * - * @param {string} value - * The string value to encode. - * - * @returns {string} - * The provided string value encoded as unpadded base64url. - */ - var base64urlEncode = function base64urlEncode(value) { - - // Translate padded standard base64 to unpadded base64url - return $window.btoa(value).replace(/[+/=]/g, - (str) => ({ - '+' : '-', - '/' : '_', - '=' : '' - })[str] - ); - - }; - - /** - * Decodes the given base64url or base64 string. The input string may - * contain "=" padding characters, but this is not required. - * - * @param {string} value - * The base64url or base64 value to decode. - * - * @returns {string} - * The result of decoding the provided base64url or base64 string. - */ - var base64urlDecode = function base64urlDecode(value) { - - // Add any missing padding (standard base64 requires input strings to - // be multiples of 4 in length, padded using '=') - value += ([ - '', - '===', - '==', - '=' - ])[value.length % 4]; - - // Translate padded base64url to padded standard base64 - return $window.atob(value.replace(/[-_]/g, - (str) => ({ - '-' : '+', - '_' : '/' - })[str] - )); - }; - - /** - * Converts the given ClientIdentifier or ClientIdentifier-like object to - * a String representation. Any object having the same properties as - * ClientIdentifier may be used, but only those properties will be taken - * into account when producing the resulting String. - * - * @param {ClientIdentifier|Object} id - * The ClientIdentifier or ClientIdentifier-like object to convert to - * a String representation. - * - * @returns {String} - * A deterministic String representation of the given ClientIdentifier - * or ClientIdentifier-like object. - */ - ClientIdentifier.toString = function toString(id) { - return base64urlEncode([ - id.id, - id.type, - id.dataSource - ].join('\0')); - }; - - /** - * Converts the given String into the corresponding ClientIdentifier. If - * the provided String is not a valid identifier, it will be interpreted - * as the identifier of a connection within the data source that - * authenticated the current user. - * - * @param {String} str - * The String to convert to a ClientIdentifier. - * - * @returns {ClientIdentifier} - * The ClientIdentifier represented by the given String. - */ - ClientIdentifier.fromString = function fromString(str) { - - try { - var values = base64urlDecode(str).split('\0'); - return new ClientIdentifier({ - id : values[0], - type : values[1], - dataSource : values[2] - }); - } - - // If the provided string is invalid, transform into a reasonable guess - catch (e) { - return new ClientIdentifier({ - id : str, - type : ClientIdentifier.Types.CONNECTION, - dataSource : authenticationService.getDataSource() || 'default' - }); - } - - }; - - return ClientIdentifier; - -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/types/MenuAction.js b/guacamole/src/main/frontend/src/app/navigation/types/MenuAction.js deleted file mode 100644 index a63bae543f..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/types/MenuAction.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the MenuAction class definition. - */ -angular.module('navigation').factory('MenuAction', [function defineMenuAction() { - - /** - * Creates a new MenuAction, which pairs an arbitrary callback with - * an action name. The name of this action will ultimately be presented to - * the user when the user when this action's associated menu is open. - * - * @constructor - * @param {String} name - * The name of this action. - * - * @param {Function} callback - * The callback to call when the user elects to perform this action. - * - * @param {String} className - * The CSS class to associate with this action, if any. - */ - var MenuAction = function MenuAction(name, callback, className) { - - /** - * Reference to this MenuAction. - * - * @type MenuAction - */ - var action = this; - - /** - * The CSS class associated with this action. - * - * @type String - */ - this.className = className; - - /** - * The name of this action. - * - * @type String - */ - this.name = name; - - /** - * The callback to call when this action is performed. - * - * @type Function - */ - this.callback = callback; - - }; - - return MenuAction; - -}]); diff --git a/guacamole/src/main/frontend/src/app/navigation/types/PageDefinition.js b/guacamole/src/main/frontend/src/app/navigation/types/PageDefinition.js deleted file mode 100644 index f78129c4f7..0000000000 --- a/guacamole/src/main/frontend/src/app/navigation/types/PageDefinition.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the PageDefinition class definition. - */ -angular.module('navigation').factory('PageDefinition', [function definePageDefinition() { - - /** - * Creates a new PageDefinition object which pairs the URL of a page with - * an arbitrary, human-readable name. - * - * @constructor - * @param {PageDefinition|Object} template - * The object whose properties should be copied within the new - * PageDefinition. - */ - var PageDefinition = function PageDefinition(template) { - - /** - * The name of the page, which should be a translation table key. - * Alternatively, this may also be a list of names, where the final - * name represents the page and earlier names represent categorization. - * Those categorical names may be rendered hierarchically as a system - * of menus, tabs, etc. - * - * @type String|String[] - */ - this.name = template.name; - - /** - * The URL of the page. - * - * @type String - */ - this.url = template.url; - - /** - * The CSS class name to associate with this page, if any. This will be - * an empty string by default. - * - * @type String - */ - this.className = template.className || ''; - - /** - * A numeric value denoting the relative sort order when compared to - * other sibling PageDefinitions. If unspecified, sort order is - * determined by the system using the PageDefinition. - * - * @type Number - */ - this.weight = template.weight; - - }; - - return PageDefinition; - -}]); diff --git a/guacamole/src/main/frontend/src/app/notification/directives/guacModal.js b/guacamole/src/main/frontend/src/app/notification/directives/guacModal.js deleted file mode 100644 index 8cc6392cba..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/directives/guacModal.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for displaying arbitrary modal content. - */ -angular.module('notification').directive('guacModal', [function guacModal() { - return { - restrict: 'E', - templateUrl: 'app/notification/templates/guacModal.html', - transclude: true - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/notification/directives/guacNotification.js b/guacamole/src/main/frontend/src/app/notification/directives/guacNotification.js deleted file mode 100644 index d3570e0c5e..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/directives/guacNotification.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for the guacamole client. - */ -angular.module('notification').directive('guacNotification', [function guacNotification() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The notification to display. - * - * @type Notification|Object - */ - notification : '=' - - }, - - templateUrl: 'app/notification/templates/guacNotification.html', - controller: ['$scope', '$interval', function guacNotificationController($scope, $interval) { - - // Update progress bar if end known - $scope.$watch("notification.progress.ratio", function updateProgress(ratio) { - $scope.progressPercent = ratio * 100; - }); - - $scope.$watch("notification", function resetTimeRemaining(notification) { - - var countdown = notification.countdown; - - // Clean up any existing interval - if ($scope.interval) - $interval.cancel($scope.interval); - - // Update and handle countdown, if provided - if (countdown) { - - $scope.timeRemaining = countdown.remaining; - - $scope.interval = $interval(function updateTimeRemaining() { - - // Update time remaining - $scope.timeRemaining--; - - // Call countdown callback when time remaining expires - if ($scope.timeRemaining === 0 && countdown.callback) - countdown.callback(); - - }, 1000, $scope.timeRemaining); - - } - - }); - - // Clean up interval upon destruction - $scope.$on("$destroy", function destroyNotification() { - - if ($scope.interval) - $interval.cancel($scope.interval); - - }); - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/notification/notificationModule.js b/guacamole/src/main/frontend/src/app/notification/notificationModule.js deleted file mode 100644 index 15a2a4628b..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/notificationModule.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for code used to display arbitrary notifications. - */ -angular.module('notification', [ - 'rest', - 'storage' -]); diff --git a/guacamole/src/main/frontend/src/app/notification/services/guacNotification.js b/guacamole/src/main/frontend/src/app/notification/services/guacNotification.js deleted file mode 100644 index 22eeed6304..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/services/guacNotification.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for displaying notifications and modal status dialogs. - */ -angular.module('notification').factory('guacNotification', ['$injector', - function guacNotification($injector) { - - // Required services - var $rootScope = $injector.get('$rootScope'); - var requestService = $injector.get('requestService'); - var sessionStorageFactory = $injector.get('sessionStorageFactory'); - - var service = {}; - - /** - * Getter/setter which retrieves or sets the current status notification, - * which may simply be false if no status is currently shown. - * - * @type Function - */ - var storedStatus = sessionStorageFactory.create(false); - - /** - * An action to be provided along with the object sent to showStatus which - * closes the currently-shown status dialog. - * - * @type NotificationAction - */ - service.ACKNOWLEDGE_ACTION = { - name : 'APP.ACTION_ACKNOWLEDGE', - callback : function acknowledgeCallback() { - service.showStatus(false); - } - }; - - /** - * Retrieves the current status notification, which may simply be false if - * no status is currently shown. - * - * @type Notification|Boolean - */ - service.getStatus = function getStatus() { - return storedStatus(); - }; - - /** - * Shows or hides the given notification as a modal status. If a status - * notification is currently shown, no further statuses will be shown - * until the current status is hidden. - * - * @param {Notification|Boolean|Object} status - * The status notification to show. - * - * @example - * - * // To show a status message with actions - * guacNotification.showStatus({ - * 'title' : 'Disconnected', - * 'text' : { - * 'key' : 'NAMESPACE.SOME_TRANSLATION_KEY' - * }, - * 'actions' : [{ - * 'name' : 'reconnect', - * 'callback' : function () { - * // Reconnection code goes here - * } - * }] - * }); - * - * // To hide the status message - * guacNotification.showStatus(false); - */ - service.showStatus = function showStatus(status) { - if (!storedStatus() || !status) - storedStatus(status); - }; - - /** - * Promise error callback which displays a modal notification for all - * rejections due to REST errors. The message displayed to the user within - * the notification is provided by the contents of the @link{Error} object - * within the REST response. All other rejections, such as those due to - * JavaScript errors, are logged to the browser console without displaying - * any notification. - * - * @constant - * @type Function - */ - service.SHOW_REQUEST_ERROR = requestService.createErrorCallback(function showRequestError(error) { - service.showStatus({ - className : 'error', - title : 'APP.DIALOG_HEADER_ERROR', - text : error.translatableMessage, - actions : [ service.ACKNOWLEDGE_ACTION ] - }); - }); - - // Hide status upon navigation - $rootScope.$on('$routeChangeSuccess', function() { - service.showStatus(false); - }); - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/notification/styles/modal.css b/guacamole/src/main/frontend/src/app/notification/styles/modal.css deleted file mode 100644 index dade6f2858..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/styles/modal.css +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -guac-modal { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - height: 100%; - width: 100%; - position: fixed; - left: 0; - top: 0; - z-index: 10; - overflow: hidden; -} - -guac-modal .modal-contents { - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: 100%; - text-align: center; -} - -guac-modal { - animation: fadein 0.125s linear; - -moz-animation: fadein 0.125s linear; - -webkit-animation: fadein 0.125s linear; -} diff --git a/guacamole/src/main/frontend/src/app/notification/styles/notification.css b/guacamole/src/main/frontend/src/app/notification/styles/notification.css deleted file mode 100644 index f5b99fe0b8..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/styles/notification.css +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.notification { - border: 1px solid rgba(0, 0, 0, 0.25); - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.25); - background: white; - color: black; -} - -.notification.error { - background: #FDD; -} - -.notification .body { - margin: 0.5em; -} - -.notification .buttons { - margin: 0.5em; -} - -@keyframes notification-progress { - from {background-position: 0px 0px;} - to {background-position: 64px 0px;} -} - -@-webkit-keyframes notification-progress { - from {background-position: 0px 0px;} - to {background-position: 64px 0px;} -} - -.notification .title-bar { - font-size: 1.25em; - font-weight: bold; - - text-transform: uppercase; - border-bottom: 1px solid rgba(0, 0, 0, 0.125); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.125); - background: rgba(0, 0, 0, 0.04); - - padding: 0.5em; - margin-bottom: 1em; -} - -.notification .progress .bar { - background: #A3D655; - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 0; - box-shadow: inset 1px 1px 0 rgba(255, 255, 255, 0.5), - inset -1px -1px 0 rgba( 0, 0, 0, 0.1), - 1px 1px 0 gray; -} - -.notification .progress { - - width: 100%; - background: #C2C2C2 url('images/progress.svg'); - background-size: 16px 16px; - -moz-background-size: 16px 16px; - -webkit-background-size: 16px 16px; - -khtml-background-size: 16px 16px; - - animation-name: notification-progress; - animation-duration: 2s; - animation-timing-function: linear; - animation-iteration-count: infinite; - - -webkit-animation-name: notification-progress; - -webkit-animation-duration: 2s; - -webkit-animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - - padding: 0.25em; - - border: 1px solid gray; - - position: relative; - -} - -.notification .progress .text { - position: relative; -} - -.notification .parameters { - width: 100%; -} - -.notification .parameters .fields { - display: table; - width: 100%; -} - -.notification .parameters .fields .labeled-field { - display: table-row; -} - -.notification .parameters .fields .field-header, -.notification .parameters .fields .form-field { - text-align: left; - display: table-cell; - padding: .125em; - vertical-align: top; -} - -.notification .parameters .fields .field-header { - padding-right: 1em; -} - -.notification .parameters .fields .field-header { - width: 0; -} - -.notification .parameters .fields .form-field { - width: 100%; -} - -.notification .parameters input[type=text], -.notification .parameters input[type=email], -.notification .parameters input[type=number], -.notification .parameters input[type=password], -.notification .parameters textarea { - max-width: 100%; -} diff --git a/guacamole/src/main/frontend/src/app/notification/templates/guacModal.html b/guacamole/src/main/frontend/src/app/notification/templates/guacModal.html deleted file mode 100644 index 57a1b5a464..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/templates/guacModal.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/notification/templates/guacNotification.html b/guacamole/src/main/frontend/src/app/notification/templates/guacNotification.html deleted file mode 100644 index b002bb0f77..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/templates/guacNotification.html +++ /dev/null @@ -1,44 +0,0 @@ -
    - - -
    -
    {{notification.title | translate}}
    -
    - -
    - - -

    - - -
    - -
    - - -
    - - -

    - -
    - - -
    - -
    - - diff --git a/guacamole/src/main/frontend/src/app/notification/types/Notification.js b/guacamole/src/main/frontend/src/app/notification/types/Notification.js deleted file mode 100644 index eee16018b8..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/types/Notification.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the Notification class definition. - */ -angular.module('notification').factory('Notification', [function defineNotification() { - - /** - * Creates a new Notification, initializing the properties of that - * Notification with the corresponding properties of the given template. - * - * @constructor - * @param {Notification|Object} [template={}] - * The object whose properties should be copied within the new - * Notification. - */ - var Notification = function Notification(template) { - - // Use empty object by default - template = template || {}; - - /** - * The CSS class to associate with the notification, if any. - * - * @type String - */ - this.className = template.className; - - /** - * The title of the notification. - * - * @type String - */ - this.title = template.title; - - /** - * The body text of the notification. - * - * @type TranslatableMessage - */ - this.text = template.text; - - /** - * The translation namespace of the translation strings that will - * be generated for all fields within the notification. This namespace - * is absolutely required if form fields will be included in the - * notification. - * - * @type String - */ - this.formNamespace = template.formNamespace; - - /** - * Optional form content to display. This may be a form, an array of - * forms, or a simple array of fields. - * - * @type Form[]|Form|Field[]|Field - */ - this.forms = template.forms; - - /** - * The object which will receive all field values. Each field value - * will be assigned to the property of this object having the same - * name. - * - * @type Object. - */ - this.formModel = template.model; - - /** - * The function to invoke when the form is submitted, if form fields - * are present within the notification. - * - * @type Function - */ - this.formSubmitCallback = template.formSubmitCallback; - - /** - * An array of all actions available to the user in response to this - * notification. - * - * @type NotificationAction[] - */ - this.actions = template.actions || []; - - /** - * The current progress state of the ongoing action associated with this - * notification. - * - * @type NotificationProgress - */ - this.progress = template.progress; - - /** - * The countdown and corresponding default action which applies to - * this notification, if any. - * - * @type NotificationCountdown - */ - this.countdown = template.countdown; - - }; - - return Notification; - -}]); diff --git a/guacamole/src/main/frontend/src/app/notification/types/NotificationAction.js b/guacamole/src/main/frontend/src/app/notification/types/NotificationAction.js deleted file mode 100644 index cc41accfa7..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/types/NotificationAction.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the NotificationAction class definition. - */ -angular.module('notification').factory('NotificationAction', [function defineNotificationAction() { - - /** - * Creates a new NotificationAction, which pairs an arbitrary callback with - * an action name. The name of this action will ultimately be presented to - * the user when the user is prompted to choose among available actions. - * - * @constructor - * @param {String} name The name of this action. - * - * @param {Function} callback - * The callback to call when the user elects to perform this action. - * - * @param {String} className - * The CSS class to associate with this action, if any. - */ - var NotificationAction = function NotificationAction(name, callback, className) { - - /** - * Reference to this NotificationAction. - * - * @type NotificationAction - */ - var action = this; - - /** - * The CSS class associated with this action. - * - * @type String - */ - this.className = className; - - /** - * The name of this action. - * - * @type String - */ - this.name = name; - - /** - * The callback to call when this action is performed. - * - * @type Function - */ - this.callback = callback; - - }; - - return NotificationAction; - -}]); diff --git a/guacamole/src/main/frontend/src/app/notification/types/NotificationCountdown.js b/guacamole/src/main/frontend/src/app/notification/types/NotificationCountdown.js deleted file mode 100644 index fc607431eb..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/types/NotificationCountdown.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the NotificationCountdown class definition. - */ -angular.module('notification').factory('NotificationCountdown', [function defineNotificationCountdown() { - - /** - * Creates a new NotificationCountdown which describes an action that - * should be performed after a specific number of seconds has elapsed. - * - * @constructor - * @param {String} text The body text of the notification countdown. - * - * @param {Number} remaining - * The number of seconds remaining in the countdown. - * - * @param {Function} [callback] - * The callback to call when the countdown elapses. - */ - var NotificationCountdown = function NotificationCountdown(text, remaining, callback) { - - /** - * Reference to this NotificationCountdown. - * - * @type NotificationCountdown - */ - var countdown = this; - - /** - * The body text of the notification countdown. For the sake of i18n, - * the variable REMAINING should be applied within the translation - * string for formatting plurals, etc. - * - * @type String - */ - this.text = text; - - /** - * The number of seconds remaining in the countdown. After this number - * of seconds elapses, the callback associated with this - * NotificationCountdown will be called. - * - * @type Number - */ - this.remaining = remaining; - - /** - * The callback to call when this countdown expires. - * - * @type Function - */ - this.callback = callback; - - }; - - return NotificationCountdown; - -}]); diff --git a/guacamole/src/main/frontend/src/app/notification/types/NotificationProgress.js b/guacamole/src/main/frontend/src/app/notification/types/NotificationProgress.js deleted file mode 100644 index af754ab54a..0000000000 --- a/guacamole/src/main/frontend/src/app/notification/types/NotificationProgress.js +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Provides the NotificationProgress class definition. - */ -angular.module('notification').factory('NotificationProgress', [function defineNotificationProgress() { - - /** - * Creates a new NotificationProgress which describes the current status - * of an operation, and how much of that operation remains to be performed. - * - * @constructor - * @param {String} text The text describing the operation progress. - * - * @param {Number} value - * The current state of operation progress, as an arbitrary number - * which increases as the operation continues. - * - * @param {String} [unit] - * The unit of the arbitrary value, if that value has an associated - * unit. - * - * @param {Number} [ratio] - * If known, the current status of the operation as a value between 0 - * and 1 inclusive, where 0 is not yet started, and 1 is complete. - */ - var NotificationProgress = function NotificationProgress(text, value, unit, ratio) { - - /** - * The text describing the operation progress. For the sake of i18n, - * the variable PROGRESS should be applied within the translation - * string for formatting plurals, etc., while UNIT should be used - * for the progress unit, if any. - * - * @type String - */ - this.text = text; - - /** - * The current state of operation progress, as an arbitrary number which - * increases as the operation continues. - * - * @type Number - */ - this.value = value; - - /** - * The unit of the arbitrary value, if that value has an associated - * unit. - * - * @type String - */ - this.unit = unit; - - /** - * If known, the current status of the operation as a value between 0 - * and 1 inclusive, where 0 is not yet started, and 1 is complete. - * - * @type String - */ - this.ratio = ratio; - - }; - - return NotificationProgress; - -}]); diff --git a/guacamole/src/main/frontend/src/app/osk/directives/guacOsk.js b/guacamole/src/main/frontend/src/app/osk/directives/guacOsk.js deleted file mode 100644 index 2236ac852a..0000000000 --- a/guacamole/src/main/frontend/src/app/osk/directives/guacOsk.js +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which displays the Guacamole on-screen keyboard. - */ -angular.module('osk').directive('guacOsk', [function guacOsk() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The URL for the Guacamole on-screen keyboard layout to use. - * - * @type String - */ - layout : '=' - - }, - - templateUrl: 'app/osk/templates/guacOsk.html', - controller: ['$scope', '$injector', '$element', - function guacOsk($scope, $injector, $element) { - - // Required services - var $http = $injector.get('$http'); - var $rootScope = $injector.get('$rootScope'); - var cacheService = $injector.get('cacheService'); - - /** - * The current on-screen keyboard, if any. - * - * @type Guacamole.OnScreenKeyboard - */ - var keyboard = null; - - /** - * The main containing element for the entire directive. - * - * @type Element - */ - var main = $element[0]; - - // Size keyboard to same size as main element - $scope.keyboardResized = function keyboardResized() { - - // Resize keyboard, if defined - if (keyboard) - keyboard.resize(main.offsetWidth); - - }; - - // Set layout whenever URL changes - $scope.$watch("layout", function setLayout(url) { - - // Remove current keyboard - if (keyboard) { - main.removeChild(keyboard.getElement()); - keyboard = null; - } - - // Load new keyboard - if (url) { - - // Retrieve layout JSON - $http({ - cache : cacheService.languages, - method : 'GET', - url : url - }) - - // Build OSK with retrieved layout - .then(function layoutRetrieved(request) { - - var layout = request.data; - - // Abort if the layout changed while we were waiting for a response - if ($scope.layout !== url) - return; - - // Add OSK element - keyboard = new Guacamole.OnScreenKeyboard(layout); - main.appendChild(keyboard.getElement()); - - // Init size - keyboard.resize(main.offsetWidth); - - // Broadcast keydown for each key pressed - keyboard.onkeydown = function(keysym) { - $rootScope.$broadcast('guacSyntheticKeydown', keysym); - }; - - // Broadcast keydown for each key released - keyboard.onkeyup = function(keysym) { - $rootScope.$broadcast('guacSyntheticKeyup', keysym); - }; - - }, angular.noop); - - } - - }); // end layout scope watch - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/osk/oskModule.js b/guacamole/src/main/frontend/src/app/osk/oskModule.js deleted file mode 100644 index ff7fc7c21f..0000000000 --- a/guacamole/src/main/frontend/src/app/osk/oskModule.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for displaying the Guacamole on-screen keyboard. - */ -angular.module('osk', []); diff --git a/guacamole/src/main/frontend/src/app/osk/styles/osk.css b/guacamole/src/main/frontend/src/app/osk/styles/osk.css deleted file mode 100644 index 23a5a1d73a..0000000000 --- a/guacamole/src/main/frontend/src/app/osk/styles/osk.css +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.osk { - position: relative; -} - -.guac-keyboard { - display: inline-block; - width: 100%; - - margin: 0; - padding: 0; - cursor: default; - - text-align: left; - vertical-align: middle; -} - -.guac-keyboard, -.guac-keyboard * { - overflow: hidden; - white-space: nowrap; -} - -.guac-keyboard .guac-keyboard-key-container { - display: inline-block; - margin: 0.05em; - position: relative; -} - -.guac-keyboard .guac-keyboard-key { - - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - - background: #444; - - border: 0.125em solid #666; - -moz-border-radius: 0.25em; - -webkit-border-radius: 0.25em; - -khtml-border-radius: 0.25em; - border-radius: 0.25em; - - color: white; - font-size: 40%; - font-weight: lighter; - text-align: center; - white-space: pre; - - text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25), - 1px -1px 0 rgba(0, 0, 0, 0.25), - -1px 1px 0 rgba(0, 0, 0, 0.25), - -1px -1px 0 rgba(0, 0, 0, 0.25); - -} - -.guac-keyboard .guac-keyboard-key:hover { - cursor: pointer; -} - -.guac-keyboard .guac-keyboard-key.highlight { - background: #666; - border-color: #666; -} - -/* Align some keys to the left */ -.guac-keyboard .guac-keyboard-key-caps, -.guac-keyboard .guac-keyboard-key-enter, -.guac-keyboard .guac-keyboard-key-tab, -.guac-keyboard .guac-keyboard-key-lalt, -.guac-keyboard .guac-keyboard-key-ralt, -.guac-keyboard .guac-keyboard-key-alt-gr, -.guac-keyboard .guac-keyboard-key-lctrl, -.guac-keyboard .guac-keyboard-key-rctrl, -.guac-keyboard .guac-keyboard-key-lshift, -.guac-keyboard .guac-keyboard-key-rshift { - text-align: left; - padding-left: 0.75em; -} - -/* Active shift */ -.guac-keyboard.guac-keyboard-modifier-shift .guac-keyboard-key-rshift, -.guac-keyboard.guac-keyboard-modifier-shift .guac-keyboard-key-lshift, - -/* Active ctrl */ -.guac-keyboard.guac-keyboard-modifier-control .guac-keyboard-key-rctrl, -.guac-keyboard.guac-keyboard-modifier-control .guac-keyboard-key-lctrl, - -/* Active alt */ -.guac-keyboard.guac-keyboard-modifier-alt .guac-keyboard-key-ralt, -.guac-keyboard.guac-keyboard-modifier-alt .guac-keyboard-key-lalt, - -/* Active alt-gr */ -.guac-keyboard.guac-keyboard-modifier-alt-gr .guac-keyboard-key-alt-gr, - -/* Active caps */ -.guac-keyboard.guac-keyboard-modifier-caps .guac-keyboard-key-caps, - -/* Active super */ -.guac-keyboard.guac-keyboard-modifier-super .guac-keyboard-key-super, - -/* Active latin */ -.guac-keyboard.guac-keyboard-modifier-lat .guac-keyboard-key-latin { - background: #882; - border-color: #DD4; -} - -.guac-keyboard .guac-keyboard-key.guac-keyboard-pressed { - background: #822; - border-color: #D44; -} - -.guac-keyboard .guac-keyboard-group { - line-height: 0; -} - -.guac-keyboard .guac-keyboard-group.guac-keyboard-alpha, -.guac-keyboard .guac-keyboard-group.guac-keyboard-movement, -.guac-keyboard .guac-keyboard-group.guac-keyboard-function, -.guac-keyboard .guac-keyboard-group.guac-keyboard-virtual { - display: inline-block; - text-align: center; - vertical-align: top; -} - -.guac-keyboard .guac-keyboard-group.guac-keyboard-main, -.guac-keyboard .guac-keyboard-group.guac-keyboard-top { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: row; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: horizontal; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: horizontal; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: row; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: row; - -} - -.guac-keyboard .guac-keyboard-group.guac-keyboard-movement, -.guac-keyboard .guac-keyboard-group.guac-keyboard-virtual { - -ms-flex: 1 1 auto; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - flex: 1 1 auto; -} - -.guac-keyboard .guac-keyboard-gap { - display: inline-block; -} - -/* Hide keycaps requiring modifiers which are NOT currently active. */ -.guac-keyboard:not(.guac-keyboard-modifier-caps) -.guac-keyboard-cap.guac-keyboard-requires-caps, - -.guac-keyboard:not(.guac-keyboard-modifier-shift) -.guac-keyboard-cap.guac-keyboard-requires-shift, - -.guac-keyboard:not(.guac-keyboard-modifier-alt-gr) -.guac-keyboard-cap.guac-keyboard-requires-alt-gr, - -.guac-keyboard:not(.guac-keyboard-modifier-lat) -.guac-keyboard-cap.guac-keyboard-requires-lat, - -/* Hide keycaps NOT requiring modifiers which ARE currently active, where that - modifier is used to determine which cap is displayed for the current key. */ -.guac-keyboard.guac-keyboard-modifier-shift -.guac-keyboard-key.guac-keyboard-uses-shift -.guac-keyboard-cap:not(.guac-keyboard-requires-shift), - -.guac-keyboard.guac-keyboard-modifier-caps -.guac-keyboard-key.guac-keyboard-uses-caps -.guac-keyboard-cap:not(.guac-keyboard-requires-caps), - -.guac-keyboard.guac-keyboard-modifier-alt-gr -.guac-keyboard-key.guac-keyboard-uses-alt-gr -.guac-keyboard-cap:not(.guac-keyboard-requires-alt-gr), - -.guac-keyboard.guac-keyboard-modifier-lat -.guac-keyboard-key.guac-keyboard-uses-lat -.guac-keyboard-cap:not(.guac-keyboard-requires-lat) { - - display: none; - -} - -/* Fade out keys which do not use AltGr if AltGr is active */ -.guac-keyboard.guac-keyboard-modifier-alt-gr -.guac-keyboard-key:not(.guac-keyboard-uses-alt-gr):not(.guac-keyboard-key-alt-gr) { - opacity: 0.5; -} diff --git a/guacamole/src/main/frontend/src/app/osk/templates/guacOsk.html b/guacamole/src/main/frontend/src/app/osk/templates/guacOsk.html deleted file mode 100644 index 344c214868..0000000000 --- a/guacamole/src/main/frontend/src/app/osk/templates/guacOsk.html +++ /dev/null @@ -1,2 +0,0 @@ -
    -
    diff --git a/guacamole/src/main/frontend/src/app/player/directives/player.js b/guacamole/src/main/frontend/src/app/player/directives/player.js deleted file mode 100644 index 83acb68ae8..0000000000 --- a/guacamole/src/main/frontend/src/app/player/directives/player.js +++ /dev/null @@ -1,576 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/* global _ */ - -/** - * Directive which plays back session recordings. This directive emits the - * following events based on state changes within the current recording: - * - * "guacPlayerLoading": - * A new recording has been selected and is now loading. - * - * "guacPlayerError": - * The current recording cannot be loaded or played due to an error. - * The recording may be unreadable (lack of permissions) or corrupt - * (protocol error). - * - * "guacPlayerProgress" - * Additional data has been loaded for the current recording and the - * recording's duration has changed. The new duration in milliseconds - * and the number of bytes loaded so far are passed to the event. - * - * "guacPlayerLoaded" - * The current recording has finished loading. - * - * "guacPlayerPlay" - * Playback of the current recording has started or has been resumed. - * - * "guacPlayerPause" - * Playback of the current recording has been paused. - * - * "guacPlayerSeek" - * The playback position of the current recording has changed. The new - * position within the recording is passed to the event as the number - * of milliseconds since the start of the recording. - */ -angular.module('player').directive('guacPlayer', ['$injector', function guacPlayer($injector) { - - // Required services - const keyEventDisplayService = $injector.get('keyEventDisplayService'); - const playerHeatmapService = $injector.get('playerHeatmapService'); - const playerTimeService = $injector.get('playerTimeService'); - - /** - * The number of milliseconds after the last detected mouse activity after - * which the associated CSS class should be removed. - * - * @type {number} - */ - const MOUSE_CLEANUP_DELAY = 4000; - - /** - * The number of milliseconds after the last detected mouse activity before - * the cleanup timer to remove the associated CSS class should be scheduled. - * - * @type {number} - */ - const MOUSE_DEBOUNCE_DELAY = 250; - - /** - * The number of milliseconds, after the debounce delay, before the mouse - * activity cleanup timer should run. - * - * @type {number} - */ - const MOUSE_CLEANUP_TIMER_DELAY = MOUSE_CLEANUP_DELAY - MOUSE_DEBOUNCE_DELAY; - - const config = { - restrict : 'E', - templateUrl : 'app/player/templates/player.html' - }; - - config.scope = { - - /** - * A Blob containing the Guacamole session recording to load. - * - * @type {!Blob|Guacamole.Tunnel} - */ - src : '=' - - }; - - config.controller = ['$scope', '$element', '$window', - function guacPlayerController($scope, $element, $window) { - - /** - * Guacamole.SessionRecording instance to be used to playback the - * session recording given via $scope.src. If the recording has not - * yet been loaded, this will be null. - * - * @type {Guacamole.SessionRecording} - */ - $scope.recording = null; - - /** - * The current playback position, in milliseconds. If a seek request is - * in progress, this will be the desired playback position of the - * pending request. - * - * @type {!number} - */ - $scope.playbackPosition = 0; - - /** - * The key of the translation string that describes the operation - * currently running in the background, or null if no such operation is - * running. - * - * @type {string} - */ - $scope.operationMessage = null; - - /** - * The current progress toward completion of the operation running in - * the background, where 0 represents no progress and 1 represents full - * completion. If no such operation is running, this value has no - * meaning. - * - * @type {!number} - */ - $scope.operationProgress = 0; - - /** - * The position within the recording of the current seek operation, in - * milliseconds. If a seek request is not in progress, this will be - * null. - * - * @type {number} - */ - $scope.seekPosition = null; - - /** - * Any batches of text typed during the recording. - * - * @type {keyEventDisplayService.TextBatch[]} - */ - $scope.textBatches = []; - - /** - * Whether or not the key log viewer should be displayed. False by - * default unless explicitly enabled by user interaction. - * - * @type {boolean} - */ - $scope.showKeyLog = false; - - /** - * The height, in pixels, of the SVG heatmap paths. Note that this is not - * necessarily the actual rendered height, just the initial size of the - * SVG path before any styling is applied. - * - * @type {!number} - */ - $scope.HEATMAP_HEIGHT = 100; - - /** - * The width, in pixels, of the SVG heatmap paths. Note that this is not - * necessarily the actual rendered width, just the initial size of the - * SVG path before any styling is applied. - * - * @type {!number} - */ - $scope.HEATMAP_WIDTH = 1000; - - /** - * The maximum number of key events per millisecond to display in the - * key event heatmap. Any key event rates exceeding this value will be - * capped at this rate to ensure that unsually large spikes don't make - * swamp the rest of the data. - * - * Note: This is 6 keys per second (events include both presses and - * releases) - equivalent to ~88 words per minute typed. - * - * @type {!number} - */ - const KEY_EVENT_RATE_CAP = 12 / 1000; - - /** - * The maximum number of frames per millisecond to display in the - * frame heatmap. Any frame rates exceeding this value will be - * capped at this rate to ensure that unsually large spikes don't make - * swamp the rest of the data. - * - * @type {!number} - */ - const FRAME_RATE_CAP = 10 / 1000; - - /** - * An SVG path describing a smoothed curve that visualizes the relative - * number of frames rendered throughout the recording - i.e. a heatmap - * of screen updates. - * - * @type {!string} - */ - $scope.frameHeatmap = ''; - - /** - * An SVG path describing a smoothed curve that visualizes the relative - * number of key events recorded throughout the recording - i.e. a - * heatmap of key events. - * - * @type {!string} - */ - $scope.keyHeatmap = ''; - - /** - * Whether a seek request is currently in progress. A seek request is - * in progress if the user is attempting to change the current playback - * position (the user is manipulating the playback position slider). - * - * @type {boolean} - */ - var pendingSeekRequest = false; - - /** - * Whether playback should be resumed (play() should be invoked on the - * recording) once the current seek request is complete. This value - * only has meaning if a seek request is pending. - * - * @type {boolean} - */ - var resumeAfterSeekRequest = false; - - /** - * A scheduled timer to clean up the mouse activity CSS class, or null - * if no timer is scheduled. - * - * @type {number} - */ - var mouseActivityTimer = null; - - /** - * The recording-relative timestamp of each frame of the recording that - * has been processed so far. - * - * @type {!number[]} - */ - var frameTimestamps = []; - - /** - * The recording-relative timestamp of each text event that has been - * processed so far. - * - * @type {!number[]} - */ - var keyTimestamps = []; - - /** - * Return true if any batches of key event logs are available for this - * recording, or false otherwise. - * - * @return - * True if any batches of key event logs are avaiable for this - * recording, or false otherwise. - */ - $scope.hasTextBatches = function hasTextBatches () { - return $scope.textBatches.length >= 0; - }; - - /** - * Toggle the visibility of the text key log viewer. - */ - $scope.toggleKeyLogView = function toggleKeyLogView() { - $scope.showKeyLog = !$scope.showKeyLog; - }; - - /** - * @borrows playerTimeService.formatTime - */ - $scope.formatTime = playerTimeService.formatTime; - - /** - * Pauses playback and decouples the position slider from current - * playback position, allowing the user to manipulate the slider - * without interference. Playback state will be resumed following a - * call to commitSeekRequest(). - */ - $scope.beginSeekRequest = function beginSeekRequest() { - - // If a recording is present, pause and save state if we haven't - // already done so - if ($scope.recording && !pendingSeekRequest) { - resumeAfterSeekRequest = $scope.recording.isPlaying(); - $scope.recording.pause(); - } - - // Flag seek request as in progress - pendingSeekRequest = true; - - }; - - /** - * Restores the playback state at the time beginSeekRequest() was - * called and resumes coupling between the playback position slider and - * actual playback position. - */ - $scope.commitSeekRequest = function commitSeekRequest() { - - // If a recording is present and there is an active seek request, - // restore the playback state at the time that request began and - // begin seeking to the requested position - if ($scope.recording && pendingSeekRequest) - $scope.seekToPlaybackPosition(); - - // Flag seek request as completed - pendingSeekRequest = false; - - }; - - /** - * Seek the recording to the specified position within the recording, - * in milliseconds. - * - * @param {Number} timestamp - * The position to seek to within the current record, - * in milliseconds. - */ - $scope.seekToTimestamp = function seekToTimestamp(timestamp) { - - // Set the timestamp and seek to it - $scope.playbackPosition = timestamp; - $scope.seekToPlaybackPosition(); - - }; - - /** - * Seek the recording to the current playback position value. - */ - $scope.seekToPlaybackPosition = function seekToPlaybackPosition() { - - $scope.seekPosition = null; - $scope.operationMessage = 'PLAYER.INFO_SEEK_IN_PROGRESS'; - $scope.operationProgress = 0; - - // Cancel seek when requested, updating playback position if - // that position changed - $scope.cancelOperation = function abortSeek() { - $scope.recording.cancel(); - $scope.playbackPosition = $scope.seekPosition || $scope.playbackPosition; - }; - - resumeAfterSeekRequest && $scope.recording.play(); - $scope.recording.seek($scope.playbackPosition, function seekComplete() { - $scope.seekPosition = null; - $scope.operationMessage = null; - $scope.$evalAsync(); - }); - }; - - /** - * Toggles the current playback state. If playback is currently paused, - * playback is resumed. If playback is currently active, playback is - * paused. If no recording has been loaded, this function has no - * effect. - */ - $scope.togglePlayback = function togglePlayback() { - if ($scope.recording) { - if ($scope.recording.isPlaying()) - $scope.recording.pause(); - else - $scope.recording.play(); - } - }; - - // Automatically load the requested session recording - $scope.$watch('src', function srcChanged(src) { - - // Reset position and seek state - pendingSeekRequest = false; - $scope.playbackPosition = 0; - - // Stop loading the current recording, if any - if ($scope.recording) { - $scope.recording.pause(); - $scope.recording.abort(); - } - - // If no recording is provided, reset to empty - if (!src) - $scope.recording = null; - - // Otherwise, begin loading the provided recording - else { - - $scope.recording = new Guacamole.SessionRecording(src); - - // Begin downloading the recording - $scope.recording.connect(); - - // Notify listeners and set any heatmap paths - // when the recording is completely loaded - $scope.recording.onload = function recordingLoaded() { - $scope.operationMessage = null; - $scope.$emit('guacPlayerLoaded'); - $scope.$evalAsync(); - - const recordingDuration = $scope.recording.getDuration(); - - // Generate heat maps for rendered frames and typed text - $scope.frameHeatmap = ( - playerHeatmapService.generateHeatmapPath( - frameTimestamps, recordingDuration, FRAME_RATE_CAP, - $scope.HEATMAP_HEIGHT, $scope.HEATMAP_WIDTH)); - $scope.keyHeatmap = ( - playerHeatmapService.generateHeatmapPath( - keyTimestamps, recordingDuration, KEY_EVENT_RATE_CAP, - $scope.HEATMAP_HEIGHT, $scope.HEATMAP_WIDTH)); - - }; - - // Notify listeners if an error occurs - $scope.recording.onerror = function recordingFailed(message) { - $scope.operationMessage = null; - $scope.$emit('guacPlayerError', message); - $scope.$evalAsync(); - }; - - // Notify listeners when additional recording data has been - // loaded - $scope.recording.onprogress = function recordingLoadProgressed(duration, current) { - $scope.operationProgress = src.size ? current / src.size : 0; - $scope.$emit('guacPlayerProgress', duration, current); - $scope.$evalAsync(); - - // Store the timestamp of the just-received frame - frameTimestamps.push(duration); - }; - - // Notify listeners when playback has started/resumed - $scope.recording.onplay = function playbackStarted() { - $scope.$emit('guacPlayerPlay'); - $scope.$evalAsync(); - }; - - // Notify listeners when playback has paused - $scope.recording.onpause = function playbackPaused() { - $scope.$emit('guacPlayerPause'); - $scope.$evalAsync(); - }; - - // Extract key events from the recording - $scope.recording.onkeyevents = function keyEventsReceived(events) { - - // Convert to a display-optimized format - $scope.textBatches = ( - keyEventDisplayService.parseEvents(events)); - - keyTimestamps = events.map(event => event.timestamp); - - }; - - // Notify listeners when current position within the recording - // has changed - $scope.recording.onseek = function positionChanged(position, current, total) { - - // Update current playback position while playing - if ($scope.recording.isPlaying()) - $scope.playbackPosition = position; - - // Update seek progress while seeking - else { - $scope.seekPosition = position; - $scope.operationProgress = current / total; - } - - $scope.$emit('guacPlayerSeek', position); - $scope.$evalAsync(); - - }; - - $scope.operationMessage = 'PLAYER.INFO_LOADING_RECORDING'; - $scope.operationProgress = 0; - - $scope.cancelOperation = function abortLoad() { - $scope.recording.abort(); - $scope.operationMessage = null; - }; - - $scope.$emit('guacPlayerLoading'); - - } - - }); - - // Clean up resources when player is destroyed - $scope.$on('$destroy', function playerDestroyed() { - $scope.recording.pause(); - $scope.recording.abort(); - mouseActivityTimer !== null && $window.clearTimeout(mouseActivityTimer); - }); - - /** - * Clean up the mouse movement class after no mouse activity has been - * detected for the appropriate time period. - */ - const scheduleCleanupTimeout = _.debounce(() => - mouseActivityTimer = $window.setTimeout(() => { - mouseActivityTimer = null; - $element.removeClass('recent-mouse-movement'); - }, MOUSE_CLEANUP_TIMER_DELAY), - - /* - * Only schedule the cleanup task after the mouse hasn't moved - * for a reasonable amount of time to ensure that the number of - * created cleanup timers remains reasonable. - */ - MOUSE_DEBOUNCE_DELAY); - - /* - * When the mouse moves inside the player, add a CSS class signifying - * recent mouse movement, to be automatically cleaned up after a period - * of time with no detected mouse movement. - */ - $element.on('mousemove', () => { - - // Clean up any existing cleanup timer - if (mouseActivityTimer !== null) { - $window.clearTimeout(mouseActivityTimer); - mouseActivityTimer = null; - } - - // Add the marker CSS class, and schedule its removal - $element.addClass('recent-mouse-movement'); - scheduleCleanupTimeout(); - - }); - - }]; - - return config; - -}]); diff --git a/guacamole/src/main/frontend/src/app/player/directives/playerDisplay.js b/guacamole/src/main/frontend/src/app/player/directives/playerDisplay.js deleted file mode 100644 index 114566a934..0000000000 --- a/guacamole/src/main/frontend/src/app/player/directives/playerDisplay.js +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/** - * Directive which contains a given Guacamole.Display, automatically scaling - * the display to fit available space. - */ -angular.module('player').directive('guacPlayerDisplay', [function guacPlayerDisplay() { - - const config = { - restrict : 'E', - templateUrl : 'app/player/templates/playerDisplay.html' - }; - - config.scope = { - - /** - * The Guacamole.Display instance which should be displayed within the - * directive. - * - * @type {Guacamole.Display} - */ - display : '=' - - }; - - config.controller = ['$scope', '$element', function guacPlayerDisplayController($scope, $element) { - - /** - * The root element of this instance of the guacPlayerDisplay - * directive. - * - * @type {Element} - */ - const element = $element.find('.guac-player-display')[0]; - - /** - * The element which serves as a container for the root element of the - * Guacamole.Display assigned to $scope.display. - * - * @type {HTMLDivElement} - */ - const container = $element.find('.guac-player-display-container')[0]; - - /** - * Rescales the Guacamole.Display currently assigned to $scope.display - * such that it exactly fits within this directive's available space. - * If no display is currently assigned or the assigned display is not - * at least 1x1 pixels in size, this function has no effect. - */ - $scope.fitDisplay = function fitDisplay() { - - // Ignore if no display is yet present - if (!$scope.display) - return; - - var displayWidth = $scope.display.getWidth(); - var displayHeight = $scope.display.getHeight(); - - // Ignore if the provided display is not at least 1x1 pixels - if (!displayWidth || !displayHeight) - return; - - // Fit display within available space - $scope.display.scale(Math.min(element.offsetWidth / displayWidth, - element.offsetHeight / displayHeight)); - - }; - - // Automatically add/remove the Guacamole.Display as $scope.display is - // updated - $scope.$watch('display', function displayChanged(display, oldDisplay) { - - // Clear out old display, if any - if (oldDisplay) { - container.innerHTML = ''; - oldDisplay.onresize = null; - } - - // If a new display is provided, add it to the container, keeping - // its scale in sync with changes to available space and display - // size - if (display) { - container.appendChild(display.getElement()); - display.onresize = $scope.fitDisplay; - $scope.fitDisplay(); - } - - }); - - }]; - - return config; - -}]); diff --git a/guacamole/src/main/frontend/src/app/player/directives/progressIndicator.js b/guacamole/src/main/frontend/src/app/player/directives/progressIndicator.js deleted file mode 100644 index 8a793fa7dc..0000000000 --- a/guacamole/src/main/frontend/src/app/player/directives/progressIndicator.js +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/** - * Directive which displays an indicator showing the current progress of an - * arbitrary operation. - */ -angular.module('player').directive('guacPlayerProgressIndicator', [function guacPlayerProgressIndicator() { - - const config = { - restrict : 'E', - templateUrl : 'app/player/templates/progressIndicator.html' - }; - - config.scope = { - - /** - * A value between 0 and 1 inclusive which indicates current progress, - * where 0 represents no progress and 1 represents finished. - * - * @type {Number} - */ - progress : '=' - - }; - - config.controller = ['$scope', function guacPlayerProgressIndicatorController($scope) { - - /** - * The current progress of the operation as a percentage. This value is - * automatically updated as $scope.progress changes. - * - * @type {Number} - */ - $scope.percentage = 0; - - /** - * The CSS transform which should be applied to the bar portion of the - * progress indicator. This value is automatically updated as - * $scope.progress changes. - * - * @type {String} - */ - $scope.barTransform = null; - - // Keep percentage and bar transform up-to-date with changes to - // progress value - $scope.$watch('progress', function progressChanged(progress) { - progress = progress || 0; - $scope.percentage = Math.floor(progress * 100); - $scope.barTransform = 'rotate(' + (360 * progress - 45) + 'deg)'; - }); - - }]; - - return config; - -}]); diff --git a/guacamole/src/main/frontend/src/app/player/playerModule.js b/guacamole/src/main/frontend/src/app/player/playerModule.js deleted file mode 100644 index c3bf3ea4ad..0000000000 --- a/guacamole/src/main/frontend/src/app/player/playerModule.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/** - * Module providing in-browser playback of session recordings. - */ -angular.module('player', [ - 'element' -]); diff --git a/guacamole/src/main/frontend/src/app/player/styles/player.css b/guacamole/src/main/frontend/src/app/player/styles/player.css deleted file mode 100644 index a1566810a3..0000000000 --- a/guacamole/src/main/frontend/src/app/player/styles/player.css +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -guac-player { - display: inline-block; - position: relative; -} - -guac-player .guac-player-display { - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -guac-player .guac-player-controls { - - position: absolute; - padding-bottom: 0; - left: 0; - bottom: 0; - width: 100%; - -} - -.guac-player-controls .guac-player-seek { - display: block; - width: 100%; -} - -.guac-player-controls .guac-player-play, -.guac-player-controls .guac-player-pause { - color: white; - background: transparent; - border: none; - width: 2em; - height: 2em; - min-width: 0; - padding: 0; - margin: 0; -} - -.guac-player-controls .guac-player-play:hover, -.guac-player-controls .guac-player-pause:hover { - background: rgba(255, 255, 255, 0.5); -} - -.guac-player-controls .pause-icon, -.guac-player-controls .play-icon { - display: inline-block; - width: 2em; - height: 2em; - background-size: contain; - background-position: center; - background-repeat: no-repeat; - vertical-align: middle; -} - -.guac-player-controls .play-icon { - background-image: url('images/action-icons/guac-play.svg'); -} - -.guac-player-controls .pause-icon { - background-image: url('images/action-icons/guac-pause.svg'); -} - -.guac-player-controls .guac-player-buttons { - display: flex; - flex-direction: row; - align-items: center; -} - -.guac-player-controls .guac-player-keys { - margin-left: auto; - padding-right: 0.5em; - cursor: pointer; -} - -guac-player .guac-player-status { - - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - - background: rgba(0, 0, 0, 0.5); - z-index: 1; - - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - - -webkit-box-align: center; - -webkit-align-items: center; - -moz-box-align: center; - -ms-flex-align: center; - align-items: center; - - -webkit-box-pack: center; - -webkit-justify-content: center; - -moz-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -moz-box-orient: vertical; - -moz-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -} - -.guac-player-container { - - height: 100%; - - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - - -ms-flex-pack: space-between; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - justify-content: space-between; - -} - -guac-player-display { - - flex-grow: 5; - - /* Required for horizontal resizing to work */ - min-width: 0; - -} - -guac-player-text-view { - - min-width: 25em; - flex-basis: 0; - - /* Make room for the control bar at the bottom */ - height: calc(100% - 48px); - -} - -guac-player-text-view.fullscreen { - - min-width: 100%; - -} - diff --git a/guacamole/src/main/frontend/src/app/player/styles/playerDisplay.css b/guacamole/src/main/frontend/src/app/player/styles/playerDisplay.css deleted file mode 100644 index c17cd4d652..0000000000 --- a/guacamole/src/main/frontend/src/app/player/styles/playerDisplay.css +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -.guac-player-display { - - position: relative; - - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - - -webkit-box-align: center; - -webkit-align-items: center; - -moz-box-align: center; - -ms-flex-align: center; - align-items: center; - - -webkit-box-pack: center; - -webkit-justify-content: center; - -moz-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -} - -.guac-player-display .guac-player-display-container { - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - -moz-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; -} diff --git a/guacamole/src/main/frontend/src/app/player/styles/progressIndicator.css b/guacamole/src/main/frontend/src/app/player/styles/progressIndicator.css deleted file mode 100644 index 7d8c35e5eb..0000000000 --- a/guacamole/src/main/frontend/src/app/player/styles/progressIndicator.css +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -guac-player-progress-indicator { - - width: 128px; - height: 128px; - - position: relative; - - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - - -webkit-box-align: center; - -webkit-align-items: center; - -moz-box-align: center; - -ms-flex-align: center; - align-items: center; - - -webkit-box-pack: center; - -webkit-justify-content: center; - -moz-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -} - -guac-player-progress-indicator .guac-player-progress-text { - font-size: 2em; - font-weight: bold; -} - -guac-player-progress-indicator .guac-player-progress-bar-container { - - position: absolute; - right: 0; - top: 0; - width: 50%; - height: 100%; - overflow: hidden; - -} - -guac-player-progress-indicator .guac-player-progress-bar-container.past-halfway { - overflow: visible; -} - -guac-player-progress-indicator .guac-player-progress-bar-container.past-halfway::before, -guac-player-progress-indicator .guac-player-progress-bar { - - position: absolute; - left: -64px; - top: 0; - width: 128px; - height: 128px; - - -webkit-border-radius: 128px; - -moz-border-radius: 128px; - border-radius: 128px; - - border: 12px solid #5AF; - border-bottom-color: transparent; - border-right-color: transparent; - -} - -guac-player-progress-indicator .guac-player-progress-bar-container.past-halfway::before { - - content: ' '; - display: block; - box-sizing: border-box; - - -webkit-transform: rotate(135deg); - -moz-transform: rotate(135deg); - -ms-transform: rotate(135deg); - -o-transform: rotate(135deg); - transform: rotate(135deg); - -} diff --git a/guacamole/src/main/frontend/src/app/player/styles/seek.css b/guacamole/src/main/frontend/src/app/player/styles/seek.css deleted file mode 100644 index 4b41f3a0a1..0000000000 --- a/guacamole/src/main/frontend/src/app/player/styles/seek.css +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/* - * General (not browser-specific) - */ - -input[type="range"] { - background: transparent; - width: 100%; - margin: 0; -} - -input[type="range"]:focus { - outline: none; -} - -/* - * WebKit - */ - -input[type="range"] { - -webkit-appearance: none; -} - -input[type="range"]::-webkit-slider-runnable-track { - - border: none; - border-radius: 0; - background: #5AF; - - width: 100%; - height: 0.5em; - - cursor: pointer; - -} - -input[type="range"]::-webkit-slider-thumb { - - border: none; - border-radius: 0; - background: white; - - width: 3px; - height: 0.5em; - - -webkit-appearance: none; - cursor: pointer; - -} - -input[type="range"]:focus::-webkit-slider-runnable-track { - background: #5AF; -} - -/* - * Firefox - */ - -input[type="range"]::-moz-range-track { - - border: none; - border-radius: 0; - background: #5AF; - - width: 100%; - height: 0.5em; - - cursor: pointer; - -} - -input[type="range"]::-moz-range-thumb { - - border: none; - border-radius: 0; - background: white; - - width: 3px; - height: 0.5em; - - cursor: pointer; - -} - -/* - * Internet Explorer - */ - -input[type="range"]::-ms-track { - - width: 100%; - height: 0.5em; - margin: 0; - - border: none; - border-radius: 0; - background: transparent; - color: transparent; - - cursor: pointer; - -} - -input[type="range"]::-ms-thumb { - - border: none; - border-radius: 0; - background: white; - - width: 3px; - height: 0.5em; - margin: 0; - - cursor: pointer; - -} - -input[type="range"]::-ms-fill-lower, -input[type="range"]::-ms-fill-upper, -input[type="range"]:focus::-ms-fill-lower, -input[type="range"]:focus::-ms-fill-upper { - border: none; - border-radius: 0; - background: #5AF; -} diff --git a/guacamole/src/main/frontend/src/app/player/templates/player.html b/guacamole/src/main/frontend/src/app/player/templates/player.html deleted file mode 100644 index f002bd42ca..0000000000 --- a/guacamole/src/main/frontend/src/app/player/templates/player.html +++ /dev/null @@ -1,83 +0,0 @@ -
    - - - - - - - -
    - - -
    - - - - -
    - - - - - - - - -
    - {{ 'PLAYER.INFO_FRAME_EVENTS_LEGEND' | translate }} - {{ 'PLAYER.INFO_KEY_EVENTS_LEGEND' | translate }} -
    -
    - -
    - - - - - - - - - - {{ formatTime(playbackPosition) }} / {{ formatTime(recording.getDuration()) }} - - - - {{ 'PLAYER.ACTION_SHOW_KEY_LOG' | translate }} - - - - {{ 'PLAYER.INFO_NO_KEY_LOG' | translate }} - -
    - -
    - - -
    - -

    - -
    diff --git a/guacamole/src/main/frontend/src/app/player/templates/playerDisplay.html b/guacamole/src/main/frontend/src/app/player/templates/playerDisplay.html deleted file mode 100644 index 606afafcbe..0000000000 --- a/guacamole/src/main/frontend/src/app/player/templates/playerDisplay.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -
    -
    diff --git a/guacamole/src/main/frontend/src/app/player/templates/progressIndicator.html b/guacamole/src/main/frontend/src/app/player/templates/progressIndicator.html deleted file mode 100644 index 38c9768938..0000000000 --- a/guacamole/src/main/frontend/src/app/player/templates/progressIndicator.html +++ /dev/null @@ -1,12 +0,0 @@ -
    {{ percentage }}%
    -
    -
    -
    diff --git a/guacamole/src/main/frontend/src/app/rest/restModule.js b/guacamole/src/main/frontend/src/app/rest/restModule.js deleted file mode 100644 index 23901c07c0..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/restModule.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for code relating to communication with the REST API of the - * Guacamole web application. - */ -angular.module('rest', [ - 'auth', - 'locale' -]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/activeConnectionService.js b/guacamole/src/main/frontend/src/app/rest/services/activeConnectionService.js deleted file mode 100644 index 327153b3bb..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/activeConnectionService.js +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on active connections via the REST API. - */ -angular.module('rest').factory('activeConnectionService', ['$injector', - function activeConnectionService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - - var service = {}; - - /** - * Makes a request to the REST API to get a single active connection, - * returning a promise that provides the corresponding - * @link{ActiveConnection} if successful. - * - * @param {String} dataSource - * The identifier of the data source to retrieve the active connection - * from. - * - * @param {String} id - * The identifier of the active connection. - * - * @returns {Promise.} - * A promise which will resolve with a @link{ActiveConnection} upon - * success. - */ - service.getActiveConnection = function getActiveConnection(dataSource, id) { - - // Retrieve active connection - return authenticationService.request({ - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections/' + encodeURIComponent(id) - }); - - }; - - /** - * Makes a request to the REST API to get the list of active tunnels, - * returning a promise that provides a map of @link{ActiveConnection} - * objects if successful. - * - * @param {String[]} [permissionTypes] - * The set of permissions to filter with. A user must have one or more - * of these permissions for an active connection to appear in the - * result. If null, no filtering will be performed. Valid values are - * listed within PermissionSet.ObjectType. - * - * @returns {Promise.>} - * A promise which will resolve with a map of @link{ActiveConnection} - * objects, where each key is the identifier of the corresponding - * active connection. - */ - service.getActiveConnections = function getActiveConnections(dataSource, permissionTypes) { - - // Add permission filter if specified - var httpParameters = {}; - if (permissionTypes) - httpParameters.permission = permissionTypes; - - // Retrieve tunnels - return authenticationService.request({ - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections', - params : httpParameters - }); - - }; - - /** - * Makes a request to the REST API to delete the active connections having - * the given identifiers, effectively disconnecting them, returning a - * promise that can be used for processing the results of the call. - * - * @param {String[]} identifiers - * The identifiers of the active connections to delete. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * delete operation is successful. - */ - service.deleteActiveConnections = function deleteActiveConnections(dataSource, identifiers) { - - // Convert provided array of identifiers to a patch - var activeConnectionPatch = []; - identifiers.forEach(function addActiveConnectionPatch(identifier) { - activeConnectionPatch.push({ - op : 'remove', - path : '/' + identifier - }); - }); - - // Perform active connection deletion via PATCH - return authenticationService.request({ - method : 'PATCH', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections', - data : activeConnectionPatch - }); - - }; - - /** - * Makes a request to the REST API to generate credentials which have - * access strictly to the given active connection, using the restrictions - * defined by the given sharing profile, returning a promise that provides - * the resulting @link{UserCredentials} object if successful. - * - * @param {String} id - * The identifier of the active connection being shared. - * - * @param {String} sharingProfile - * The identifier of the sharing profile dictating the - * semantics/restrictions which apply to the shared session. - * - * @returns {Promise.} - * A promise which will resolve with a @link{UserCredentials} object - * upon success. - */ - service.getSharingCredentials = function getSharingCredentials(dataSource, id, sharingProfile) { - - // Generate sharing credentials - return authenticationService.request({ - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) - + '/activeConnections/' + encodeURIComponent(id) - + '/sharingCredentials/' + encodeURIComponent(sharingProfile) - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/cacheService.js b/guacamole/src/main/frontend/src/app/rest/services/cacheService.js deleted file mode 100644 index 9a32004d3f..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/cacheService.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which contains all REST API response caches. - */ -angular.module('rest').factory('cacheService', ['$injector', - function cacheService($injector) { - - // Required services - var $cacheFactory = $injector.get('$cacheFactory'); - var $rootScope = $injector.get('$rootScope'); - - // Service containing all caches - var service = {}; - - /** - * Shared cache used by both connectionGroupService and - * connectionService. - * - * @type $cacheFactory.Cache - */ - service.connections = $cacheFactory('API-CONNECTIONS'); - - /** - * Cache used by languageService. - * - * @type $cacheFactory.Cache - */ - service.languages = $cacheFactory('API-LANGUAGES'); - - /** - * Cache used by patchService. - * - * @type $cacheFactory.Cache - */ - service.patches = $cacheFactory('API-PATCHES'); - - /** - * Cache used by schemaService. - * - * @type $cacheFactory.Cache - */ - service.schema = $cacheFactory('API-SCHEMA'); - - /** - * Shared cache used by userService, userGroupService, permissionService, - * and membershipService. - * - * @type $cacheFactory.Cache - */ - service.users = $cacheFactory('API-USERS'); - - /** - * Clear all caches defined in this service. - */ - service.clearCaches = function clearCaches() { - service.connections.removeAll(); - service.languages.removeAll(); - service.schema.removeAll(); - service.users.removeAll(); - }; - - // Clear caches on logout - $rootScope.$on('guacLogout', function handleLogout() { - service.clearCaches(); - }); - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/connectionGroupService.js b/guacamole/src/main/frontend/src/app/rest/services/connectionGroupService.js deleted file mode 100644 index ecfdee4f16..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/connectionGroupService.js +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on connection groups via the REST API. - */ -angular.module('rest').factory('connectionGroupService', ['$injector', - function connectionGroupService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - // Required types - var ConnectionGroup = $injector.get('ConnectionGroup'); - - var service = {}; - - /** - * Makes a request to the REST API to get an individual connection group - * and all descendants, returning a promise that provides the corresponding - * @link{ConnectionGroup} if successful. Descendant groups and connections - * will be stored as children of that connection group. If a permission - * type is specified, the result will be filtering by that permission. - * - * @param {String} [connectionGroupID=ConnectionGroup.ROOT_IDENTIFIER] - * The ID of the connection group to retrieve. If not provided, the - * root connection group will be retrieved by default. - * - * @param {String[]} [permissionTypes] - * The set of permissions to filter with. A user must have one or more - * of these permissions for a connection to appear in the result. - * If null, no filtering will be performed. Valid values are listed - * within PermissionSet.ObjectType. - * - * @returns {Promise.ConnectionGroup} - * A promise which will resolve with a @link{ConnectionGroup} upon - * success. - */ - service.getConnectionGroupTree = function getConnectionGroupTree(dataSource, connectionGroupID, permissionTypes) { - - // Use the root connection group ID if no ID is passed in - connectionGroupID = connectionGroupID || ConnectionGroup.ROOT_IDENTIFIER; - - // Add permission filter if specified - var httpParameters = {}; - if (permissionTypes) - httpParameters.permission = permissionTypes; - - // Retrieve connection group - return authenticationService.request({ - cache : cacheService.connections, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroupID) + '/tree', - params : httpParameters - }); - - }; - - /** - * Makes a request to the REST API to get an individual connection group, - * returning a promise that provides the corresponding - * @link{ConnectionGroup} if successful. - * - * @param {String} [connectionGroupID=ConnectionGroup.ROOT_IDENTIFIER] - * The ID of the connection group to retrieve. If not provided, the - * root connection group will be retrieved by default. - * - * @returns {Promise.} A promise for the HTTP call. - * A promise which will resolve with a @link{ConnectionGroup} upon - * success. - */ - service.getConnectionGroup = function getConnectionGroup(dataSource, connectionGroupID) { - - // Use the root connection group ID if no ID is passed in - connectionGroupID = connectionGroupID || ConnectionGroup.ROOT_IDENTIFIER; - - // Retrieve connection group - return authenticationService.request({ - cache : cacheService.connections, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroupID) - }); - - }; - - /** - * Makes a request to the REST API to save a connection group, returning a - * promise that can be used for processing the results of the call. If the - * connection group is new, and thus does not yet have an associated - * identifier, the identifier will be automatically set in the provided - * connection group upon success. - * - * @param {ConnectionGroup} connectionGroup The connection group to update. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * save operation is successful. - */ - service.saveConnectionGroup = function saveConnectionGroup(dataSource, connectionGroup) { - - // If connection group is new, add it and set the identifier automatically - if (!connectionGroup.identifier) { - return authenticationService.request({ - method : 'POST', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups', - data : connectionGroup - }) - - // Set the identifier on the new connection group and clear the cache - .then(function connectionGroupCreated(newConnectionGroup){ - connectionGroup.identifier = newConnectionGroup.identifier; - cacheService.connections.removeAll(); - - // Clear users cache to force reload of permissions for this - // newly created connection group - cacheService.users.removeAll(); - }); - } - - // Otherwise, update the existing connection group - else { - return authenticationService.request({ - method : 'PUT', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroup.identifier), - data : connectionGroup - }) - - // Clear the cache - .then(function connectionGroupUpdated(){ - cacheService.connections.removeAll(); - - // Clear users cache to force reload of permissions for this - // newly updated connection group - cacheService.users.removeAll(); - }); - } - - }; - - /** - * Makes a request to the REST API to delete a connection group, returning - * a promise that can be used for processing the results of the call. - * - * @param {ConnectionGroup} connectionGroup The connection group to delete. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * delete operation is successful. - */ - service.deleteConnectionGroup = function deleteConnectionGroup(dataSource, connectionGroup) { - - // Delete connection group - return authenticationService.request({ - method : 'DELETE', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroup.identifier) - }) - - // Clear the cache - .then(function connectionGroupDeleted(){ - cacheService.connections.removeAll(); - }); - - }; - - return service; -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/connectionService.js b/guacamole/src/main/frontend/src/app/rest/services/connectionService.js deleted file mode 100644 index 9d41db6da1..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/connectionService.js +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on connections via the REST API. - */ -angular.module('rest').factory('connectionService', ['$injector', - function connectionService($injector) { - - // Required services - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - var service = {}; - - /** - * Makes a request to the REST API to get a single connection, returning a - * promise that provides the corresponding @link{Connection} if successful. - * - * @param {String} id The ID of the connection. - * - * @returns {Promise.} - * A promise which will resolve with a @link{Connection} upon success. - * - * @example - * - * connectionService.getConnection('myConnection').then(function(connection) { - * // Do something with the connection - * }); - */ - service.getConnection = function getConnection(dataSource, id) { - - // Retrieve connection - return authenticationService.request({ - cache : cacheService.connections, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) - }); - - }; - - /** - * Makes a request to the REST API to get the usage history of a single - * connection, returning a promise that provides the corresponding - * array of @link{ConnectionHistoryEntry} objects if successful. - * - * @param {String} id - * The identifier of the connection. - * - * @returns {Promise.} - * A promise which will resolve with an array of - * @link{ConnectionHistoryEntry} objects upon success. - */ - service.getConnectionHistory = function getConnectionHistory(dataSource, id) { - - // Retrieve connection history - return authenticationService.request({ - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) + '/history' - }); - - }; - - /** - * Makes a request to the REST API to get the parameters of a single - * connection, returning a promise that provides the corresponding - * map of parameter name/value pairs if successful. - * - * @param {String} id - * The identifier of the connection. - * - * @returns {Promise.>} - * A promise which will resolve with an map of parameter name/value - * pairs upon success. - */ - service.getConnectionParameters = function getConnectionParameters(dataSource, id) { - - // Retrieve connection parameters - return authenticationService.request({ - cache : cacheService.connections, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) + '/parameters' - }); - - }; - - /** - * Makes a request to the REST API to save a connection, returning a - * promise that can be used for processing the results of the call. If the - * connection is new, and thus does not yet have an associated identifier, - * the identifier will be automatically set in the provided connection - * upon success. - * - * @param {Connection} connection The connection to update. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * save operation is successful. - */ - service.saveConnection = function saveConnection(dataSource, connection) { - - // If connection is new, add it and set the identifier automatically - if (!connection.identifier) { - return authenticationService.request({ - method : 'POST', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections', - data : connection - }) - - // Set the identifier on the new connection and clear the cache - .then(function connectionCreated(newConnection){ - connection.identifier = newConnection.identifier; - cacheService.connections.removeAll(); - - // Clear users cache to force reload of permissions for this - // newly created connection - cacheService.users.removeAll(); - }); - } - - // Otherwise, update the existing connection - else { - return authenticationService.request({ - method : 'PUT', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(connection.identifier), - data : connection - }) - - // Clear the cache - .then(function connectionUpdated(){ - cacheService.connections.removeAll(); - - // Clear users cache to force reload of permissions for this - // newly updated connection - cacheService.users.removeAll(); - }); - } - - }; - - /** - * Makes a request to the REST API to apply a supplied list of connection - * patches, returning a promise that can be used for processing the results - * of the call. - * - * This operation is atomic - if any errors are encountered during the - * connection patching process, the entire request will fail, and no - * changes will be persisted. - * - * @param {String} dataSource - * The identifier of the data source associated with the connections to - * be patched. - * - * @param {DirectoryPatch.[]} patches - * An array of patches to apply. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * patch operation is successful. - */ - service.patchConnections = function patchConnections(dataSource, patches) { - - // Make the PATCH request - return authenticationService.request({ - method : 'PATCH', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections', - data : patches - }) - - // Clear the cache - .then(function connectionsPatched(patchResponse){ - cacheService.connections.removeAll(); - - // Clear users cache to force reload of permissions for any - // newly created or replaced connections - cacheService.users.removeAll(); - - return patchResponse; - - }); - - }; - - /** - * Makes a request to the REST API to delete a connection, - * returning a promise that can be used for processing the results of the call. - * - * @param {Connection} connection The connection to delete. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * delete operation is successful. - */ - service.deleteConnection = function deleteConnection(dataSource, connection) { - - // Delete connection - return authenticationService.request({ - method : 'DELETE', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(connection.identifier) - }) - - // Clear the cache - .then(function connectionDeleted(){ - cacheService.connections.removeAll(); - }); - - }; - - return service; -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/dataSourceService.js b/guacamole/src/main/frontend/src/app/rest/services/dataSourceService.js deleted file mode 100644 index 6405394773..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/dataSourceService.js +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which contains all REST API response caches. - */ -angular.module('rest').factory('dataSourceService', ['$injector', - function dataSourceService($injector) { - - // Required types - var Error = $injector.get('Error'); - - // Required services - var $q = $injector.get('$q'); - var requestService = $injector.get('requestService'); - - // Service containing all caches - var service = {}; - - /** - * Invokes the given function once for each of the given data sources, - * passing that data source as the first argument to each invocation, - * followed by any additional arguments passed to apply(). The results of - * each invocation are aggregated into a map by data source identifier, - * and handled through a single promise which is resolved or rejected - * depending on the success/failure of each resulting REST call. Any error - * results in rejection of the entire apply() operation, except 404 ("NOT - * FOUND") errors, which are ignored. - * - * @param {Function} fn - * The function to call for each of the given data sources. The data - * source identifier will be given as the first argument, followed by - * the rest of the arguments given to apply(), in order. The function - * must return a Promise which is resolved or rejected depending on the - * result of the REST call. - * - * @param {String[]} dataSources - * The array or data source identifiers against which the given - * function should be called. - * - * @param {...*} args - * Any additional arguments to pass to the given function each time it - * is called. - * - * @returns {Promise.>} - * A Promise which resolves with a map of data source identifier to - * corresponding result. The result will be the exact object or value - * provided as the resolution to the Promise returned by calls to the - * given function. - */ - service.apply = function apply(fn, dataSources) { - - var deferred = $q.defer(); - - var requests = []; - var results = {}; - - // Build array of arguments to pass to the given function - var args = []; - for (var i = 2; i < arguments.length; i++) - args.push(arguments[i]); - - // Retrieve the root group from all data sources - angular.forEach(dataSources, function invokeAgainstDataSource(dataSource) { - - // Add promise to list of pending requests - var deferredRequest = $q.defer(); - requests.push(deferredRequest.promise); - - // Retrieve root group from data source - fn.apply(this, [dataSource].concat(args)) - - // Store result on success - .then(function immediateRequestSucceeded(data) { - results[dataSource] = data; - deferredRequest.resolve(); - }, - - // Fail on any errors (except "NOT FOUND") - requestService.createErrorCallback(function immediateRequestFailed(error) { - - if (error.type === Error.Type.NOT_FOUND) - deferredRequest.resolve(); - - // Explicitly abort for all other errors - else - deferredRequest.reject(error); - - })); - - }); - - // Resolve if all requests succeed - $q.all(requests).then(function requestsSucceeded() { - deferred.resolve(results); - }, - - // Reject if at least one request fails - requestService.createErrorCallback(function requestFailed(error) { - deferred.reject(error); - })); - - return deferred.promise; - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/historyService.js b/guacamole/src/main/frontend/src/app/rest/services/historyService.js deleted file mode 100644 index 96291e76aa..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/historyService.js +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on history records via the REST API. - */ -angular.module('rest').factory('historyService', ['$injector', - function historyService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - - var service = {}; - - /** - * Makes a request to the REST API to get the usage history of all - * accessible connections, returning a promise that provides the - * corresponding array of @link{ConnectionHistoryEntry} objects if - * successful. - * - * @param {String} dataSource - * The unique identifier of the data source containing the connection - * history records to be retrieved. This identifier corresponds to an - * AuthenticationProvider within the Guacamole web application. - * - * @param {String[]} [requiredContents] - * The set of arbitrary strings to filter with. A ConnectionHistoryEntry - * must contain each of these values within the associated username, - * connection name, start date, or end date to appear in the result. If - * null, no filtering will be performed. - * - * @param {String[]} [sortPredicates] - * The set of predicates to sort against. The resulting array of - * ConnectionHistoryEntry objects will be sorted according to the - * properties and sort orders defined by each predicate. If null, the - * order of the resulting entries is undefined. Valid values are listed - * within ConnectionHistoryEntry.SortPredicate. - * - * @returns {Promise.} - * A promise which will resolve with an array of - * @link{ConnectionHistoryEntry} objects upon success. - */ - service.getConnectionHistory = function getConnectionHistory(dataSource, - requiredContents, sortPredicates) { - - var httpParameters = {}; - - // Filter according to contents if restrictions are specified - if (requiredContents) - httpParameters.contains = requiredContents; - - // Sort according to provided predicates, if any - if (sortPredicates) - httpParameters.order = sortPredicates; - - // Retrieve connection history - return authenticationService.request({ - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/history/connections', - params : httpParameters - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/languageService.js b/guacamole/src/main/frontend/src/app/rest/services/languageService.js deleted file mode 100644 index 8f55e2f118..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/languageService.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on language metadata via the REST API. - */ -angular.module('rest').factory('languageService', ['$injector', - function languageService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - var service = {}; - - /** - * Makes a request to the REST API to get the list of languages, returning - * a promise that provides a map of language names by language key if - * successful. - * - * @returns {Promise.>} - * A promise which will resolve with a map of language names by - * language key upon success. - */ - service.getLanguages = function getLanguages() { - - // Retrieve available languages - return authenticationService.request({ - cache : cacheService.languages, - method : 'GET', - url : 'api/languages' - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/membershipService.js b/guacamole/src/main/frontend/src/app/rest/services/membershipService.js deleted file mode 100644 index 60c5c97e3d..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/membershipService.js +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on user group memberships via the REST API. - */ -angular.module('rest').factory('membershipService', ['$injector', - function membershipService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - // Required types - var RelatedObjectPatch = $injector.get('RelatedObjectPatch'); - - var service = {}; - - /** - * Creates a new array of patches which represents the given changes to an - * arbitrary set of objects sharing some common relation. - * - * @param {String[]} [identifiersToAdd] - * The identifiers of all objects which should be added to the - * relation, if any. - * - * @param {String[]} [identifiersToRemove] - * The identifiers of all objects which should be removed from the - * relation, if any. - * - * @returns {RelatedObjectPatch[]} - * A new array of patches which represents the given changes. - */ - var getRelatedObjectPatch = function getRelatedObjectPatch(identifiersToAdd, identifiersToRemove) { - - var patch = []; - - angular.forEach(identifiersToAdd, function addIdentifier(identifier) { - patch.push(new RelatedObjectPatch({ - op : RelatedObjectPatch.Operation.ADD, - value : identifier - })); - }); - - angular.forEach(identifiersToRemove, function removeIdentifier(identifier) { - patch.push(new RelatedObjectPatch({ - op : RelatedObjectPatch.Operation.REMOVE, - value : identifier - })); - }); - - return patch; - - }; - - /** - * Returns the URL for the REST resource most appropriate for accessing - * the parent user groups of the user or group having the given identifier. - * - * It is important to note that a particular data source can authenticate - * and provide user groups for a user, even if that user does not exist - * within that data source (and thus cannot be found beneath - * "api/session/data/{dataSource}/users") - * - * @param {String} dataSource - * The unique identifier of the data source containing the user or - * group whose parent user groups should be retrieved. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @param {String} identifier - * The identifier of the user or group for which the URL of the proper - * REST resource should be derived. - * - * @param {Boolean} [group] - * Whether the provided identifier refers to a user group. If false or - * omitted, the identifier given is assumed to refer to a user. - * - * @returns {String} - * The URL for the REST resource representing the parent user groups of - * the user or group having the given identifier. - */ - var getUserGroupsResourceURL = function getUserGroupsResourceURL(dataSource, identifier, group) { - - // Create base URL for data source - var base = 'api/session/data/' + encodeURIComponent(dataSource); - - // Access parent groups directly (there is no "self" for user groups - // as there is for users) - if (group) - return base + '/userGroups/' + encodeURIComponent(identifier) + '/userGroups'; - - // If the username is that of the current user, do not rely on the - // user actually existing (they may not). Access their parent groups via - // "self" rather than the collection of defined users. - if (identifier === authenticationService.getCurrentUsername()) - return base + '/self/userGroups'; - - // Otherwise, the user must exist for their parent groups to be - // accessible. Use the collection of defined users. - return base + '/users/' + encodeURIComponent(identifier) + '/userGroups'; - - }; - - /** - * Makes a request to the REST API to retrieve the identifiers of all - * parent user groups of which a given user or group is a member, returning - * a promise that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user or - * group whose parent user groups should be retrieved. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @param {String} identifier - * The identifier of the user or group to retrieve the parent user - * groups of. - * - * @param {Boolean} [group] - * Whether the provided identifier refers to a user group. If false or - * omitted, the identifier given is assumed to refer to a user. - * - * @returns {Promise.} - * A promise for the HTTP call which will resolve with an array - * containing the requested identifiers upon success. - */ - service.getUserGroups = function getUserGroups(dataSource, identifier, group) { - - // Retrieve parent groups - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : getUserGroupsResourceURL(dataSource, identifier, group) - }); - - }; - - /** - * Makes a request to the REST API to modify the parent user groups of - * which a given user or group is a member, returning a promise that can be - * used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user or - * group whose parent user groups should be modified. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @param {String} identifier - * The identifier of the user or group to modify the parent user - * groups of. - * - * @param {String[]} [addToUserGroups] - * The identifier of all parent user groups to which the given user or - * group should be added as a member, if any. - * - * @param {String[]} [removeFromUserGroups] - * The identifier of all parent user groups from which the given member - * user or group should be removed, if any. - * - * @param {Boolean} [group] - * Whether the provided identifier refers to a user group. If false or - * omitted, the identifier given is assumed to refer to a user. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * patch operation is successful. - */ - service.patchUserGroups = function patchUserGroups(dataSource, identifier, - addToUserGroups, removeFromUserGroups, group) { - - // Update parent user groups - return authenticationService.request({ - method : 'PATCH', - url : getUserGroupsResourceURL(dataSource, identifier, group), - data : getRelatedObjectPatch(addToUserGroups, removeFromUserGroups) - }) - - // Clear the cache - .then(function parentUserGroupsChanged(){ - cacheService.users.removeAll(); - }); - - }; - - /** - * Makes a request to the REST API to retrieve the identifiers of all - * users which are members of the given user group, returning a promise - * that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group - * whose member users should be retrieved. This identifier corresponds - * to an AuthenticationProvider within the Guacamole web application. - * - * @param {String} identifier - * The identifier of the user group to retrieve the member users of. - * - * @returns {Promise.} - * A promise for the HTTP call which will resolve with an array - * containing the requested identifiers upon success. - */ - service.getMemberUsers = function getMemberUsers(dataSource, identifier) { - - // Retrieve member users - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUsers' - }); - - }; - - /** - * Makes a request to the REST API to modify the member users of a given - * user group, returning a promise that can be used for processing the - * results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group - * whose member users should be modified. This identifier corresponds - * to an AuthenticationProvider within the Guacamole web application. - * - * @param {String} identifier - * The identifier of the user group to modify the member users of. - * - * @param {String[]} [usersToAdd] - * The identifier of all users to add as members of the given user - * group, if any. - * - * @param {String[]} [usersToRemove] - * The identifier of all users to remove from the given user group, - * if any. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * patch operation is successful. - */ - service.patchMemberUsers = function patchMemberUsers(dataSource, identifier, - usersToAdd, usersToRemove) { - - // Update member users - return authenticationService.request({ - method : 'PATCH', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUsers', - data : getRelatedObjectPatch(usersToAdd, usersToRemove) - }) - - // Clear the cache - .then(function memberUsersChanged(){ - cacheService.users.removeAll(); - }); - - }; - - /** - * Makes a request to the REST API to retrieve the identifiers of all - * user groups which are members of the given user group, returning a - * promise that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group - * whose member user groups should be retrieved. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @param {String} identifier - * The identifier of the user group to retrieve the member user - * groups of. - * - * @returns {Promise.} - * A promise for the HTTP call which will resolve with an array - * containing the requested identifiers upon success. - */ - service.getMemberUserGroups = function getMemberUserGroups(dataSource, identifier) { - - // Retrieve member user groups - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUserGroups' - }); - - }; - - /** - * Makes a request to the REST API to modify the member user groups of a - * given user group, returning a promise that can be used for processing - * the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group - * whose member user groups should be modified. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @param {String} identifier - * The identifier of the user group to modify the member user groups of. - * - * @param {String[]} [userGroupsToAdd] - * The identifier of all user groups to add as members of the given - * user group, if any. - * - * @param {String[]} [userGroupsToRemove] - * The identifier of all member user groups to remove from the given - * user group, if any. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * patch operation is successful. - */ - service.patchMemberUserGroups = function patchMemberUserGroups(dataSource, - identifier, userGroupsToAdd, userGroupsToRemove) { - - // Update member user groups - return authenticationService.request({ - method : 'PATCH', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUserGroups', - data : getRelatedObjectPatch(userGroupsToAdd, userGroupsToRemove) - }) - - // Clear the cache - .then(function memberUserGroupsChanged(){ - cacheService.users.removeAll(); - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/patchService.js b/guacamole/src/main/frontend/src/app/rest/services/patchService.js deleted file mode 100644 index ea06e5b402..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/patchService.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on HTML patches via the REST API. - */ -angular.module('rest').factory('patchService', ['$injector', - function patchService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var cacheService = $injector.get('cacheService'); - - var service = {}; - - /** - * Makes a request to the REST API to get the list of patches, returning - * a promise that provides the array of all applicable patches if - * successful. Each patch is a string of raw HTML with meta information - * describing the patch operation stored within meta tags. - * - * @returns {Promise.} - * A promise which will resolve with an array of HTML patches upon - * success. - */ - service.getPatches = function getPatches() { - - // Retrieve all applicable HTML patches - return requestService({ - cache : cacheService.patches, - method : 'GET', - url : 'api/patches' - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/permissionService.js b/guacamole/src/main/frontend/src/app/rest/services/permissionService.js deleted file mode 100644 index ac09fa1dff..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/permissionService.js +++ /dev/null @@ -1,345 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on user permissions via the REST API. - */ -angular.module('rest').factory('permissionService', ['$injector', - function permissionService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - // Required types - var PermissionPatch = $injector.get('PermissionPatch'); - - var service = {}; - - /** - * Returns the URL for the REST resource most appropriate for accessing - * the effective permissions of the user having the given username. - * Effective permissions differ from the permissions returned via - * getPermissions() in that permissions which are not directly granted to - * the user are included. - * - * It is important to note that a particular data source can authenticate - * and provide permissions for a user, even if that user does not exist - * within that data source (and thus cannot be found beneath - * "api/session/data/{dataSource}/users") - * - * NOTE: Unlike getPermissionsResourceURL(), - * getEffectivePermissionsResourceURL() CANNOT be applied to user groups. - * Only users have retrievable effective permissions as far as the REST API - * is concerned. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user whose - * permissions should be retrieved. This identifier corresponds to an - * AuthenticationProvider within the Guacamole web application. - * - * @param {String} username - * The username of the user for which the URL of the proper REST - * resource should be derived. - * - * @returns {String} - * The URL for the REST resource representing the user having the given - * username. - */ - var getEffectivePermissionsResourceURL = function getEffectivePermissionsResourceURL(dataSource, username) { - - // Create base URL for data source - var base = 'api/session/data/' + encodeURIComponent(dataSource); - - // If the username is that of the current user, do not rely on the - // user actually existing (they may not). Access their permissions via - // "self" rather than the collection of defined users. - if (username === authenticationService.getCurrentUsername()) - return base + '/self/effectivePermissions'; - - // Otherwise, the user must exist for their permissions to be - // accessible. Use the collection of defined users. - return base + '/users/' + encodeURIComponent(username) + '/effectivePermissions'; - - }; - - /** - * Makes a request to the REST API to get the list of effective permissions - * for a given user, returning a promise that provides an array of - * @link{Permission} objects if successful. Effective permissions differ - * from the permissions returned via getPermissions() in that permissions - * which are not directly granted to the user are included. - * - * NOTE: Unlike getPermissions(), getEffectivePermissions() CANNOT be - * applied to user groups. Only users have retrievable effective - * permissions as far as the REST API is concerned. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user whose - * permissions should be retrieved. This identifier corresponds to an - * AuthenticationProvider within the Guacamole web application. - * - * @param {String} userID - * The ID of the user to retrieve the permissions for. - * - * @returns {Promise.} - * A promise which will resolve with a @link{PermissionSet} upon - * success. - */ - service.getEffectivePermissions = function getEffectivePermissions(dataSource, userID) { - - // Retrieve user permissions - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : getEffectivePermissionsResourceURL(dataSource, userID) - }); - - }; - - /** - * Returns the URL for the REST resource most appropriate for accessing - * the permissions of the user or group having the given identifier. The - * permissions retrieved differ from effective permissions (those returned - * by getEffectivePermissions()) in that only permissions which are directly - * granted to the user or group are included. - * - * It is important to note that a particular data source can authenticate - * and provide permissions for a user, even if that user does not exist - * within that data source (and thus cannot be found beneath - * "api/session/data/{dataSource}/users") - * - * @param {String} dataSource - * The unique identifier of the data source containing the user whose - * permissions should be retrieved. This identifier corresponds to an - * AuthenticationProvider within the Guacamole web application. - * - * @param {String} identifier - * The identifier of the user or group for which the URL of the proper - * REST resource should be derived. - * - * @param {Boolean} [group] - * Whether the provided identifier refers to a user group. If false or - * omitted, the identifier given is assumed to refer to a user. - * - * @returns {String} - * The URL for the REST resource representing the user or group having - * the given identifier. - */ - var getPermissionsResourceURL = function getPermissionsResourceURL(dataSource, identifier, group) { - - // Create base URL for data source - var base = 'api/session/data/' + encodeURIComponent(dataSource); - - // Access group permissions directly (there is no "self" for user groups - // as there is for users) - if (group) - return base + '/userGroups/' + encodeURIComponent(identifier) + '/permissions'; - - // If the username is that of the current user, do not rely on the - // user actually existing (they may not). Access their permissions via - // "self" rather than the collection of defined users. - if (identifier === authenticationService.getCurrentUsername()) - return base + '/self/permissions'; - - // Otherwise, the user must exist for their permissions to be - // accessible. Use the collection of defined users. - return base + '/users/' + encodeURIComponent(identifier) + '/permissions'; - - }; - - /** - * Makes a request to the REST API to get the list of permissions for a - * given user or user group, returning a promise that provides an array of - * @link{Permission} objects if successful. The permissions retrieved - * differ from effective permissions (those returned by - * getEffectivePermissions()) in that both users and groups may be queried, - * and only permissions which are directly granted to the user or group are - * included. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user or group - * whose permissions should be retrieved. This identifier corresponds to - * an AuthenticationProvider within the Guacamole web application. - * - * @param {String} identifier - * The identifier of the user or group to retrieve the permissions for. - * - * @param {Boolean} [group] - * Whether the provided identifier refers to a user group. If false or - * omitted, the identifier given is assumed to refer to a user. - * - * @returns {Promise.} - * A promise which will resolve with a @link{PermissionSet} upon - * success. - */ - service.getPermissions = function getPermissions(dataSource, identifier, group) { - - // Retrieve user/group permissions - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : getPermissionsResourceURL(dataSource, identifier, group) - }); - - }; - - /** - * Adds patches for modifying the permissions associated with specific - * objects to the given array of patches. - * - * @param {PermissionPatch[]} patch - * The array of patches to add new patches to. - * - * @param {String} operation - * The operation to specify within each of the patches. Valid values - * for this are defined within PermissionPatch.Operation. - * - * @param {String} path - * The path of the permissions being patched. The path is a JSON path - * describing the position of the permissions within a PermissionSet. - * - * @param {Object.} permissions - * A map of object identifiers to arrays of permission type strings, - * where each type string is a value from - * PermissionSet.ObjectPermissionType. - */ - var addObjectPatchOperations = function addObjectPatchOperations(patch, operation, path, permissions) { - - // Add object permission operations to patch - for (var identifier in permissions) { - permissions[identifier].forEach(function addObjectPatch(type) { - patch.push({ - op : operation, - path : path + "/" + identifier, - value : type - }); - }); - } - - }; - - /** - * Adds patches for modifying any permission that can be stored within a - * @link{PermissionSet}. - * - * @param {PermissionPatch[]} patch - * The array of patches to add new patches to. - * - * @param {String} operation - * The operation to specify within each of the patches. Valid values - * for this are defined within PermissionPatch.Operation. - * - * @param {PermissionSet} permissions - * The set of permissions for which patches should be added. - */ - var addPatchOperations = function addPatchOperations(patch, operation, permissions) { - - // Add connection permission operations to patch - addObjectPatchOperations(patch, operation, "/connectionPermissions", - permissions.connectionPermissions); - - // Add connection group permission operations to patch - addObjectPatchOperations(patch, operation, "/connectionGroupPermissions", - permissions.connectionGroupPermissions); - - // Add sharing profile permission operations to patch - addObjectPatchOperations(patch, operation, "/sharingProfilePermissions", - permissions.sharingProfilePermissions); - - // Add active connection permission operations to patch - addObjectPatchOperations(patch, operation, "/activeConnectionPermissions", - permissions.activeConnectionPermissions); - - // Add user permission operations to patch - addObjectPatchOperations(patch, operation, "/userPermissions", - permissions.userPermissions); - - // Add user group permission operations to patch - addObjectPatchOperations(patch, operation, "/userGroupPermissions", - permissions.userGroupPermissions); - - // Add system operations to patch - permissions.systemPermissions.forEach(function addSystemPatch(type) { - patch.push({ - op : operation, - path : "/systemPermissions", - value : type - }); - }); - - }; - - /** - * Makes a request to the REST API to modify the permissions for a given - * user or group, returning a promise that can be used for processing the - * results of the call. This request affects only the permissions directly - * granted to the user or group, and may not affect permissions inherited - * through other means (effective permissions). - * - * @param {String} dataSource - * The unique identifier of the data source containing the user or group - * whose permissions should be modified. This identifier corresponds to - * an AuthenticationProvider within the Guacamole web application. - * - * @param {String} identifier - * The identifier of the user or group to modify the permissions of. - * - * @param {PermissionSet} [permissionsToAdd] - * The set of permissions to add, if any. - * - * @param {PermissionSet} [permissionsToRemove] - * The set of permissions to remove, if any. - * - * @param {Boolean} [group] - * Whether the provided identifier refers to a user group. If false or - * omitted, the identifier given is assumed to refer to a user. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * patch operation is successful. - */ - service.patchPermissions = function patchPermissions(dataSource, identifier, - permissionsToAdd, permissionsToRemove, group) { - - var permissionPatch = []; - - // Add all the add operations to the patch - addPatchOperations(permissionPatch, PermissionPatch.Operation.ADD, permissionsToAdd); - - // Add all the remove operations to the patch - addPatchOperations(permissionPatch, PermissionPatch.Operation.REMOVE, permissionsToRemove); - - // Patch user/group permissions - return authenticationService.request({ - method : 'PATCH', - url : getPermissionsResourceURL(dataSource, identifier, group), - data : permissionPatch - }) - - // Clear the cache - .then(function permissionsPatched(){ - cacheService.users.removeAll(); - }); - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/requestService.js b/guacamole/src/main/frontend/src/app/rest/services/requestService.js deleted file mode 100644 index ead13320c4..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/requestService.js +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for converting $http promises that pass the entire response into - * promises that pass only the data from that response. - */ -angular.module('rest').factory('requestService', ['$injector', - function requestService($injector) { - - // Required services - var $http = $injector.get('$http'); - var $log = $injector.get('$log'); - var $rootScope = $injector.get('$rootScope'); - - // Required types - var Error = $injector.get('Error'); - - /** - * Given a configuration object formatted for the $http service, returns - * a promise that will resolve or reject with the data from the HTTP - * response. If the promise is rejected due to the HTTP response indicating - * failure, the promise will be rejected strictly with an instance of an - * @link{Error} object. - * - * @param {Object} object - * Configuration object for $http service call. - * - * @returns {Promise.} - * A promise that will resolve with the data from the HTTP response for - * the underlying $http call if successful, or reject with an @link{Error} - * describing the failure. - */ - var service = function wrapHttpServiceCall(object) { - return $http(object).then( - function success(response) { return response.data; }, - function failure(response) { - - // Wrap true error responses from $http within REST Error objects - if (response.data) - throw new Error(response.data); - - // Fall back to a generic internal error if the request couldn't - // even be issued (webapp is down, etc.) - else if ('data' in response) - throw new Error({ message : 'Unknown failure sending HTTP request' }); - - // The value provided is not actually a response object from - // the $http service - throw response; - - } - ); - }; - - /** - * Creates a promise error callback which invokes the given callback only - * if the promise was rejected with a REST @link{Error} object. If the - * promise is rejected without an @link{Error} object, such as when a - * JavaScript error occurs within a callback earlier in the promise chain, - * the rejection is logged without invoking the given callback. - * - * @param {Function} callback - * The callback to invoke if the promise is rejected with an - * @link{Error} object. - * - * @returns {Function} - * A function which can be provided as the error callback for a - * promise. - */ - service.createErrorCallback = function createErrorCallback(callback) { - return (function generatedErrorCallback(error) { - - // Invoke given callback ONLY if due to a legitimate REST error - if (error instanceof Error) - return callback(error); - - // Log all other errors - $log.error(error); - - }); - }; - - /** - * Creates a promise error callback which resolves the promise with the - * given default value only if the @link{Error} in the original rejection - * is a NOT_FOUND error. All other errors are passed through and must be - * handled as yet more rejections. - * - * @param {*} value - * The default value to use to resolve the promise if the promise is - * rejected with a NOT_FOUND error. - * - * @returns {Function} - * A function which can be provided as the error callback for a - * promise. - */ - service.defaultValue = function defaultValue(value) { - return service.createErrorCallback(function resolveIfNotFound(error) { - - // Return default value only if not found - if (error.type === Error.Type.NOT_FOUND) - return value; - - // Reject promise with original error otherwise - throw error; - - }); - }; - - /** - * Promise error callback which ignores all rejections due to REST errors, - * but logs all other rejections, such as those due to JavaScript errors. - * This callback should be used in favor of angular.noop in cases where - * a REST response is being handled but REST errors should be ignored. - * - * @constant - * @type Function - */ - service.IGNORE = service.createErrorCallback(angular.noop); - - /** - * Promise error callback which logs all rejections due to REST errors as - * warnings to the browser console, and logs all other rejections as - * errors. This callback should be used in favor of angular.noop or - * @link{IGNORE} if REST errors are simply not expected. - * - * @constant - * @type Function - */ - service.WARN = service.createErrorCallback(function warnRequestFailed(error) { - $log.warn(error.type, error.message || error.translatableMessage); - }); - - /** - * Promise error callback which replaces the content of the page with a - * generic error message warning that the page could not be displayed. All - * rejections are logged to the browser console as errors. This callback - * should be used in favor of @link{WARN} if REST errors will result in the - * page being unusable. - * - * @constant - * @type Function - */ - service.DIE = service.createErrorCallback(function fatalPageError(error) { - $rootScope.$broadcast('guacFatalPageError', error); - $log.error(error.type, error.message || error.translatableMessage); - }); - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/schemaService.js b/guacamole/src/main/frontend/src/app/rest/services/schemaService.js deleted file mode 100644 index d6afa2b75b..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/schemaService.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on metadata via the REST API. - */ -angular.module('rest').factory('schemaService', ['$injector', - function schemaService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - var service = {}; - - /** - * Makes a request to the REST API to get the list of available attributes - * for user objects, returning a promise that provides an array of - * @link{Form} objects if successful. Each element of the array describes - * a logical grouping of possible attributes. - * - * @param {String} dataSource - * The unique identifier of the data source containing the users whose - * available attributes are to be retrieved. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @returns {Promise.} - * A promise which will resolve with an array of @link{Form} - * objects, where each @link{Form} describes a logical grouping of - * possible attributes. - */ - service.getUserAttributes = function getUserAttributes(dataSource) { - - // Retrieve available user attributes - return authenticationService.request({ - cache : cacheService.schema, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/userAttributes' - }); - - }; - - /** - * Makes a request to the REST API to get the list of available user preference - * attributes, returning a promise that provides an array of @link{Form} objects - * if successful. Each element of the array describes a logical grouping of - * possible user preference attributes. - * - * @param {String} dataSource - * The unique identifier of the data source containing the users whose - * available user preference attributes are to be retrieved. This - * identifier corresponds to an AuthenticationProvider within the - * Guacamole web application. - * - * @returns {Promise.} - * A promise which will resolve with an array of @link{Form} - * objects, where each @link{Form} describes a logical grouping of - * possible attributes. - */ - service.getUserPreferenceAttributes = function getUserPreferenceAttributes(dataSource) { - - // Retrieve available user attributes - return authenticationService.request({ - cache : cacheService.schema, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/userPreferenceAttributes' - }); - - }; - - /** - * Makes a request to the REST API to get the list of available attributes - * for user group objects, returning a promise that provides an array of - * @link{Form} objects if successful. Each element of the array describes - * a logical grouping of possible attributes. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user groups - * whose available attributes are to be retrieved. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @returns {Promise.} - * A promise which will resolve with an array of @link{Form} - * objects, where each @link{Form} describes a logical grouping of - * possible attributes. - */ - service.getUserGroupAttributes = function getUserGroupAttributes(dataSource) { - - // Retrieve available user group attributes - return authenticationService.request({ - cache : cacheService.schema, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/userGroupAttributes' - }); - - }; - - /** - * Makes a request to the REST API to get the list of available attributes - * for connection objects, returning a promise that provides an array of - * @link{Form} objects if successful. Each element of the array describes - * a logical grouping of possible attributes. - * - * @param {String} dataSource - * The unique identifier of the data source containing the connections - * whose available attributes are to be retrieved. This identifier - * corresponds to an AuthenticationProvider within the Guacamole web - * application. - * - * @returns {Promise.} - * A promise which will resolve with an array of @link{Form} - * objects, where each @link{Form} describes a logical grouping of - * possible attributes. - */ - service.getConnectionAttributes = function getConnectionAttributes(dataSource) { - - // Retrieve available connection attributes - return authenticationService.request({ - cache : cacheService.schema, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/connectionAttributes' - }); - - }; - - /** - * Makes a request to the REST API to get the list of available attributes - * for sharing profile objects, returning a promise that provides an array - * of @link{Form} objects if successful. Each element of the array describes - * a logical grouping of possible attributes. - * - * @param {String} dataSource - * The unique identifier of the data source containing the sharing - * profiles whose available attributes are to be retrieved. This - * identifier corresponds to an AuthenticationProvider within the - * Guacamole web application. - * - * @returns {Promise.} - * A promise which will resolve with an array of @link{Form} - * objects, where each @link{Form} describes a logical grouping of - * possible attributes. - */ - service.getSharingProfileAttributes = function getSharingProfileAttributes(dataSource) { - - // Retrieve available sharing profile attributes - return authenticationService.request({ - cache : cacheService.schema, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/sharingProfileAttributes' - }); - - }; - - /** - * Makes a request to the REST API to get the list of available attributes - * for connection group objects, returning a promise that provides an array - * of @link{Form} objects if successful. Each element of the array - * a logical grouping of possible attributes. - * - * @param {String} dataSource - * The unique identifier of the data source containing the connection - * groups whose available attributes are to be retrieved. This - * identifier corresponds to an AuthenticationProvider within the - * Guacamole web application. - * - * @returns {Promise.} - * A promise which will resolve with an array of @link{Form} - * objects, where each @link{Form} describes a logical grouping of - * possible attributes. - */ - service.getConnectionGroupAttributes = function getConnectionGroupAttributes(dataSource) { - - // Retrieve available connection group attributes - return authenticationService.request({ - cache : cacheService.schema, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/connectionGroupAttributes' - }); - - }; - - /** - * Makes a request to the REST API to get the list of protocols, returning - * a promise that provides a map of @link{Protocol} objects by protocol - * name if successful. - * - * @param {String} dataSource - * The unique identifier of the data source defining available - * protocols. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @returns {Promise.>} - * A promise which will resolve with a map of @link{Protocol} - * objects by protocol name upon success. - */ - service.getProtocols = function getProtocols(dataSource) { - - // Retrieve available protocols - return authenticationService.request({ - cache : cacheService.schema, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/protocols' - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/sharingProfileService.js b/guacamole/src/main/frontend/src/app/rest/services/sharingProfileService.js deleted file mode 100644 index 57055ec760..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/sharingProfileService.js +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on sharing profiles via the REST API. - */ -angular.module('rest').factory('sharingProfileService', ['$injector', - function sharingProfileService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - var service = {}; - - /** - * Makes a request to the REST API to get a single sharing profile, - * returning a promise that provides the corresponding @link{SharingProfile} - * if successful. - * - * @param {String} id The ID of the sharing profile. - * - * @returns {Promise.} - * A promise which will resolve with a @link{SharingProfile} upon - * success. - * - * @example - * - * sharingProfileService.getSharingProfile('mySharingProfile').then(function(sharingProfile) { - * // Do something with the sharing profile - * }); - */ - service.getSharingProfile = function getSharingProfile(dataSource, id) { - - // Retrieve sharing profile - return authenticationService.request({ - cache : cacheService.connections, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(id) - }); - - }; - - /** - * Makes a request to the REST API to get the parameters of a single - * sharing profile, returning a promise that provides the corresponding - * map of parameter name/value pairs if successful. - * - * @param {String} id - * The identifier of the sharing profile. - * - * @returns {Promise.>} - * A promise which will resolve with an map of parameter name/value - * pairs upon success. - */ - service.getSharingProfileParameters = function getSharingProfileParameters(dataSource, id) { - - // Retrieve sharing profile parameters - return authenticationService.request({ - cache : cacheService.connections, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(id) + '/parameters' - }); - - }; - - /** - * Makes a request to the REST API to save a sharing profile, returning a - * promise that can be used for processing the results of the call. If the - * sharing profile is new, and thus does not yet have an associate - * identifier, the identifier will be automatically set in the provided - * sharing profile upon success. - * - * @param {SharingProfile} sharingProfile - * The sharing profile to update. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * save operation is successful. - */ - service.saveSharingProfile = function saveSharingProfile(dataSource, sharingProfile) { - - // If sharing profile is new, add it and set the identifier automatically - if (!sharingProfile.identifier) { - return authenticationService.request({ - method : 'POST', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles', - data : sharingProfile - }) - - // Set the identifier on the new sharing profile and clear the cache - .then(function sharingProfileCreated(newSharingProfile){ - sharingProfile.identifier = newSharingProfile.identifier; - cacheService.connections.removeAll(); - - // Clear users cache to force reload of permissions for this - // newly created sharing profile - cacheService.users.removeAll(); - }); - } - - // Otherwise, update the existing sharing profile - else { - return authenticationService.request({ - method : 'PUT', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(sharingProfile.identifier), - data : sharingProfile - }) - - // Clear the cache - .then(function sharingProfileUpdated(){ - cacheService.connections.removeAll(); - - // Clear users cache to force reload of permissions for this - // newly updated sharing profile - cacheService.users.removeAll(); - }); - } - - }; - - /** - * Makes a request to the REST API to delete a sharing profile, - * returning a promise that can be used for processing the results of the call. - * - * @param {SharingProfile} sharingProfile - * The sharing profile to delete. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * delete operation is successful. - */ - service.deleteSharingProfile = function deleteSharingProfile(dataSource, sharingProfile) { - - // Delete sharing profile - return authenticationService.request({ - method : 'DELETE', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(sharingProfile.identifier) - }) - - // Clear the cache - .then(function sharingProfileDeleted(){ - cacheService.connections.removeAll(); - }); - - }; - - return service; -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/tunnelService.js b/guacamole/src/main/frontend/src/app/rest/services/tunnelService.js deleted file mode 100644 index 2ebb08bd78..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/tunnelService.js +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on the tunnels of in-progress connections (and their - * underlying objects) via the REST API. - */ -angular.module('rest').factory('tunnelService', ['$injector', - function tunnelService($injector) { - - // Required types - var Error = $injector.get('Error'); - - // Required services - var $q = $injector.get('$q'); - var $window = $injector.get('$window'); - var authenticationService = $injector.get('authenticationService'); - var requestService = $injector.get('requestService'); - - var service = {}; - - /** - * Reference to the window.document object. - * - * @private - * @type HTMLDocument - */ - var document = $window.document; - - /** - * The number of milliseconds to wait after a stream download has completed - * before cleaning up related DOM resources, if the browser does not - * otherwise notify us that cleanup is safe. - * - * @private - * @constant - * @type Number - */ - var DOWNLOAD_CLEANUP_WAIT = 5000; - - /** - * The maximum size a chunk may be during uploadToStream() in bytes. - * - * @private - * @constant - * @type Number - */ - const CHUNK_SIZE = 1024 * 1024 * 4; - - /** - * Makes a request to the REST API to get the list of all tunnels - * associated with in-progress connections, returning a promise that - * provides an array of their UUIDs (strings) if successful. - * - * @returns {Promise.>} - * A promise which will resolve with an array of UUID strings, uniquely - * identifying each active tunnel. - */ - service.getTunnels = function getTunnels() { - - // Retrieve tunnels - return authenticationService.request({ - method : 'GET', - url : 'api/session/tunnels' - }); - - }; - - /** - * Makes a request to the REST API to retrieve the underlying protocol of - * the connection associated with a particular tunnel, returning a promise - * that provides a @link{Protocol} object if successful. - * - * @param {String} tunnel - * The UUID of the tunnel associated with the Guacamole connection - * whose underlying protocol is being retrieved. - * - * @returns {Promise.} - * A promise which will resolve with a @link{Protocol} object upon - * success. - */ - service.getProtocol = function getProtocol(tunnel) { - - return authenticationService.request({ - method : 'GET', - url : 'api/session/tunnels/' + encodeURIComponent(tunnel) - + '/protocol' - }); - - }; - - /** - * Retrieves the set of sharing profiles that the current user can use to - * share the active connection of the given tunnel. - * - * @param {String} tunnel - * The UUID of the tunnel associated with the Guacamole connection - * whose sharing profiles are being retrieved. - * - * @returns {Promise.>} - * A promise which will resolve with a map of @link{SharingProfile} - * objects where each key is the identifier of the corresponding - * sharing profile. - */ - service.getSharingProfiles = function getSharingProfiles(tunnel) { - - // Retrieve all associated sharing profiles - return authenticationService.request({ - method : 'GET', - url : 'api/session/tunnels/' + encodeURIComponent(tunnel) - + '/activeConnection/connection/sharingProfiles' - }); - - }; - - /** - * Makes a request to the REST API to generate credentials which have - * access strictly to the active connection associated with the given - * tunnel, using the restrictions defined by the given sharing profile, - * returning a promise that provides the resulting @link{UserCredentials} - * object if successful. - * - * @param {String} tunnel - * The UUID of the tunnel associated with the Guacamole connection - * being shared. - * - * @param {String} sharingProfile - * The identifier of the connection object dictating the - * semantics/restrictions which apply to the shared session. - * - * @returns {Promise.} - * A promise which will resolve with a @link{UserCredentials} object - * upon success. - */ - service.getSharingCredentials = function getSharingCredentials(tunnel, sharingProfile) { - - // Generate sharing credentials - return authenticationService.request({ - method : 'GET', - url : 'api/session/tunnels/' + encodeURIComponent(tunnel) - + '/activeConnection/sharingCredentials/' - + encodeURIComponent(sharingProfile) - }); - - }; - - /** - * Sanitize a filename, replacing all URL path seperators with safe - * characters. - * - * @param {String} filename - * An unsanitized filename that may need cleanup. - * - * @returns {String} - * The sanitized filename. - */ - var sanitizeFilename = function sanitizeFilename(filename) { - return filename.replace(/[\\\/]+/g, '_'); - }; - - /** - * Makes a request to the REST API to retrieve the contents of a stream - * which has been created within the active Guacamole connection associated - * with the given tunnel. The contents of the stream will automatically be - * downloaded by the browser. - * - * WARNING: Like Guacamole's various reader implementations, this function - * relies on assigning an "onend" handler to the stream object for the sake - * of cleaning up resources after the stream closes. If the "onend" handler - * is overwritten after this function returns, resources may not be - * properly cleaned up. - * - * @param {String} tunnel - * The UUID of the tunnel associated with the Guacamole connection - * whose stream should be downloaded as a file. - * - * @param {Guacamole.InputStream} stream - * The stream whose contents should be downloaded. - * - * @param {String} mimetype - * The mimetype of the stream being downloaded. This is currently - * ignored, with the download forced by using - * "application/octet-stream". - * - * @param {String} filename - * The filename that should be given to the downloaded file. - */ - service.downloadStream = function downloadStream(tunnel, stream, mimetype, filename) { - - // Work-around for IE missing window.location.origin - if (!$window.location.origin) - var streamOrigin = $window.location.protocol + '//' + $window.location.hostname + ($window.location.port ? (':' + $window.location.port) : ''); - else - var streamOrigin = $window.location.origin; - - // Build download URL - var url = streamOrigin - + $window.location.pathname - + 'api/session/tunnels/' + encodeURIComponent(tunnel) - + '/streams/' + encodeURIComponent(stream.index) - + '/' + encodeURIComponent(sanitizeFilename(filename)) - + '?token=' + encodeURIComponent(authenticationService.getCurrentToken()); - - // Create temporary hidden iframe to facilitate download - var iframe = document.createElement('iframe'); - iframe.style.position = 'fixed'; - iframe.style.border = 'none'; - iframe.style.width = '1px'; - iframe.style.height = '1px'; - iframe.style.left = '-1px'; - iframe.style.top = '-1px'; - - // The iframe MUST be part of the DOM for the download to occur - document.body.appendChild(iframe); - - // Automatically remove iframe from DOM when download completes, if - // browser supports tracking of iframe downloads via the "load" event - iframe.onload = function downloadComplete() { - document.body.removeChild(iframe); - }; - - // Acknowledge (and ignore) any received blobs - stream.onblob = function acknowledgeData() { - stream.sendAck('OK', Guacamole.Status.Code.SUCCESS); - }; - - // Automatically remove iframe from DOM a few seconds after the stream - // ends, in the browser does NOT fire the "load" event for downloads - stream.onend = function downloadComplete() { - $window.setTimeout(function cleanupIframe() { - if (iframe.parentElement) { - document.body.removeChild(iframe); - } - }, DOWNLOAD_CLEANUP_WAIT); - }; - - // Begin download - iframe.src = url; - - }; - - /** - * Makes a request to the REST API to send the contents of the given file - * along a stream which has been created within the active Guacamole - * connection associated with the given tunnel. The contents of the file - * will automatically be split into individual "blob" instructions, as if - * sent by the connected Guacamole client. - * - * @param {String} tunnel - * The UUID of the tunnel associated with the Guacamole connection - * whose stream should receive the given file. - * - * @param {Guacamole.OutputStream} stream - * The stream that should receive the given file. - * - * @param {File} file - * The file that should be sent along the given stream. - * - * @param {Function} [progressCallback] - * An optional callback which, if provided, will be invoked as the - * file upload progresses. The current position within the file, in - * bytes, will be provided to the callback as the sole argument. - * - * @return {Promise} - * A promise which resolves when the upload has completed, and is - * rejected with an Error if the upload fails. The Guacamole protocol - * status code describing the failure will be included in the Error if - * available. If the status code is available, the type of the Error - * will be STREAM_ERROR. - */ - service.uploadToStream = function uploadToStream(tunnel, stream, file, - progressCallback) { - - var deferred = $q.defer(); - - // Work-around for IE missing window.location.origin - if (!$window.location.origin) - var streamOrigin = $window.location.protocol + '//' + $window.location.hostname + ($window.location.port ? (':' + $window.location.port) : ''); - else - var streamOrigin = $window.location.origin; - - // Build upload URL - var url = streamOrigin - + $window.location.pathname - + 'api/session/tunnels/' + encodeURIComponent(tunnel) - + '/streams/' + encodeURIComponent(stream.index) - + '/' + encodeURIComponent(sanitizeFilename(file.name)) - + '?token=' + encodeURIComponent(authenticationService.getCurrentToken()); - - /** - * Creates a chunk of the inputted file to be uploaded. - * - * @param {Number} offset - * The byte at which to begin the chunk. - * - * @return {File} - * The file chunk created by this function. - */ - const createChunk = (offset) => { - var chunkEnd = Math.min(offset + CHUNK_SIZE, file.size); - const chunk = file.slice(offset, chunkEnd); - return chunk; - }; - - /** - * POSTs the inputted chunks and recursively calls uploadHandler() - * until the upload is complete. - * - * @param {File} chunk - * The chunk to be uploaded to the stream. - * - * @param {Number} offset - * The byte at which the inputted chunk begins. - */ - const uploadChunk = (chunk, offset) => { - var xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - - // Invoke provided callback if upload tracking is supported. - if (progressCallback && xhr.upload) { - xhr.upload.addEventListener('progress', function updateProgress(e) { - progressCallback(e.loaded + offset); - }); - }; - - // Continue to next chunk, resolve, or reject promise as appropriate - // once upload has stopped - xhr.onreadystatechange = function uploadStatusChanged() { - - // Ignore state changes prior to completion. - if (xhr.readyState !== 4) - return; - - // Resolve if last chunk or begin next chunk if HTTP status - // code indicates success. - if (xhr.status >= 200 && xhr.status < 300) { - offset += CHUNK_SIZE; - - if (offset < file.size) - uploadHandler(offset); - else - deferred.resolve(); - } - - // Parse and reject with resulting JSON error - else if (xhr.getResponseHeader('Content-Type') === 'application/json') - deferred.reject(new Error(angular.fromJson(xhr.responseText))); - - // Warn of lack of permission of a proxy rejects the upload - else if (xhr.status >= 400 && xhr.status < 500) - deferred.reject(new Error({ - 'type': Error.Type.STREAM_ERROR, - 'statusCode': Guacamole.Status.Code.CLIENT_FORBIDDEN, - 'message': 'HTTP ' + xhr.status - })); - - // Assume internal error for all other cases - else - deferred.reject(new Error({ - 'type': Error.Type.STREAM_ERROR, - 'statusCode': Guacamole.Status.Code.INTERNAL_ERROR, - 'message': 'HTTP ' + xhr.status - })); - - }; - - // Perform upload - xhr.send(chunk); - - }; - - /** - * Handles the recursive upload process. Each time it is called, a - * chunk is made with createChunk(), starting at the offset parameter. - * The chunk is then sent by uploadChunk(), which recursively calls - * this handler until the upload process is either completed and the - * promise is resolved, or fails and the promise is rejected. - * - * @param {Number} offset - * The byte at which to begin the chunk. - */ - const uploadHandler = (offset) => { - uploadChunk(createChunk(offset), offset); - }; - - uploadHandler(0); - - return deferred.promise; - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/userGroupService.js b/guacamole/src/main/frontend/src/app/rest/services/userGroupService.js deleted file mode 100644 index 1476218789..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/userGroupService.js +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on user groups via the REST API. - */ -angular.module('rest').factory('userGroupService', ['$injector', - function userGroupService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - var service = {}; - - /** - * Makes a request to the REST API to get the list of user groups, - * returning a promise that provides an array of @link{UserGroup} objects if - * successful. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user groups - * to be retrieved. This identifier corresponds to an - * AuthenticationProvider within the Guacamole web application. - * - * @param {String[]} [permissionTypes] - * The set of permissions to filter with. A user group must have one or - * more of these permissions for a user group to appear in the result. - * If null, no filtering will be performed. Valid values are listed - * within PermissionSet.ObjectType. - * - * @returns {Promise.>} - * A promise which will resolve with a map of @link{UserGroup} objects - * where each key is the identifier of the corresponding user group. - */ - service.getUserGroups = function getUserGroups(dataSource, permissionTypes) { - - // Add permission filter if specified - var httpParameters = {}; - if (permissionTypes) - httpParameters.permission = permissionTypes; - - // Retrieve user groups - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups', - params : httpParameters - }); - - }; - - /** - * Makes a request to the REST API to get the user group having the given - * identifier, returning a promise that provides the corresponding - * @link{UserGroup} if successful. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group to - * be retrieved. This identifier corresponds to an - * AuthenticationProvider within the Guacamole web application. - * - * @param {String} identifier - * The identifier of the user group to retrieve. - * - * @returns {Promise.} - * A promise which will resolve with a @link{UserGroup} upon success. - */ - service.getUserGroup = function getUserGroup(dataSource, identifier) { - - // Retrieve user group - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) - }); - - }; - - /** - * Makes a request to the REST API to delete a user group, returning a - * promise that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group to - * be deleted. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {UserGroup} userGroup - * The user group to delete. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * delete operation is successful. - */ - service.deleteUserGroup = function deleteUserGroup(dataSource, userGroup) { - - // Delete user group - return authenticationService.request({ - method : 'DELETE', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(userGroup.identifier) - }) - - // Clear the cache - .then(function userGroupDeleted(){ - cacheService.users.removeAll(); - }); - - - }; - - /** - * Makes a request to the REST API to create a user group, returning a promise - * that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source in which the user group - * should be created. This identifier corresponds to an - * AuthenticationProvider within the Guacamole web application. - * - * @param {UserGroup} userGroup - * The user group to create. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * create operation is successful. - */ - service.createUserGroup = function createUserGroup(dataSource, userGroup) { - - // Create user group - return authenticationService.request({ - method : 'POST', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups', - data : userGroup - }) - - // Clear the cache - .then(function userGroupCreated(){ - cacheService.users.removeAll(); - }); - - }; - - /** - * Makes a request to the REST API to save a user group, returning a - * promise that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user group to - * be updated. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {UserGroup} userGroup - * The user group to update. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * save operation is successful. - */ - service.saveUserGroup = function saveUserGroup(dataSource, userGroup) { - - // Update user group - return authenticationService.request({ - method : 'PUT', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(userGroup.identifier), - data : userGroup - }) - - // Clear the cache - .then(function userGroupUpdated(){ - cacheService.users.removeAll(); - }); - - }; - - /** - * Makes a request to the REST API to apply a supplied list of user group - * patches, returning a promise that can be used for processing the results - * of the call. - * - * This operation is atomic - if any errors are encountered during the - * connection patching process, the entire request will fail, and no - * changes will be persisted. - * - * @param {String} dataSource - * The identifier of the data source associated with the user groups to - * be patched. - * - * @param {DirectoryPatch.[]} patches - * An array of patches to apply. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * patch operation is successful. - */ - service.patchUserGroups = function patchUserGroups(dataSource, patches) { - - // Make the PATCH request - return authenticationService.request({ - method : 'PATCH', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups', - data : patches - }) - - // Clear the cache - .then(function userGroupsPatched(patchResponse){ - cacheService.users.removeAll(); - return patchResponse; - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/services/userService.js b/guacamole/src/main/frontend/src/app/rest/services/userService.js deleted file mode 100644 index c1d3c35728..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/services/userService.js +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for operating on users via the REST API. - */ -angular.module('rest').factory('userService', ['$injector', - function userService($injector) { - - // Required services - var requestService = $injector.get('requestService'); - var authenticationService = $injector.get('authenticationService'); - var cacheService = $injector.get('cacheService'); - - // Get required types - var UserPasswordUpdate = $injector.get("UserPasswordUpdate"); - - var service = {}; - - /** - * Makes a request to the REST API to get the list of users, - * returning a promise that provides an array of @link{User} objects if - * successful. - * - * @param {String} dataSource - * The unique identifier of the data source containing the users to be - * retrieved. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {String[]} [permissionTypes] - * The set of permissions to filter with. A user must have one or more - * of these permissions for a user to appear in the result. - * If null, no filtering will be performed. Valid values are listed - * within PermissionSet.ObjectType. - * - * @returns {Promise.>} - * A promise which will resolve with a map of @link{User} objects - * where each key is the identifier (username) of the corresponding - * user. - */ - service.getUsers = function getUsers(dataSource, permissionTypes) { - - // Add permission filter if specified - var httpParameters = {}; - if (permissionTypes) - httpParameters.permission = permissionTypes; - - // Retrieve users - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users', - params : httpParameters - }); - - }; - - /** - * Makes a request to the REST API to get the user having the given - * username, returning a promise that provides the corresponding - * @link{User} if successful. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user to be - * retrieved. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {String} username - * The username of the user to retrieve. - * - * @returns {Promise.} - * A promise which will resolve with a @link{User} upon success. - */ - service.getUser = function getUser(dataSource, username) { - - // Retrieve user - return authenticationService.request({ - cache : cacheService.users, - method : 'GET', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username) - }); - - }; - - /** - * Makes a request to the REST API to delete a user, returning a promise - * that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user to be - * deleted. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {User} user - * The user to delete. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * delete operation is successful. - */ - service.deleteUser = function deleteUser(dataSource, user) { - - // Delete user - return authenticationService.request({ - method : 'DELETE', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(user.username) - }) - - // Clear the cache - .then(function userDeleted(){ - cacheService.users.removeAll(); - }); - - - }; - - /** - * Makes a request to the REST API to create a user, returning a promise - * that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source in which the user should be - * created. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {User} user - * The user to create. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * create operation is successful. - */ - service.createUser = function createUser(dataSource, user) { - - // Create user - return authenticationService.request({ - method : 'POST', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users', - data : user - }) - - // Clear the cache - .then(function userCreated(){ - cacheService.users.removeAll(); - }); - - }; - - /** - * Makes a request to the REST API to save a user, returning a promise that - * can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user to be - * updated. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {User} user - * The user to update. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * save operation is successful. - */ - service.saveUser = function saveUser(dataSource, user) { - - // Update user - return authenticationService.request({ - method : 'PUT', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(user.username), - data : user - }) - - // Clear the cache - .then(function userUpdated(){ - cacheService.users.removeAll(); - }); - - }; - - /** - * Makes a request to the REST API to update the password for a user, - * returning a promise that can be used for processing the results of the call. - * - * @param {String} dataSource - * The unique identifier of the data source containing the user to be - * updated. This identifier corresponds to an AuthenticationProvider - * within the Guacamole web application. - * - * @param {String} username - * The username of the user to update. - * - * @param {String} oldPassword - * The exiting password of the user to update. - * - * @param {String} newPassword - * The new password of the user to update. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * password update operation is successful. - */ - service.updateUserPassword = function updateUserPassword(dataSource, username, - oldPassword, newPassword) { - - // Update user password - return authenticationService.request({ - method : 'PUT', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username) + '/password', - data : new UserPasswordUpdate({ - oldPassword : oldPassword, - newPassword : newPassword - }) - }) - - // Clear the cache - .then(function passwordChanged(){ - cacheService.users.removeAll(); - }); - - }; - - /** - * Makes a request to the REST API to apply a supplied list of user patches, - * returning a promise that can be used for processing the results of the - * call. - * - * This operation is atomic - if any errors are encountered during the - * connection patching process, the entire request will fail, and no - * changes will be persisted. - * - * @param {String} dataSource - * The identifier of the data source associated with the users to be - * patched. - * - * @param {DirectoryPatch.[]} patches - * An array of patches to apply. - * - * @returns {Promise} - * A promise for the HTTP call which will succeed if and only if the - * patch operation is successful. - */ - service.patchUsers = function patchUsers(dataSource, patches) { - - // Make the PATCH request - return authenticationService.request({ - method : 'PATCH', - url : 'api/session/data/' + encodeURIComponent(dataSource) + '/users', - data : patches - }) - - // Clear the cache - .then(function usersPatched(patchResponse){ - cacheService.users.removeAll(); - return patchResponse; - }); - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/ActiveConnection.js b/guacamole/src/main/frontend/src/app/rest/types/ActiveConnection.js deleted file mode 100644 index dc0b140fe3..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/ActiveConnection.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ActiveConnection class. - */ -angular.module('rest').factory('ActiveConnection', [function defineActiveConnection() { - - /** - * The object returned by REST API calls when representing the data - * associated with an active connection. Each active connection is - * effectively a pairing of a connection and the user currently using it, - * along with other information. - * - * @constructor - * @param {ActiveConnection|Object} [template={}] - * The object whose properties should be copied within the new - * ActiveConnection. - */ - var ActiveConnection = function ActiveConnection(template) { - - // Use empty object by default - template = template || {}; - - /** - * The identifier which uniquely identifies this specific active - * connection. - * - * @type String - */ - this.identifier = template.identifier; - - /** - * The identifier of the connection associated with this active - * connection. - * - * @type String - */ - this.connectionIdentifier = template.connectionIdentifier; - - /** - * The time that the connection began, in seconds since - * 1970-01-01 00:00:00 UTC, if known. - * - * @type Number - */ - this.startDate = template.startDate; - - /** - * The remote host that initiated the connection, if known. - * - * @type String - */ - this.remoteHost = template.remoteHost; - - /** - * The username of the user associated with the connection, if known. - * - * @type String - */ - this.username = template.username; - - /** - * Whether this active connection may be connected to, just as a - * normal connection. - * - * @type Boolean - */ - this.connectable = template.connectable; - - }; - - return ActiveConnection; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/ActivityLog.js b/guacamole/src/main/frontend/src/app/rest/types/ActivityLog.js deleted file mode 100644 index f74e53e05b..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/ActivityLog.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ActivityLog class. - */ -angular.module('rest').factory('ActivityLog', [function defineActivityLog() { - - /** - * The object returned by REST API calls when representing a log or - * recording associated with a connection's usage history, such as a - * session recording or typescript. - * - * @constructor - * @param {ActivityLog|Object} [template={}] - * The object whose properties should be copied within the new - * ActivityLog. - */ - var ActivityLog = function ActivityLog(template) { - - // Use empty object by default - template = template || {}; - - /** - * The type of this ActivityLog. - * - * @type {string} - */ - this.type = template.type; - - /** - * A human-readable description of this log. - * - * @type {TranslatableMessage} - */ - this.description = template.description; - - }; - - /** - * All possible types of ActivityLog. - * - * @type {!object.} - */ - ActivityLog.Type = { - - /** - * A Guacamole session recording in the form of a Guacamole protocol - * dump. - */ - GUACAMOLE_SESSION_RECORDING : 'GUACAMOLE_SESSION_RECORDING', - - /** - * A text log from a server-side process, such as the Guacamole web - * application or guacd. - */ - SERVER_LOG : 'SERVER_LOG', - - /** - * A text session recording in the form of a standard typescript. - */ - TYPESCRIPT : 'TYPESCRIPT', - - /** - * The timing file related to a typescript. - */ - TYPESCRIPT_TIMING : 'TYPESCRIPT_TIMING' - - }; - - return ActivityLog; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/Connection.js b/guacamole/src/main/frontend/src/app/rest/types/Connection.js deleted file mode 100644 index 89da4e1172..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/Connection.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the Connection class. - */ -angular.module('rest').factory('Connection', [function defineConnection() { - - /** - * The object returned by REST API calls when representing the data - * associated with a connection. - * - * @constructor - * @param {Connection|Object} [template={}] - * The object whose properties should be copied within the new - * Connection. - */ - var Connection = function Connection(template) { - - // Use empty object by default - template = template || {}; - - /** - * The unique identifier associated with this connection. - * - * @type String - */ - this.identifier = template.identifier; - - /** - * The unique identifier of the connection group that contains this - * connection. - * - * @type String - */ - this.parentIdentifier = template.parentIdentifier; - - /** - * The human-readable name of this connection, which is not necessarily - * unique. - * - * @type String - */ - this.name = template.name; - - /** - * The name of the protocol associated with this connection, such as - * "vnc" or "rdp". - * - * @type String - */ - this.protocol = template.protocol; - - /** - * Connection configuration parameters, as dictated by the protocol in - * use, arranged as name/value pairs. This information may not be - * available until directly queried. If this information is - * unavailable, this property will be null or undefined. - * - * @type Object. - */ - this.parameters = template.parameters; - - /** - * Arbitrary name/value pairs which further describe this connection. - * The semantics and validity of these attributes are dictated by the - * extension which defines them. - * - * @type Object. - */ - this.attributes = template.attributes || {}; - - /** - * The count of currently active connections using this connection. - * This field will be returned from the REST API during a get - * operation, but manually setting this field will have no effect. - * - * @type Number - */ - this.activeConnections = template.activeConnections; - - /** - * An array of all associated sharing profiles, if known. This property - * may be null or undefined if sharing profiles have not been queried, - * and thus the sharing profiles are unknown. - * - * @type SharingProfile[] - */ - this.sharingProfiles = template.sharingProfiles; - - /** - * The time that this connection was last used, in milliseconds since - * 1970-01-01 00:00:00 UTC. If this information is unknown or - * unavailable, this will be null. - * - * @type Number - */ - this.lastActive = template.lastActive; - - }; - - return Connection; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/ConnectionGroup.js b/guacamole/src/main/frontend/src/app/rest/types/ConnectionGroup.js deleted file mode 100644 index 6da754c0c9..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/ConnectionGroup.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ConnectionGroup class. - */ -angular.module('rest').factory('ConnectionGroup', [function defineConnectionGroup() { - - /** - * The object returned by REST API calls when representing the data - * associated with a connection group. - * - * @constructor - * @param {ConnectionGroup|Object} [template={}] - * The object whose properties should be copied within the new - * ConnectionGroup. - */ - var ConnectionGroup = function ConnectionGroup(template) { - - // Use empty object by default - template = template || {}; - - /** - * The unique identifier associated with this connection group. - * - * @type String - */ - this.identifier = template.identifier; - - /** - * The unique identifier of the connection group that contains this - * connection group. - * - * @type String - * @default ConnectionGroup.ROOT_IDENTIFIER - */ - this.parentIdentifier = template.parentIdentifier || ConnectionGroup.ROOT_IDENTIFIER; - - /** - * The human-readable name of this connection group, which is not - * necessarily unique. - * - * @type String - */ - this.name = template.name; - - /** - * The type of this connection group, which may be either - * ConnectionGroup.Type.ORGANIZATIONAL or - * ConnectionGroup.Type.BALANCING. - * - * @type String - * @default ConnectionGroup.Type.ORGANIZATIONAL - */ - this.type = template.type || ConnectionGroup.Type.ORGANIZATIONAL; - - /** - * An array of all child connections, if known. This property may be - * null or undefined if children have not been queried, and thus the - * child connections are unknown. - * - * @type Connection[] - */ - this.childConnections = template.childConnections; - - /** - * An array of all child connection groups, if known. This property may - * be null or undefined if children have not been queried, and thus the - * child connection groups are unknown. - * - * @type ConnectionGroup[] - */ - this.childConnectionGroups = template.childConnectionGroups; - - /** - * Arbitrary name/value pairs which further describe this connection - * group. The semantics and validity of these attributes are dictated - * by the extension which defines them. - * - * @type Object. - */ - this.attributes = template.attributes || {}; - - /** - * The count of currently active connections using this connection - * group. This field will be returned from the REST API during a get - * operation, but manually setting this field will have no effect. - * - * @type Number - */ - this.activeConnections = template.activeConnections; - - }; - - /** - * The reserved identifier which always represents the root connection - * group. - * - * @type String - */ - ConnectionGroup.ROOT_IDENTIFIER = "ROOT"; - - /** - * All valid connection group types. - */ - ConnectionGroup.Type = { - - /** - * The type string associated with balancing connection groups. - * - * @type String - */ - BALANCING : "BALANCING", - - /** - * The type string associated with organizational connection groups. - * - * @type String - */ - ORGANIZATIONAL : "ORGANIZATIONAL" - - }; - - return ConnectionGroup; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/ConnectionHistoryEntry.js b/guacamole/src/main/frontend/src/app/rest/types/ConnectionHistoryEntry.js deleted file mode 100644 index e035efc82d..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/ConnectionHistoryEntry.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the ConnectionHistoryEntry class. - */ -angular.module('rest').factory('ConnectionHistoryEntry', [function defineConnectionHistoryEntry() { - - /** - * The object returned by REST API calls when representing the data - * associated with an entry in a connection's usage history. Each history - * entry represents the time at which a particular started using a - * connection and, if applicable, the time that usage stopped. - * - * @constructor - * @param {ConnectionHistoryEntry|Object} [template={}] - * The object whose properties should be copied within the new - * ConnectionHistoryEntry. - */ - var ConnectionHistoryEntry = function ConnectionHistoryEntry(template) { - - // Use empty object by default - template = template || {}; - - /** - * An arbitrary identifier that uniquely identifies this record - * relative to other records in the same set, or null if no such unique - * identifier exists. - * - * @type {string} - */ - this.identifier = template.identifier; - - /** - * A UUID that uniquely identifies this record, or null if no such - * unique identifier exists. - * - * @type {string} - */ - this.uuid = template.uuid; - - /** - * The identifier of the connection associated with this history entry. - * - * @type String - */ - this.connectionIdentifier = template.connectionIdentifier; - - /** - * The name of the connection associated with this history entry. - * - * @type String - */ - this.connectionName = template.connectionName; - - /** - * The remote host associated with this history entry. - * - * @type String - */ - this.remoteHost = template.remoteHost; - - /** - * The time that usage began, in seconds since 1970-01-01 00:00:00 UTC. - * - * @type Number - */ - this.startDate = template.startDate; - - /** - * The time that usage ended, in seconds since 1970-01-01 00:00:00 UTC. - * The absence of an endDate does NOT necessarily indicate that the - * connection is still in use, particularly if the server was shutdown - * or restarted before the history entry could be updated. To determine - * whether a connection is still active, check the active property of - * this history entry. - * - * @type Number - */ - this.endDate = template.endDate; - - /** - * The remote host that initiated this connection, if known. - * - * @type String - */ - this.remoteHost = template.remoteHost; - - /** - * The username of the user associated with this particular usage of - * the connection. - * - * @type String - */ - this.username = template.username; - - /** - * Whether this usage of the connection is still active. Note that this - * is the only accurate way to check for connection activity; the - * absence of endDate does not necessarily imply the connection is - * active, as the history entry may simply be incomplete. - * - * @type Boolean - */ - this.active = template.active; - - /** - * Arbitrary name/value pairs which further describe this history - * entry. The semantics and validity of these attributes are dictated - * by the extension which defines them. - * - * @type {!object.} - */ - this.attributes = template.attributes; - - /** - * All logs associated and accessible via this record, stored by their - * corresponding unique names. - * - * @type {!object.} - */ - this.logs = template.logs; - - }; - - /** - * All possible predicates for sorting ConnectionHistoryEntry objects using - * the REST API. By default, each predicate indicates ascending order. To - * indicate descending order, add "-" to the beginning of the predicate. - * - * @type Object. - */ - ConnectionHistoryEntry.SortPredicate = { - - /** - * The date and time that the connection associated with the history - * entry began (connected). - */ - START_DATE : 'startDate' - - }; - - /** - * Value/unit pair representing the length of time that a connection was - * used. - * - * @constructor - * @param {Number} milliseconds - * The number of milliseconds that the associated connection was used. - */ - ConnectionHistoryEntry.Duration = function Duration(milliseconds) { - - /** - * The provided duration in seconds. - * - * @type Number - */ - var seconds = milliseconds / 1000; - - /** - * Rounds the given value to the nearest tenth. - * - * @param {Number} value The value to round. - * @returns {Number} The given value, rounded to the nearest tenth. - */ - var round = function round(value) { - return Math.round(value * 10) / 10; - }; - - // Days - if (seconds >= 86400) { - this.value = round(seconds / 86400); - this.unit = 'day'; - } - - // Hours - else if (seconds >= 3600) { - this.value = round(seconds / 3600); - this.unit = 'hour'; - } - - // Minutes - else if (seconds >= 60) { - this.value = round(seconds / 60); - this.unit = 'minute'; - } - - // Seconds - else { - - /** - * The number of seconds (or minutes, or hours, etc.) that the - * connection was used. The units associated with this value are - * represented by the unit property. - * - * @type Number - */ - this.value = round(seconds); - - /** - * The units associated with the value of this duration. Valid - * units are 'second', 'minute', 'hour', and 'day'. - * - * @type String - */ - this.unit = 'second'; - - } - - }; - - return ConnectionHistoryEntry; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatch.js b/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatch.js deleted file mode 100644 index 664dcdcdf7..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatch.js +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the DirectoryPatch class. - */ -angular.module('rest').factory('DirectoryPatch', [function defineDirectoryPatch() { - - /** - * The object consumed by REST API calls when representing changes to an - * arbitrary set of directory-based objects. - * @constructor - * - * @template DirectoryObject - * The directory-based object type that this DirectoryPatch will - * operate on. - * - * @param {DirectoryObject|Object} [template={}] - * The object whose properties should be copied within the new - * DirectoryPatch. - */ - var DirectoryPatch = function DirectoryPatch(template) { - - // Use empty object by default - template = template || {}; - - /** - * The operation to apply to the objects indicated by the path. Valid - * operation values are defined within DirectoryPatch.Operation. - * - * @type {String} - */ - this.op = template.op; - - /** - * The path of the objects to modify. For creation of new objects, this - * should be "/". Otherwise, it should be "/{identifier}", specifying - * the identifier of the existing object being modified. - * - * @type {String} - * @default '/' - */ - this.path = template.path || '/'; - - /** - * The object being added/replaced, or undefined if deleting. - * - * @type {DirectoryObject} - */ - this.value = template.value; - - }; - - /** - * All valid patch operations for directory-based objects. - */ - DirectoryPatch.Operation = { - - /** - * Adds the specified object to the relation. - */ - ADD : 'add', - - /** - * Replaces (updates) the specified object from the relation. - */ - REPLACE : 'replace', - - /** - * Removes the specified object from the relation. - */ - REMOVE : 'remove' - - }; - - return DirectoryPatch; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchOutcome.js b/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchOutcome.js deleted file mode 100644 index 324f1ae180..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchOutcome.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the DirectoryPatchOutcome class. - */ -angular.module('rest').factory('DirectoryPatchOutcome', [ - function defineDirectoryPatchOutcome() { - - /** - * An object returned by a PATCH request to a directory REST API, - * representing the outcome associated with a particular patch in the - * request. This object can indicate either a successful or unsuccessful - * response. The error field is only meaningful for unsuccessful patches. - * @constructor - * - * @param {DirectoryPatchOutcome|Object} [template={}] - * The object whose properties should be copied within the new - * DirectoryPatchOutcome. - */ - const DirectoryPatchOutcome = function DirectoryPatchOutcome(template) { - - // Use empty object by default - template = template || {}; - - /** - * The operation to apply to the objects indicated by the path. Valid - * operation values are defined within DirectoryPatch.Operation. - * - * @type {String} - */ - this.op = template.op; - - /** - * The path of the object operated on by the corresponding patch in the - * request. - * - * @type {String} - */ - this.path = template.path; - - /** - * The identifier of the object operated on by the corresponding patch - * in the request. If the object was newly created and the PATCH request - * did not fail, this will be the identifier of the newly created object. - * - * @type {String} - */ - this.identifier = template.identifier; - - /** - * The error message associated with the failure, if the patch failed to - * apply. - * - * @type {TranslatableMessage} - */ - this.error = template.error; - - }; - - return DirectoryPatchOutcome; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchResponse.js b/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchResponse.js deleted file mode 100644 index 9538c077ed..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/DirectoryPatchResponse.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the DirectoryPatchResponse class. - */ -angular.module('rest').factory('DirectoryPatchResponse', [ - function defineDirectoryPatchResponse() { - - /** - * An object returned by a PATCH request to a directory REST API, - * representing the successful response to a patch request. - * - * @param {DirectoryPatchResponse|Object} [template={}] - * The object whose properties should be copied within the new - * DirectoryPatchResponse. - */ - const DirectoryPatchResponse = function DirectoryPatchResponse(template) { - - // Use empty object by default - template = template || {}; - - /** - * An outcome for each patch in the corresponding patch request. - * - * @type {DirectoryPatchOutcome[]} - */ - this.patches = template.patches; - - }; - - return DirectoryPatchResponse; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/Error.js b/guacamole/src/main/frontend/src/app/rest/types/Error.js deleted file mode 100644 index 74b28ebae3..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/Error.js +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the Error class. - */ -angular.module('rest').factory('Error', [function defineError() { - - /** - * The object returned by REST API calls when an error occurs. - * - * @constructor - * @param {Error|Object} [template={}] - * The object whose properties should be copied within the new - * Error. - */ - var Error = function Error(template) { - - // Use empty object by default - template = template || {}; - - /** - * A human-readable message describing the error that occurred. - * - * @type String - */ - this.message = template.message; - - /** - * A message which can be translated using the translation service, - * consisting of a translation key and optional set of substitution - * variables. - * - * @type TranslatableMessage - */ - this.translatableMessage = template.translatableMessage; - - /** - * The Guacamole protocol status code associated with the error that - * occurred. This is only valid for errors of type STREAM_ERROR. - * - * @type Number - */ - this.statusCode = template.statusCode; - - /** - * The type string defining which values this parameter may contain, - * as well as what properties are applicable. Valid types are listed - * within Error.Type. - * - * @type String - * @default Error.Type.INTERNAL_ERROR - */ - this.type = template.type || Error.Type.INTERNAL_ERROR; - - /** - * Any parameters which were expected in the original request, or are - * now expected as a result of the original request, if any. If no - * such information is available, this will be null. - * - * @type Field[] - */ - this.expected = template.expected; - - /** - * The outcome for each patch that was submitted as part of the request - * that generated this error, if the request was a directory PATCH - * request. In all other cases, this will be null. - * - * @type DirectoryPatchOutcome[] - */ - this.patches = template.patches || null; - - }; - - /** - * All valid field types. - */ - Error.Type = { - - /** - * The requested operation could not be performed because the request - * itself was malformed. - * - * @type String - */ - BAD_REQUEST : 'BAD_REQUEST', - - /** - * The credentials provided were invalid. - * - * @type String - */ - INVALID_CREDENTIALS : 'INVALID_CREDENTIALS', - - /** - * The credentials provided were not necessarily invalid, but were not - * sufficient to determine validity. - * - * @type String - */ - INSUFFICIENT_CREDENTIALS : 'INSUFFICIENT_CREDENTIALS', - - /** - * An internal server error has occurred. - * - * @type String - */ - INTERNAL_ERROR : 'INTERNAL_ERROR', - - /** - * An object related to the request does not exist. - * - * @type String - */ - NOT_FOUND : 'NOT_FOUND', - - /** - * Permission was denied to perform the requested operation. - * - * @type String - */ - PERMISSION_DENIED : 'PERMISSION_DENIED', - - /** - * An error occurred within an intercepted stream, terminating that - * stream. The Guacamole protocol status code of that error will be - * stored within statusCode. - * - * @type String - */ - STREAM_ERROR : 'STREAM_ERROR' - - }; - - return Error; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/Field.js b/guacamole/src/main/frontend/src/app/rest/types/Field.js deleted file mode 100644 index 195db82db9..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/Field.js +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the Field class. - */ -angular.module('rest').factory('Field', [function defineField() { - - /** - * The object returned by REST API calls when representing the data - * associated with a field or configuration parameter. - * - * @constructor - * @param {Field|Object} [template={}] - * The object whose properties should be copied within the new - * Field. - */ - var Field = function Field(template) { - - // Use empty object by default - template = template || {}; - - /** - * The name which uniquely identifies this parameter. - * - * @type String - */ - this.name = template.name; - - /** - * The type string defining which values this parameter may contain, - * as well as what properties are applicable. Valid types are listed - * within Field.Type. - * - * @type String - * @default Field.Type.TEXT - */ - this.type = template.type || Field.Type.TEXT; - - /** - * All possible legal values for this parameter. - * - * @type String[] - */ - this.options = template.options; - - }; - - /** - * All valid field types. - */ - Field.Type = { - - /** - * The type string associated with parameters that may contain a single - * line of arbitrary text. - * - * @type String - */ - TEXT : 'TEXT', - - /** - * The type string associated with parameters that may contain an email - * address. - * - * @type String - */ - EMAIL : 'EMAIL', - - /** - * The type string associated with parameters that may contain an - * arbitrary string, where that string represents the username of the - * user authenticating with the remote desktop service. - * - * @type String - */ - USERNAME : 'USERNAME', - - /** - * The type string associated with parameters that may contain an - * arbitrary string, where that string represents the password of the - * user authenticating with the remote desktop service. - * - * @type String - */ - PASSWORD : 'PASSWORD', - - /** - * The type string associated with parameters that may contain only - * numeric values. - * - * @type String - */ - NUMERIC : 'NUMERIC', - - /** - * The type string associated with parameters that may contain only a - * single possible value, where that value enables the parameter's - * effect. It is assumed that each BOOLEAN field will provide exactly - * one possible value (option), which will be the value if that field - * is true. - * - * @type String - */ - BOOLEAN : 'BOOLEAN', - - /** - * The type string associated with parameters that may contain a - * strictly-defined set of possible values. - * - * @type String - */ - ENUM : 'ENUM', - - /** - * The type string associated with parameters that may contain any - * number of lines of arbitrary text. - * - * @type String - */ - MULTILINE : 'MULTILINE', - - /** - * The type string associated with parameters that may contain timezone - * IDs. Valid timezone IDs are dictated by Java: - * http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#getAvailableIDs%28%29 - * - * @type String - */ - TIMEZONE : 'TIMEZONE', - - /** - * The type string associated with parameters that may contain dates. - * The format of the date is standardized as YYYY-MM-DD, zero-padded. - * - * @type String - */ - DATE : 'DATE', - - /** - * The type string associated with parameters that may contain times. - * The format of the time is stnadardized as HH:MM:DD, zero-padded, - * 24-hour. - * - * @type String - */ - TIME : 'TIME', - - /** - * An HTTP query parameter which is expected to be embedded in the URL - * given to a user. - * - * @type String - */ - QUERY_PARAMETER : 'QUERY_PARAMETER', - - /** - * The type string associated with parameters that may contain color - * schemes accepted by the Guacamole server terminal emulator and - * protocols which leverage it. - * - * @type String - */ - TERMINAL_COLOR_SCHEME : 'TERMINAL_COLOR_SCHEME' - - }; - - return Field; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/Form.js b/guacamole/src/main/frontend/src/app/rest/types/Form.js deleted file mode 100644 index 215a964afd..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/Form.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the Form class. - */ -angular.module('rest').factory('Form', [function defineForm() { - - /** - * The object returned by REST API calls when representing the data - * associated with a form or set of configuration parameters. - * - * @constructor - * @param {Form|Object} [template={}] - * The object whose properties should be copied within the new - * Form. - */ - var Form = function Form(template) { - - // Use empty object by default - template = template || {}; - - /** - * The name which uniquely identifies this form, or null if this form - * has no name. - * - * @type String - */ - this.name = template.name; - - /** - * All fields contained within this form. - * - * @type Field[] - */ - this.fields = template.fields || []; - - }; - - return Form; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/PermissionFlagSet.js b/guacamole/src/main/frontend/src/app/rest/types/PermissionFlagSet.js deleted file mode 100644 index f79e3b9649..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/PermissionFlagSet.js +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the PermissionFlagSet class. - */ -angular.module('rest').factory('PermissionFlagSet', ['PermissionSet', - function definePermissionFlagSet(PermissionSet) { - - /** - * Alternative view of a @link{PermissionSet} which allows manipulation of - * each permission through the setting (or retrieval) of boolean property - * values. - * - * @constructor - * @param {PermissionFlagSet|Object} template - * The object whose properties should be copied within the new - * PermissionFlagSet. - */ - var PermissionFlagSet = function PermissionFlagSet(template) { - - // Use empty object by default - template = template || {}; - - /** - * The granted state of each system permission, as a map of system - * permission type string to boolean value. A particular permission is - * granted if its corresponding boolean value is set to true. Valid - * permission type strings are defined within - * PermissionSet.SystemPermissionType. Permissions which are not - * granted may be set to false, but this is not required. - * - * @type Object. - */ - this.systemPermissions = template.systemPermissions || {}; - - /** - * The granted state of each permission for each connection, as a map - * of object permission type string to permission map. The permission - * map is, in turn, a map of connection identifier to boolean value. A - * particular permission is granted if its corresponding boolean value - * is set to true. Valid permission type strings are defined within - * PermissionSet.ObjectPermissionType. Permissions which are not - * granted may be set to false, but this is not required. - * - * @type Object.> - */ - this.connectionPermissions = template.connectionPermissions || { - 'READ' : {}, - 'UPDATE' : {}, - 'DELETE' : {}, - 'ADMINISTER' : {} - }; - - /** - * The granted state of each permission for each connection group, as a - * map of object permission type string to permission map. The - * permission map is, in turn, a map of connection group identifier to - * boolean value. A particular permission is granted if its - * corresponding boolean value is set to true. Valid permission type - * strings are defined within PermissionSet.ObjectPermissionType. - * Permissions which are not granted may be set to false, but this is - * not required. - * - * @type Object.> - */ - this.connectionGroupPermissions = template.connectionGroupPermissions || { - 'READ' : {}, - 'UPDATE' : {}, - 'DELETE' : {}, - 'ADMINISTER' : {} - }; - - /** - * The granted state of each permission for each sharing profile, as a - * map of object permission type string to permission map. The - * permission map is, in turn, a map of sharing profile identifier to - * boolean value. A particular permission is granted if its - * corresponding boolean value is set to true. Valid permission type - * strings are defined within PermissionSet.ObjectPermissionType. - * Permissions which are not granted may be set to false, but this is - * not required. - * - * @type Object.> - */ - this.sharingProfilePermissions = template.sharingProfilePermissions || { - 'READ' : {}, - 'UPDATE' : {}, - 'DELETE' : {}, - 'ADMINISTER' : {} - }; - - /** - * The granted state of each permission for each active connection, as - * a map of object permission type string to permission map. The - * permission map is, in turn, a map of active connection identifier to - * boolean value. A particular permission is granted if its - * corresponding boolean value is set to true. Valid permission type - * strings are defined within PermissionSet.ObjectPermissionType. - * Permissions which are not granted may be set to false, but this is - * not required. - * - * @type Object.> - */ - this.activeConnectionPermissions = template.activeConnectionPermissions || { - 'READ' : {}, - 'UPDATE' : {}, - 'DELETE' : {}, - 'ADMINISTER' : {} - }; - - /** - * The granted state of each permission for each user, as a map of - * object permission type string to permission map. The permission map - * is, in turn, a map of username to boolean value. A particular - * permission is granted if its corresponding boolean value is set to - * true. Valid permission type strings are defined within - * PermissionSet.ObjectPermissionType. Permissions which are not - * granted may be set to false, but this is not required. - * - * @type Object.> - */ - this.userPermissions = template.userPermissions || { - 'READ' : {}, - 'UPDATE' : {}, - 'DELETE' : {}, - 'ADMINISTER' : {} - }; - - /** - * The granted state of each permission for each user group, as a map of - * object permission type string to permission map. The permission map - * is, in turn, a map of group identifier to boolean value. A particular - * permission is granted if its corresponding boolean value is set to - * true. Valid permission type strings are defined within - * PermissionSet.ObjectPermissionType. Permissions which are not - * granted may be set to false, but this is not required. - * - * @type Object.> - */ - this.userGroupPermissions = template.userGroupPermissions || { - 'READ' : {}, - 'UPDATE' : {}, - 'DELETE' : {}, - 'ADMINISTER' : {} - }; - - }; - - /** - * Iterates through all permissions in the given permission map, setting - * the corresponding permission flags in the given permission flag map. - * - * @param {Object.} permMap - * Map of object identifiers to the set of granted permissions. Each - * permission is represented by a string listed within - * PermissionSet.ObjectPermissionType. - * - * @param {Object.>} flagMap - * Map of permission type strings to identifier/flag pairs representing - * whether the permission of that type is granted for the object having - * having the associated identifier. - */ - var addObjectPermissions = function addObjectPermissions(permMap, flagMap) { - - // For each defined identifier in the permission map - for (var identifier in permMap) { - - // Pull the permission array and loop through each permission - var permissions = permMap[identifier]; - permissions.forEach(function addObjectPermission(type) { - - // Get identifier/flag mapping, creating first if necessary - var objectFlags = flagMap[type] = flagMap[type] || {}; - - // Set flag for current permission - objectFlags[identifier] = true; - - }); - - } - - }; - - /** - * Creates a new PermissionFlagSet, populating it with all the permissions - * indicated as granted within the given PermissionSet. - * - * @param {PermissionSet} permissionSet - * The PermissionSet containing the permissions to be copied into a new - * PermissionFlagSet. - * - * @returns {PermissionFlagSet} - * A new PermissionFlagSet containing flags representing all granted - * permissions from the given PermissionSet. - */ - PermissionFlagSet.fromPermissionSet = function fromPermissionSet(permissionSet) { - - var permissionFlagSet = new PermissionFlagSet(); - - // Add all granted system permissions - permissionSet.systemPermissions.forEach(function addSystemPermission(type) { - permissionFlagSet.systemPermissions[type] = true; - }); - - // Add all granted connection permissions - addObjectPermissions(permissionSet.connectionPermissions, permissionFlagSet.connectionPermissions); - - // Add all granted connection group permissions - addObjectPermissions(permissionSet.connectionGroupPermissions, permissionFlagSet.connectionGroupPermissions); - - // Add all granted sharing profile permissions - addObjectPermissions(permissionSet.sharingProfilePermissions, permissionFlagSet.sharingProfilePermissions); - - // Add all granted active connection permissions - addObjectPermissions(permissionSet.activeConnectionPermissions, permissionFlagSet.activeConnectionPermissions); - - // Add all granted user permissions - addObjectPermissions(permissionSet.userPermissions, permissionFlagSet.userPermissions); - - // Add all granted user group permissions - addObjectPermissions(permissionSet.userGroupPermissions, permissionFlagSet.userGroupPermissions); - - return permissionFlagSet; - - }; - - return PermissionFlagSet; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/PermissionPatch.js b/guacamole/src/main/frontend/src/app/rest/types/PermissionPatch.js deleted file mode 100644 index dda440b5c8..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/PermissionPatch.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the PermissionPatch class. - */ -angular.module('rest').factory('PermissionPatch', [function definePermissionPatch() { - - /** - * The object returned by REST API calls when representing changes to the - * permissions granted to a specific user. - * - * @constructor - * @param {PermissionPatch|Object} [template={}] - * The object whose properties should be copied within the new - * PermissionPatch. - */ - var PermissionPatch = function PermissionPatch(template) { - - // Use empty object by default - template = template || {}; - - /** - * The operation to apply to the permissions indicated by the path. - * Valid operation values are defined within PermissionPatch.Operation. - * - * @type String - */ - this.op = template.op; - - /** - * The path of the permissions to modify. Depending on the type of the - * permission, this will be either "/connectionPermissions/ID", - * "/connectionGroupPermissions/ID", "/userPermissions/ID", or - * "/systemPermissions", where "ID" is the identifier of the object - * to which the permissions apply, if any. - * - * @type String - */ - this.path = template.path; - - /** - * The permissions being added or removed. If the permission applies to - * an object, such as a connection or connection group, this will be a - * value from PermissionSet.ObjectPermissionType. If the permission - * applies to the system as a whole (the path is "/systemPermissions"), - * this will be a value from PermissionSet.SystemPermissionType. - * - * @type String - */ - this.value = template.value; - - }; - - /** - * All valid patch operations for permissions. Currently, only add and - * remove are supported. - */ - PermissionPatch.Operation = { - - /** - * Adds (grants) the specified permission. - */ - ADD : "add", - - /** - * Removes (revokes) the specified permission. - */ - REMOVE : "remove" - - }; - - return PermissionPatch; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/PermissionSet.js b/guacamole/src/main/frontend/src/app/rest/types/PermissionSet.js deleted file mode 100644 index 2a549456bb..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/PermissionSet.js +++ /dev/null @@ -1,826 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the PermissionSet class. - */ -angular.module('rest').factory('PermissionSet', [function definePermissionSet() { - - /** - * The object returned by REST API calls when representing the permissions - * granted to a specific user. - * - * @constructor - * @param {PermissionSet|Object} [template={}] - * The object whose properties should be copied within the new - * PermissionSet. - */ - var PermissionSet = function PermissionSet(template) { - - // Use empty object by default - template = template || {}; - - /** - * Map of connection identifiers to the corresponding array of granted - * permissions. Each permission is represented by a string listed - * within PermissionSet.ObjectPermissionType. - * - * @type Object. - */ - this.connectionPermissions = template.connectionPermissions || {}; - - /** - * Map of connection group identifiers to the corresponding array of - * granted permissions. Each permission is represented by a string - * listed within PermissionSet.ObjectPermissionType. - * - * @type Object. - */ - this.connectionGroupPermissions = template.connectionGroupPermissions || {}; - - /** - * Map of sharing profile identifiers to the corresponding array of - * granted permissions. Each permission is represented by a string - * listed within PermissionSet.ObjectPermissionType. - * - * @type Object. - */ - this.sharingProfilePermissions = template.sharingProfilePermissions || {}; - - /** - * Map of active connection identifiers to the corresponding array of - * granted permissions. Each permission is represented by a string - * listed within PermissionSet.ObjectPermissionType. - * - * @type Object. - */ - this.activeConnectionPermissions = template.activeConnectionPermissions || {}; - - /** - * Map of user identifiers to the corresponding array of granted - * permissions. Each permission is represented by a string listed - * within PermissionSet.ObjectPermissionType. - * - * @type Object. - */ - this.userPermissions = template.userPermissions || {}; - - /** - * Map of user group identifiers to the corresponding array of granted - * permissions. Each permission is represented by a string listed - * within PermissionSet.ObjectPermissionType. - * - * @type Object. - */ - this.userGroupPermissions = template.userGroupPermissions || {}; - - /** - * Array of granted system permissions. Each permission is represented - * by a string listed within PermissionSet.SystemPermissionType. - * - * @type String[] - */ - this.systemPermissions = template.systemPermissions || []; - - }; - - /** - * Valid object permission type strings. - */ - PermissionSet.ObjectPermissionType = { - - /** - * Permission to read from the specified object. - */ - READ : "READ", - - /** - * Permission to update the specified object. - */ - UPDATE : "UPDATE", - - /** - * Permission to delete the specified object. - */ - DELETE : "DELETE", - - /** - * Permission to administer the specified object - */ - ADMINISTER : "ADMINISTER" - - }; - - /** - * Valid system permission type strings. - */ - PermissionSet.SystemPermissionType = { - - /** - * Permission to administer the entire system. - */ - ADMINISTER : "ADMINISTER", - - /** - * Permission to view connection and user records for the entire system. - */ - AUDIT : "AUDIT", - - /** - * Permission to create new users. - */ - CREATE_USER : "CREATE_USER", - - /** - * Permission to create new user groups. - */ - CREATE_USER_GROUP : "CREATE_USER_GROUP", - - /** - * Permission to create new connections. - */ - CREATE_CONNECTION : "CREATE_CONNECTION", - - /** - * Permission to create new connection groups. - */ - CREATE_CONNECTION_GROUP : "CREATE_CONNECTION_GROUP", - - /** - * Permission to create new sharing profiles. - */ - CREATE_SHARING_PROFILE : "CREATE_SHARING_PROFILE" - - }; - - /** - * Returns whether the given permission is granted for at least one - * arbitrary object, regardless of ID. - * - * @param {Object.} permMap - * The permission map to check, where each entry maps an object - * identifer to the array of granted permissions. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - var containsPermission = function containsPermission(permMap, type) { - - // Search all identifiers for given permission - for (var identifier in permMap) { - - // If permission is granted, then no further searching is necessary - if (permMap[identifier].indexOf(type) !== -1) - return true; - - } - - // No such permission exists - return false; - - }; - - /** - * Returns whether the given permission is granted for the arbitrary - * object having the given ID. If no ID is given, this function determines - * whether the permission is granted at all for any such arbitrary object. - * - * @param {Object.} permMap - * The permission map to check, where each entry maps an object - * identifer to the array of granted permissions. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} [identifier] - * The identifier of the object to which the permission applies. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - var hasPermission = function hasPermission(permMap, type, identifier) { - - // No permission if no permission map at all - if (!permMap) - return false; - - // If no identifier given, search ignoring the identifier - if (!identifier) - return containsPermission(permMap, type); - - // If identifier not present at all, there are no such permissions - if (!(identifier in permMap)) - return false; - - return permMap[identifier].indexOf(type) !== -1; - - }; - - /** - * Returns whether the given permission is granted for the connection - * having the given ID. - * - * @param {PermissionSet|Object} permSet - * The permission set to check. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the connection to which the permission applies. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - PermissionSet.hasConnectionPermission = function hasConnectionPermission(permSet, type, identifier) { - return hasPermission(permSet.connectionPermissions, type, identifier); - }; - - /** - * Returns whether the given permission is granted for the connection group - * having the given ID. - * - * @param {PermissionSet|Object} permSet - * The permission set to check. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the connection group to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - PermissionSet.hasConnectionGroupPermission = function hasConnectionGroupPermission(permSet, type, identifier) { - return hasPermission(permSet.connectionGroupPermissions, type, identifier); - }; - - /** - * Returns whether the given permission is granted for the sharing profile - * having the given ID. - * - * @param {PermissionSet|Object} permSet - * The permission set to check. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the sharing profile to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - PermissionSet.hasSharingProfilePermission = function hasSharingProfilePermission(permSet, type, identifier) { - return hasPermission(permSet.sharingProfilePermissions, type, identifier); - }; - - /** - * Returns whether the given permission is granted for the active - * connection having the given ID. - * - * @param {PermissionSet|Object} permSet - * The permission set to check. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the active connection to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - PermissionSet.hasActiveConnectionPermission = function hasActiveConnectionPermission(permSet, type, identifier) { - return hasPermission(permSet.activeConnectionPermissions, type, identifier); - }; - - /** - * Returns whether the given permission is granted for the user having the - * given ID. - * - * @param {PermissionSet|Object} permSet - * The permission set to check. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user to which the permission applies. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - PermissionSet.hasUserPermission = function hasUserPermission(permSet, type, identifier) { - return hasPermission(permSet.userPermissions, type, identifier); - }; - - /** - * Returns whether the given permission is granted for the user group having - * the given identifier. - * - * @param {PermissionSet|Object} permSet - * The permission set to check. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user group to which the permission applies. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - PermissionSet.hasUserGroupPermission = function hasUserGroupPermission(permSet, type, identifier) { - return hasPermission(permSet.userGroupPermissions, type, identifier); - }; - - /** - * Returns whether the given permission is granted at the system level. - * - * @param {PermissionSet|Object} permSet - * The permission set to check. - * - * @param {String} type - * The permission to search for, as defined by - * PermissionSet.SystemPermissionType. - * - * @returns {Boolean} - * true if the permission is present (granted), false otherwise. - */ - PermissionSet.hasSystemPermission = function hasSystemPermission(permSet, type) { - if (!permSet.systemPermissions) return false; - return permSet.systemPermissions.indexOf(type) !== -1; - }; - - /** - * Adds the given system permission to the given permission set, if not - * already present. If the permission is already present, this function has - * no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.SystemPermissionType. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - PermissionSet.addSystemPermission = function addSystemPermission(permSet, type) { - - permSet.systemPermissions = permSet.systemPermissions || []; - - // Add permission, if it doesn't already exist - if (permSet.systemPermissions.indexOf(type) === -1) { - permSet.systemPermissions.push(type); - return true; - } - - // Permission already present - return false; - - }; - - /** - * Removes the given system permission from the given permission set, if - * present. If the permission is not present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.SystemPermissionType. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - PermissionSet.removeSystemPermission = function removeSystemPermission(permSet, type) { - - permSet.systemPermissions = permSet.systemPermissions || []; - - // Remove permission, if it exists - var permLocation = permSet.systemPermissions.indexOf(type); - if (permLocation !== -1) { - permSet.systemPermissions.splice(permLocation, 1); - return true; - } - - // Permission not present - return false; - - }; - - /** - * Adds the given permission applying to the arbitrary object with the - * given ID to the given permission set, if not already present. If the - * permission is already present, this function has no effect. - * - * @param {Object.} permMap - * The permission map to modify, where each entry maps an object - * identifer to the array of granted permissions. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the arbitrary object to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - var addObjectPermission = function addObjectPermission(permMap, type, identifier) { - - // Pull array of permissions, creating it if necessary - var permArray = permMap[identifier] = permMap[identifier] || []; - - // Add permission, if it doesn't already exist - if (permArray.indexOf(type) === -1) { - permArray.push(type); - return true; - } - - // Permission already present - return false; - - }; - - /** - * Removes the given permission applying to the arbitrary object with the - * given ID from the given permission set, if present. If the permission is - * not present, this function has no effect. - * - * @param {Object.} permMap - * The permission map to modify, where each entry maps an object - * identifer to the array of granted permissions. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the arbitrary object to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - var removeObjectPermission = function removeObjectPermission(permMap, type, identifier) { - - // Pull array of permissions - var permArray = permMap[identifier]; - - // If no permissions present at all, nothing to remove - if (!(identifier in permMap)) - return false; - - // Remove permission, if it exists - var permLocation = permArray.indexOf(type); - if (permLocation !== -1) { - permArray.splice(permLocation, 1); - return true; - } - - // Permission not present - return false; - - }; - - /** - * Adds the given connection permission applying to the connection with - * the given ID to the given permission set, if not already present. If the - * permission is already present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the connection to which the permission applies. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - PermissionSet.addConnectionPermission = function addConnectionPermission(permSet, type, identifier) { - permSet.connectionPermissions = permSet.connectionPermissions || {}; - return addObjectPermission(permSet.connectionPermissions, type, identifier); - }; - - /** - * Removes the given connection permission applying to the connection with - * the given ID from the given permission set, if present. If the - * permission is not present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the connection to which the permission applies. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - PermissionSet.removeConnectionPermission = function removeConnectionPermission(permSet, type, identifier) { - permSet.connectionPermissions = permSet.connectionPermissions || {}; - return removeObjectPermission(permSet.connectionPermissions, type, identifier); - }; - - /** - * Adds the given connection group permission applying to the connection - * group with the given ID to the given permission set, if not already - * present. If the permission is already present, this function has no - * effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the connection group to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - PermissionSet.addConnectionGroupPermission = function addConnectionGroupPermission(permSet, type, identifier) { - permSet.connectionGroupPermissions = permSet.connectionGroupPermissions || {}; - return addObjectPermission(permSet.connectionGroupPermissions, type, identifier); - }; - - /** - * Removes the given connection group permission applying to the connection - * group with the given ID from the given permission set, if present. If - * the permission is not present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the connection group to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - PermissionSet.removeConnectionGroupPermission = function removeConnectionGroupPermission(permSet, type, identifier) { - permSet.connectionGroupPermissions = permSet.connectionGroupPermissions || {}; - return removeObjectPermission(permSet.connectionGroupPermissions, type, identifier); - }; - - /** - * Adds the given sharing profile permission applying to the sharing profile - * with the given ID to the given permission set, if not already present. If - * the permission is already present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the sharing profile to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - PermissionSet.addSharingProfilePermission = function addSharingProfilePermission(permSet, type, identifier) { - permSet.sharingProfilePermissions = permSet.sharingProfilePermissions || {}; - return addObjectPermission(permSet.sharingProfilePermissions, type, identifier); - }; - - /** - * Removes the given sharing profile permission applying to the sharing - * profile with the given ID from the given permission set, if present. If - * the permission is not present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the sharing profile to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - PermissionSet.removeSharingProfilePermission = function removeSharingProfilePermission(permSet, type, identifier) { - permSet.sharingProfilePermissions = permSet.sharingProfilePermissions || {}; - return removeObjectPermission(permSet.sharingProfilePermissions, type, identifier); - }; - - /** - * Adds the given active connection permission applying to the connection - * group with the given ID to the given permission set, if not already - * present. If the permission is already present, this function has no - * effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the active connection to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - PermissionSet.addActiveConnectionPermission = function addActiveConnectionPermission(permSet, type, identifier) { - permSet.activeConnectionPermissions = permSet.activeConnectionPermissions || {}; - return addObjectPermission(permSet.activeConnectionPermissions, type, identifier); - }; - - /** - * Removes the given active connection permission applying to the - * connection group with the given ID from the given permission set, if - * present. If the permission is not present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the active connection to which the permission - * applies. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - PermissionSet.removeActiveConnectionPermission = function removeActiveConnectionPermission(permSet, type, identifier) { - permSet.activeConnectionPermissions = permSet.activeConnectionPermissions || {}; - return removeObjectPermission(permSet.activeConnectionPermissions, type, identifier); - }; - - /** - * Adds the given user permission applying to the user with the given ID to - * the given permission set, if not already present. If the permission is - * already present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user to which the permission applies. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - PermissionSet.addUserPermission = function addUserPermission(permSet, type, identifier) { - permSet.userPermissions = permSet.userPermissions || {}; - return addObjectPermission(permSet.userPermissions, type, identifier); - }; - - /** - * Removes the given user permission applying to the user with the given ID - * from the given permission set, if present. If the permission is not - * present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user to whom the permission applies. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - PermissionSet.removeUserPermission = function removeUserPermission(permSet, type, identifier) { - permSet.userPermissions = permSet.userPermissions || {}; - return removeObjectPermission(permSet.userPermissions, type, identifier); - }; - - /** - * Adds the given user group permission applying to the user group with the - * given identifier to the given permission set, if not already present. If - * the permission is already present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to add, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user group to which the permission applies. - * - * @returns {Boolean} - * true if the permission was added, false if the permission was - * already present in the given permission set. - */ - PermissionSet.addUserGroupPermission = function addUserGroupPermission(permSet, type, identifier) { - permSet.userGroupPermissions = permSet.userGroupPermissions || {}; - return addObjectPermission(permSet.userGroupPermissions, type, identifier); - }; - - /** - * Removes the given user group permission applying to the user group with - * the given identifier from the given permission set, if present. If the - * permission is not present, this function has no effect. - * - * @param {PermissionSet} permSet - * The permission set to modify. - * - * @param {String} type - * The permission to remove, as defined by - * PermissionSet.ObjectPermissionType. - * - * @param {String} identifier - * The identifier of the user group to whom the permission applies. - * - * @returns {Boolean} - * true if the permission was removed, false if the permission was not - * present in the given permission set. - */ - PermissionSet.removeUserGroupPermission = function removeUserGroupPermission(permSet, type, identifier) { - permSet.userGroupPermissions = permSet.userGroupPermissions || {}; - return removeObjectPermission(permSet.userGroupPermissions, type, identifier); - }; - - return PermissionSet; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/Protocol.js b/guacamole/src/main/frontend/src/app/rest/types/Protocol.js deleted file mode 100644 index 0b86d5b2db..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/Protocol.js +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the Protocol class. - */ -angular.module('rest').factory('Protocol', ['$injector', function defineProtocol($injector) { - - // Required services - var translationStringService = $injector.get('translationStringService'); - - /** - * The object returned by REST API calls when representing the data - * associated with a supported remote desktop protocol. - * - * @constructor - * @param {Protocol|Object} [template={}] - * The object whose properties should be copied within the new - * Protocol. - */ - var Protocol = function Protocol(template) { - - // Use empty object by default - template = template || {}; - - /** - * The name which uniquely identifies this protocol. - * - * @type String - */ - this.name = template.name; - - /** - * An array of forms describing all known parameters for a connection - * using this protocol, including their types and other information. - * - * @type Form[] - * @default [] - */ - this.connectionForms = template.connectionForms || []; - - /** - * An array of forms describing all known parameters relevant to a - * sharing profile whose primary connection uses this protocol, - * including their types, and other information. - * - * @type Form[] - * @default [] - */ - this.sharingProfileForms = template.sharingProfileForms || []; - - }; - - /** - * Returns the translation string namespace for the protocol having the - * given name. The namespace will be of the form: - * - * PROTOCOL_NAME - * - * where NAME is the protocol name transformed via - * translationStringService.canonicalize(). - * - * @param {String} protocolName - * The name of the protocol. - * - * @returns {String} - * The translation namespace for the protocol specified, or null if no - * namespace could be generated. - */ - Protocol.getNamespace = function getNamespace(protocolName) { - - // Do not generate a namespace if no protocol is selected - if (!protocolName) - return null; - - return 'PROTOCOL_' + translationStringService.canonicalize(protocolName); - - }; - - /** - * Given the internal name of a protocol, produces the translation string - * for the localized version of that protocol's name. The translation - * string will be of the form: - * - * NAMESPACE.NAME - * - * where NAMESPACE is the namespace generated from - * $scope.getNamespace(). - * - * @param {String} protocolName - * The name of the protocol. - * - * @returns {String} - * The translation string which produces the localized name of the - * protocol specified. - */ - Protocol.getName = function getProtocolName(protocolName) { - return Protocol.getNamespace(protocolName) + '.NAME'; - }; - - return Protocol; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/RelatedObjectPatch.js b/guacamole/src/main/frontend/src/app/rest/types/RelatedObjectPatch.js deleted file mode 100644 index c06493816a..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/RelatedObjectPatch.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the RelatedObjectPatch class. - */ -angular.module('rest').factory('RelatedObjectPatch', [function defineRelatedObjectPatch() { - - /** - * The object returned by REST API calls when representing changes to an - * arbitrary set of objects which share some common relation. - * - * @constructor - * @param {RelatedObjectPatch|Object} [template={}] - * The object whose properties should be copied within the new - * RelatedObjectPatch. - */ - var RelatedObjectPatch = function RelatedObjectPatch(template) { - - // Use empty object by default - template = template || {}; - - /** - * The operation to apply to the objects indicated by the path. Valid - * operation values are defined within RelatedObjectPatch.Operation. - * - * @type String - */ - this.op = template.op; - - /** - * The path of the objects to modify. This will always be "/". - * - * @type String - * @default '/' - */ - this.path = template.path || '/'; - - /** - * The identifier of the object being added or removed from the - * relation. - * - * @type String - */ - this.value = template.value; - - }; - - /** - * All valid patch operations for objects sharing some common relation. - * Currently, only add and remove are supported. - */ - RelatedObjectPatch.Operation = { - - /** - * Adds the specified object to the relation. - */ - ADD : "add", - - /** - * Removes the specified object from the relation. - */ - REMOVE : "remove" - - }; - - return RelatedObjectPatch; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/SharingProfile.js b/guacamole/src/main/frontend/src/app/rest/types/SharingProfile.js deleted file mode 100644 index 50f1307d59..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/SharingProfile.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the SharingProfile class. - */ -angular.module('rest').factory('SharingProfile', [function defineSharingProfile() { - - /** - * The object returned by REST API calls when representing the data - * associated with a sharing profile. - * - * @constructor - * @param {SharingProfile|Object} [template={}] - * The object whose properties should be copied within the new - * SharingProfile. - */ - var SharingProfile = function SharingProfile(template) { - - // Use empty object by default - template = template || {}; - - /** - * The unique identifier associated with this sharing profile. - * - * @type String - */ - this.identifier = template.identifier; - - /** - * The unique identifier of the connection that this sharing profile - * can be used to share. - * - * @type String - */ - this.primaryConnectionIdentifier = template.primaryConnectionIdentifier; - - /** - * The human-readable name of this sharing profile, which is not - * necessarily unique. - * - * @type String - */ - this.name = template.name; - - /** - * Connection configuration parameters, as dictated by the protocol in - * use by the primary connection, arranged as name/value pairs. This - * information may not be available until directly queried. If this - * information is unavailable, this property will be null or undefined. - * - * @type Object. - */ - this.parameters = template.parameters; - - /** - * Arbitrary name/value pairs which further describe this sharing - * profile. The semantics and validity of these attributes are dictated - * by the extension which defines them. - * - * @type Object. - */ - this.attributes = template.attributes || {}; - - }; - - return SharingProfile; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/TranslatableMessage.js b/guacamole/src/main/frontend/src/app/rest/types/TranslatableMessage.js deleted file mode 100644 index 454224840c..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/TranslatableMessage.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the TranslatableMessage class. - */ -angular.module('rest').factory('TranslatableMessage', [function defineTranslatableMessage() { - - /** - * The object returned by REST API calls when representing a message which - * can be translated using the translation service, providing a translation - * key and optional set of values to be substituted into the translation - * string associated with that key. - * - * @constructor - * @param {TranslatableMessage|Object} [template={}] - * The object whose properties should be copied within the new - * TranslatableMessage. - */ - var TranslatableMessage = function TranslatableMessage(template) { - - // Use empty object by default - template = template || {}; - - /** - * The key associated with the translation string that used when - * displaying this message. - * - * @type String - */ - this.key = template.key; - - /** - * The object which should be passed through to the translation service - * for the sake of variable substitution. Each property of the provided - * object will be substituted for the variable of the same name within - * the translation string. - * - * @type Object - */ - this.variables = template.variables; - - }; - - return TranslatableMessage; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/User.js b/guacamole/src/main/frontend/src/app/rest/types/User.js deleted file mode 100644 index c74d1cd8a1..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/User.js +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the User class. - */ -angular.module('rest').factory('User', [function defineUser() { - - /** - * The object returned by REST API calls when representing the data - * associated with a user. - * - * @constructor - * @param {User|Object} [template={}] - * The object whose properties should be copied within the new - * User. - */ - var User = function User(template) { - - // Use empty object by default - template = template || {}; - - /** - * The name which uniquely identifies this user. - * - * @type String - */ - this.username = template.username; - - /** - * This user's password. Note that the REST API may not populate this - * property for the sake of security. In most cases, it's not even - * possible for the authentication layer to retrieve the user's true - * password. - * - * @type String - */ - this.password = template.password; - - /** - * The time that this user was last logged in, in milliseconds since - * 1970-01-01 00:00:00 UTC. If this information is unknown or - * unavailable, this will be null. - * - * @type Number - */ - this.lastActive = template.lastActive; - - /** - * True if this user account is disabled, otherwise false. - * - * @type boolean - */ - this.disabled = template.disabled; - - /** - * Arbitrary name/value pairs which further describe this user. The - * semantics and validity of these attributes are dictated by the - * extension which defines them. - * - * @type Object. - */ - this.attributes = template.attributes || {}; - - }; - - /** - * All standard attribute names with semantics defined by the Guacamole web - * application. Extensions may additionally define their own attributes - * with completely arbitrary names and semantics, so long as those names do - * not conflict with the names listed here. All standard attribute names - * have a "guac-" prefix to avoid such conflicts. - */ - User.Attributes = { - - /** - * The user's full name. - * - * @type String - */ - FULL_NAME : 'guac-full-name', - - /** - * The email address of the user. - * - * @type String - */ - EMAIL_ADDRESS : 'guac-email-address', - - /** - * The organization, company, group, etc. that the user belongs to. - * - * @type String - */ - ORGANIZATION : 'guac-organization', - - /** - * The role that the user has at the organization, company, group, etc. - * they belong to. - * - * @type String - */ - ORGANIZATIONAL_ROLE : 'guac-organizational-role' - - }; - - return User; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/UserCredentials.js b/guacamole/src/main/frontend/src/app/rest/types/UserCredentials.js deleted file mode 100644 index dc6c75e3d3..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/UserCredentials.js +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the UserCredentials class. - */ -angular.module('rest').factory('UserCredentials', ['$injector', function defineUserCredentials($injector) { - - // Required services - var $window = $injector.get('$window'); - - // Required types - var Field = $injector.get('Field'); - - /** - * The object returned by REST API calls to define a full set of valid - * credentials, including field definitions and corresponding expected - * values. - * - * @constructor - * @param {UserCredentials|Object} [template={}] - * The object whose properties should be copied within the new - * UserCredentials. - */ - var UserCredentials = function UserCredentials(template) { - - // Use empty object by default - template = template || {}; - - /** - * Any parameters which should be provided when these credentials are - * submitted. If no such information is available, this will be null. - * - * @type Field[] - */ - this.expected = template.expected; - - /** - * A map of all field values by field name. The fields having the names - * used within this map should be defined within the @link{Field} array - * stored under the @link{expected} property. - * - * @type Object. - */ - this.values = template.values; - - }; - - /** - * Generates a query string containing all QUERY_PARAMETER fields from the - * given UserCredentials object, along with their corresponding values. The - * parameter names and values will be appropriately URL-encoded and - * separated by ampersands. - * - * @param {UserCredentials} userCredentials - * The UserCredentials to retrieve all query parameters from. - * - * @returns {String} - * A string containing all QUERY_PARAMETER fields as name/value pairs - * separated by ampersands, where each name is separated by the value - * by an equals sign. - */ - UserCredentials.getQueryParameters = function getQueryParameters(userCredentials) { - - // Build list of parameter name/value pairs - var parameters = []; - angular.forEach(userCredentials.expected, function addQueryParameter(field) { - - // Only add query parameters - if (field.type !== Field.Type.QUERY_PARAMETER) - return; - - // Pull parameter name and value - var name = field.name; - var value = userCredentials.values[name]; - - // Properly encode name/value pair - parameters.push(encodeURIComponent(name) + '=' + encodeURIComponent(value)); - - }); - - // Separate each name/value pair by an ampersand - return parameters.join('&'); - - }; - - /** - * Returns a fully-qualified, absolute URL to Guacamole prepopulated with - * any query parameters dictated by the QUERY_PARAMETER fields defined in - * the given UserCredentials. - * - * @param {UserCredentials} userCredentials - * The UserCredentials to retrieve all query parameters from. - * - * @returns {String} - * A fully-qualified, absolute URL to Guacamole prepopulated with the - * query parameters dictated by the given UserCredentials. - */ - UserCredentials.getLink = function getLink(userCredentials) { - - // Work-around for IE missing window.location.origin - if (!$window.location.origin) - var linkOrigin = $window.location.protocol + '//' + $window.location.hostname + ($window.location.port ? (':' + $window.location.port) : ''); - else - var linkOrigin = $window.location.origin; - - // Build base link - var link = linkOrigin - + $window.location.pathname - + '#/'; - - // Add any required parameters - var params = UserCredentials.getQueryParameters(userCredentials); - if (params) - link += '?' + params; - - return link; - - }; - - return UserCredentials; - -}]); diff --git a/guacamole/src/main/frontend/src/app/rest/types/UserGroup.js b/guacamole/src/main/frontend/src/app/rest/types/UserGroup.js deleted file mode 100644 index e3bc7eae23..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/UserGroup.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the UserGroup class. - */ -angular.module('rest').factory('UserGroup', [function defineUserGroup() { - - /** - * The object returned by REST API calls when representing the data - * associated with a user group. - * - * @constructor - * @param {UserGroup|Object} [template={}] - * The object whose properties should be copied within the new - * UserGroup. - */ - var UserGroup = function UserGroup(template) { - - // Use empty object by default - template = template || {}; - - /** - * The name which uniquely identifies this user group. - * - * @type String - */ - this.identifier = template.identifier; - - /** - * True if this user group is disabled, otherwise false. - * - * @type boolean - */ - this.disabled = template.disabled; - - /** - * Arbitrary name/value pairs which further describe this user group. - * The semantics and validity of these attributes are dictated by the - * extension which defines them. - * - * @type Object. - */ - this.attributes = template.attributes || {}; - - }; - - return UserGroup; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/rest/types/UserPasswordUpdate.js b/guacamole/src/main/frontend/src/app/rest/types/UserPasswordUpdate.js deleted file mode 100644 index e76e761989..0000000000 --- a/guacamole/src/main/frontend/src/app/rest/types/UserPasswordUpdate.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service which defines the UserPasswordUpdate class. - */ -angular.module('rest').factory('UserPasswordUpdate', [function defineUserPasswordUpdate() { - - /** - * The object sent to the REST API when representing the data - * associated with a user password update. - * - * @constructor - * @param {UserPasswordUpdate|Object} [template={}] - * The object whose properties should be copied within the new - * UserPasswordUpdate. - */ - var UserPasswordUpdate = function UserPasswordUpdate(template) { - - // Use empty object by default - template = template || {}; - - /** - * This user's current password. Required for authenticating the user - * as part of to the password update operation. - * - * @type String - */ - this.oldPassword = template.oldPassword; - - /** - * The new password to set for the user. - * - * @type String - */ - this.newPassword = template.newPassword; - - }; - - return UserPasswordUpdate; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/settings/controllers/connectionHistoryPlayerController.js b/guacamole/src/main/frontend/src/app/settings/controllers/connectionHistoryPlayerController.js deleted file mode 100644 index 12c368be32..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/controllers/connectionHistoryPlayerController.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for the session recording player page. - */ -angular.module('settings').controller('connectionHistoryPlayerController', ['$scope', '$injector', - function connectionHistoryPlayerController($scope, $injector) { - - // Required services - const authenticationService = $injector.get('authenticationService'); - const $routeParams = $injector.get('$routeParams'); - - /** - * The URL of the REST API resource exposing the requested session - * recording. - * - * @type {!string} - */ - const recordingURL = 'api/session/data/' + encodeURIComponent($routeParams.dataSource) - + '/history/connections/' + encodeURIComponent($routeParams.identifier) - + '/logs/' + encodeURIComponent($routeParams.name); - - /** - * The tunnel which should be used to download the Guacamole session - * recording. - * - * @type Guacamole.Tunnel - */ - $scope.tunnel = new Guacamole.StaticHTTPTunnel(recordingURL, false, { - 'Guacamole-Token' : authenticationService.getCurrentToken() - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/controllers/settingsController.js b/guacamole/src/main/frontend/src/app/settings/controllers/settingsController.js deleted file mode 100644 index 9961d292fa..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/controllers/settingsController.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The controller for the general settings page. - */ -angular.module('settings').controller('settingsController', ['$scope', '$injector', - function settingsController($scope, $injector) { - - // Required services - var $routeParams = $injector.get('$routeParams'); - var userPageService = $injector.get('userPageService'); - - /** - * The array of settings pages available to the current user, or null if - * not yet known. - * - * @type Page[] - */ - $scope.settingsPages = null; - - /** - * The currently-selected settings tab. This may be 'users', 'userGroups', - * 'connections', 'history', 'preferences', or 'sessions'. - * - * @type String - */ - $scope.activeTab = $routeParams.tab; - - // Retrieve settings pages - userPageService.getSettingsPages() - .then(function settingsPagesRetrieved(pages) { - $scope.settingsPages = pages; - }); - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnectionHistory.js b/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnectionHistory.js deleted file mode 100644 index f52fc0f9dd..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnectionHistory.js +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for viewing connection history records. - */ -angular.module('settings').directive('guacSettingsConnectionHistory', [function guacSettingsConnectionHistory() { - - return { - // Element only - restrict: 'E', - replace: true, - - scope: { - }, - - templateUrl: 'app/settings/templates/settingsConnectionHistory.html', - controller: ['$scope', '$injector', function settingsConnectionHistoryController($scope, $injector) { - - // Get required types - var ConnectionHistoryEntryWrapper = $injector.get('ConnectionHistoryEntryWrapper'); - var FilterToken = $injector.get('FilterToken'); - var SortOrder = $injector.get('SortOrder'); - - // Get required services - var $filter = $injector.get('$filter'); - var $routeParams = $injector.get('$routeParams'); - var $translate = $injector.get('$translate'); - var csvService = $injector.get('csvService'); - var historyService = $injector.get('historyService'); - var requestService = $injector.get('requestService'); - - /** - * The identifier of the currently-selected data source. - * - * @type String - */ - $scope.dataSource = $routeParams.dataSource; - - /** - * All wrapped matching connection history entries, or null if these - * entries have not yet been retrieved. - * - * @type ConnectionHistoryEntryWrapper[] - */ - $scope.historyEntryWrappers = null; - - /** - * The search terms to use when filtering the history records. - * - * @type String - */ - $scope.searchString = ''; - - /** - * The date format for use for start/end dates. - * - * @type String - */ - $scope.dateFormat = null; - - /** - * SortOrder instance which stores the sort order of the history - * records. - * - * @type SortOrder - */ - $scope.order = new SortOrder([ - '-entry.startDate', - '-duration', - 'entry.username', - 'entry.connectionName', - 'entry.remoteHost' - ]); - - /** - * The names of sortable properties supported by the REST API that - * correspond to the properties that may be stored within - * $scope.order. - * - * @type {!Object.} - */ - const apiSortProperties = { - 'entry.startDate' : 'startDate', - '-entry.startDate' : '-startDate' - }; - - /** - * Converts the given sort predicate to a correponding array of - * sortable properties supported by the REST API. Any properties - * within the predicate that are not supported will be dropped. - * - * @param {!string[]} predicate - * The sort predicate to convert, as exposed by the predicate - * property of SortOrder. - * - * @returns {!string[]} - * A corresponding array of sortable properties, omitting any - * properties not supported by the REST API. - */ - var toAPISortPredicate = function toAPISortPredicate(predicate) { - return predicate - .map((name) => apiSortProperties[name]) - .filter((name) => !!name); - }; - - // Get session date format - $translate('SETTINGS_CONNECTION_HISTORY.FORMAT_DATE') - .then(function dateFormatReceived(retrievedDateFormat) { - - // Store received date format - $scope.dateFormat = retrievedDateFormat; - - }, angular.noop); - - /** - * Returns true if the connection history records have been loaded, - * indicating that information needed to render the page is fully - * loaded. - * - * @returns {Boolean} - * true if the history records have been loaded, false - * otherwise. - * - */ - $scope.isLoaded = function isLoaded() { - return $scope.historyEntryWrappers !== null - && $scope.dateFormat !== null; - }; - - /** - * Returns whether the search has completed but contains no history - * records. This function will return false if there are history - * records in the results OR if the search has not yet completed. - * - * @returns {Boolean} - * true if the search results have been loaded but no history - * records are present, false otherwise. - */ - $scope.isHistoryEmpty = function isHistoryEmpty() { - return $scope.isLoaded() && $scope.historyEntryWrappers.length === 0; - }; - - /** - * Query the API for the connection record history, filtered by - * searchString, and ordered by order. - */ - $scope.search = function search() { - - // Clear current results - $scope.historyEntryWrappers = null; - - // Tokenize search string - var tokens = FilterToken.tokenize($scope.searchString); - - // Transform tokens into list of required string contents - var requiredContents = []; - angular.forEach(tokens, function addRequiredContents(token) { - - // Transform depending on token type - switch (token.type) { - - // For string literals, use parsed token value - case 'LITERAL': - requiredContents.push(token.value); - - // Ignore whitespace - case 'WHITESPACE': - break; - - // For all other token types, use the relevant portion - // of the original search string - default: - requiredContents.push(token.consumed); - - } - - }); - - // Fetch history records - historyService.getConnectionHistory( - $scope.dataSource, - requiredContents, - toAPISortPredicate($scope.order.predicate) - ) - .then(function historyRetrieved(historyEntries) { - - // Wrap all history entries for sake of display - $scope.historyEntryWrappers = []; - angular.forEach(historyEntries, function wrapHistoryEntry(historyEntry) { - $scope.historyEntryWrappers.push(new ConnectionHistoryEntryWrapper($scope.dataSource, historyEntry)); - }); - - }, requestService.DIE); - - }; - - /** - * Initiates a download of a CSV version of the displayed history - * search results. - */ - $scope.downloadCSV = function downloadCSV() { - - // Translate CSV header - $translate([ - 'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_USERNAME', - 'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_STARTDATE', - 'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_DURATION', - 'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_CONNECTION_NAME', - 'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_REMOTEHOST', - 'SETTINGS_CONNECTION_HISTORY.FILENAME_HISTORY_CSV' - ]).then(function headerTranslated(translations) { - - // Initialize records with translated header row - var records = [[ - translations['SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_USERNAME'], - translations['SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_STARTDATE'], - translations['SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_DURATION'], - translations['SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_CONNECTION_NAME'], - translations['SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_REMOTEHOST'] - ]]; - - // Add rows for all history entries, using the same sort - // order as the displayed table - angular.forEach( - $filter('orderBy')( - $scope.historyEntryWrappers, - $scope.order.predicate - ), - function pushRecord(historyEntryWrapper) { - records.push([ - historyEntryWrapper.entry.username, - $filter('date')(historyEntryWrapper.entry.startDate, $scope.dateFormat), - historyEntryWrapper.duration / 1000, - historyEntryWrapper.entry.connectionName, - historyEntryWrapper.entry.remoteHost - ]); - } - ); - - // Save the result - saveAs(csvService.toBlob(records), translations['SETTINGS_CONNECTION_HISTORY.FILENAME_HISTORY_CSV']); - - }, angular.noop); - - }; - - // Initialize search results - $scope.search(); - - }] - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnections.js b/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnections.js deleted file mode 100644 index 38bb343b1b..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsConnections.js +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for managing all connections and connection groups in the system. - */ -angular.module('settings').directive('guacSettingsConnections', [function guacSettingsConnections() { - - return { - // Element only - restrict: 'E', - replace: true, - - scope: { - }, - - templateUrl: 'app/settings/templates/settingsConnections.html', - controller: ['$scope', '$injector', function settingsConnectionsController($scope, $injector) { - - // Required types - var ConnectionGroup = $injector.get('ConnectionGroup'); - var GroupListItem = $injector.get('GroupListItem'); - var PermissionSet = $injector.get('PermissionSet'); - - // Required services - var $location = $injector.get('$location'); - var $routeParams = $injector.get('$routeParams'); - var authenticationService = $injector.get('authenticationService'); - var connectionGroupService = $injector.get('connectionGroupService'); - var dataSourceService = $injector.get('dataSourceService'); - var guacNotification = $injector.get('guacNotification'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - - /** - * The identifier of the current user. - * - * @type String - */ - var currentUsername = authenticationService.getCurrentUsername(); - - /** - * The identifier of the currently-selected data source. - * - * @type String - */ - $scope.dataSource = $routeParams.dataSource; - - /** - * The root connection group of the connection group hierarchy. - * - * @type Object. - */ - $scope.rootGroups = null; - - /** - * All permissions associated with the current user, or null if the - * user's permissions have not yet been loaded. - * - * @type PermissionSet - */ - $scope.permissions = null; - - /** - * Array of all connection properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionProperties = [ - 'name', - 'protocol' - ]; - - /** - * Array of all connection group properties that are filterable. - * - * @type String[] - */ - $scope.filteredConnectionGroupProperties = [ - 'name' - ]; - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface - * to be useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.rootGroup !== null - && $scope.permissions !== null; - - }; - - /** - * Returns whether the current user has the ADMINISTER system - * permission (i.e. they are an administrator). - * - * @return {Boolean} - * true if the current user is an administrator. - */ - $scope.canAdminister = function canAdminister() { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Return whether the current user is an administrator - return PermissionSet.hasSystemPermission( - $scope.permissions, PermissionSet.SystemPermissionType.ADMINISTER); - }; - - /** - * Returns whether the current user can create new connections - * within the current data source. - * - * @return {Boolean} - * true if the current user can create new connections within - * the current data source, false otherwise. - */ - $scope.canCreateConnections = function canCreateConnections() { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Can create connections if adminstrator or have explicit permission - if (PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION)) - return true; - - // No data sources allow connection creation - return false; - - }; - - /** - * Returns whether the current user can create new connection - * groups within the current data source. - * - * @return {Boolean} - * true if the current user can create new connection groups - * within the current data source, false otherwise. - */ - $scope.canCreateConnectionGroups = function canCreateConnectionGroups() { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Can create connections groups if adminstrator or have explicit permission - if (PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION_GROUP)) - return true; - - // No data sources allow connection group creation - return false; - - }; - - /** - * Returns whether the current user can create new sharing profiles - * within the current data source. - * - * @return {Boolean} - * true if the current user can create new sharing profiles - * within the current data source, false otherwise. - */ - $scope.canCreateSharingProfiles = function canCreateSharingProfiles() { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Can create sharing profiles if adminstrator or have explicit permission - if (PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.CREATE_SHARING_PROFILE)) - return true; - - // Current data source does not allow sharing profile creation - return false; - - }; - - /** - * Returns whether the current user can create new connections or - * connection groups or make changes to existing connections or - * connection groups within the current data source. The - * connection management interface as a whole is useless if this - * function returns false. - * - * @return {Boolean} - * true if the current user can create new connections/groups - * or make changes to existing connections/groups within the - * current data source, false otherwise. - */ - $scope.canManageConnections = function canManageConnections() { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Creating connections/groups counts as management - if ($scope.canCreateConnections() - || $scope.canCreateConnectionGroups() - || $scope.canCreateSharingProfiles()) - return true; - - // Can manage connections if granted explicit update or delete - if (PermissionSet.hasConnectionPermission($scope.permissions, PermissionSet.ObjectPermissionType.UPDATE) - || PermissionSet.hasConnectionPermission($scope.permissions, PermissionSet.ObjectPermissionType.DELETE)) - return true; - - // Can manage connections groups if granted explicit update or delete - if (PermissionSet.hasConnectionGroupPermission($scope.permissions, PermissionSet.ObjectPermissionType.UPDATE) - || PermissionSet.hasConnectionGroupPermission($scope.permissions, PermissionSet.ObjectPermissionType.DELETE)) - return true; - - // No data sources allow management of connections or groups - return false; - - }; - - /** - * Returns whether the current user can update the connection having - * the given identifier within the current data source. - * - * @param {String} identifier - * The identifier of the connection to check. - * - * @return {Boolean} - * true if the current user can update the connection having the - * given identifier within the current data source, false - * otherwise. - */ - $scope.canUpdateConnection = function canUpdateConnection(identifier) { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Can update the connection if adminstrator or have explicit permission - if (PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasConnectionPermission($scope.permissions, PermissionSet.ObjectPermissionType.UPDATE, identifier)) - return true; - - // Current data sources does not allow the connection to be updated - return false; - - }; - - /** - * Returns whether the current user can update the connection group - * having the given identifier within the current data source. - * - * @param {String} identifier - * The identifier of the connection group to check. - * - * @return {Boolean} - * true if the current user can update the connection group - * having the given identifier within the current data source, - * false otherwise. - */ - $scope.canUpdateConnectionGroup = function canUpdateConnectionGroup(identifier) { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Can update the connection if adminstrator or have explicit permission - if (PermissionSet.hasSystemPermission($scope.permissions, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasConnectionGroupPermission($scope.permissions, PermissionSet.ObjectPermissionType.UPDATE, identifier)) - return true; - - // Current data sources does not allow the connection group to be updated - return false; - - }; - - /** - * Adds connection-group-specific contextual actions to the given - * array of GroupListItems. Each contextual action will be - * represented by a new GroupListItem. - * - * @param {GroupListItem[]} items - * The array of GroupListItems to which new GroupListItems - * representing connection-group-specific contextual actions - * should be added. - * - * @param {GroupListItem} [parent] - * The GroupListItem representing the connection group which - * contains the given array of GroupListItems, if known. - */ - var addConnectionGroupActions = function addConnectionGroupActions(items, parent) { - - // Do nothing if we lack permission to modify the parent at all - if (parent && !$scope.canUpdateConnectionGroup(parent.identifier)) - return; - - // Add action for creating a child connection, if the user has - // permission to do so - if ($scope.canCreateConnections()) - items.push(new GroupListItem({ - type : 'new-connection', - dataSource : $scope.dataSource, - weight : 1, - wrappedItem : parent - })); - - // Add action for creating a child connection group, if the user - // has permission to do so - if ($scope.canCreateConnectionGroups()) - items.push(new GroupListItem({ - type : 'new-connection-group', - dataSource : $scope.dataSource, - weight : 1, - wrappedItem : parent - })); - - }; - - /** - * Adds connection-specific contextual actions to the given array of - * GroupListItems. Each contextual action will be represented by a - * new GroupListItem. - * - * @param {GroupListItem[]} items - * The array of GroupListItems to which new GroupListItems - * representing connection-specific contextual actions should - * be added. - * - * @param {GroupListItem} [parent] - * The GroupListItem representing the connection which contains - * the given array of GroupListItems, if known. - */ - var addConnectionActions = function addConnectionActions(items, parent) { - - // Do nothing if we lack permission to modify the parent at all - if (parent && !$scope.canUpdateConnection(parent.identifier)) - return; - - // Add action for creating a child sharing profile, if the user - // has permission to do so - if ($scope.canCreateSharingProfiles()) - items.push(new GroupListItem({ - type : 'new-sharing-profile', - dataSource : $scope.dataSource, - weight : 1, - wrappedItem : parent - })); - - }; - - /** - * Decorates the given GroupListItem, including all descendants, - * adding contextual actions. - * - * @param {GroupListItem} item - * The GroupListItem which should be decorated with additional - * GroupListItems representing contextual actions. - */ - var decorateItem = function decorateItem(item) { - - // If the item is a connection group, add actions specific to - // connection groups - if (item.type === GroupListItem.Type.CONNECTION_GROUP) - addConnectionGroupActions(item.children, item); - - // If the item is a connection, add actions specific to - // connections - else if (item.type === GroupListItem.Type.CONNECTION) - addConnectionActions(item.children, item); - - // Decorate all children - angular.forEach(item.children, decorateItem); - - }; - - /** - * Callback which decorates all items within the given array of - * GroupListItems, including their descendants, adding contextual - * actions. - * - * @param {GroupListItem[]} items - * The array of GroupListItems which should be decorated with - * additional GroupListItems representing contextual actions. - */ - $scope.rootItemDecorator = function rootItemDecorator(items) { - - // Decorate each root-level item - angular.forEach(items, decorateItem); - - }; - - // Retrieve current permissions - permissionService.getEffectivePermissions($scope.dataSource, currentUsername) - .then(function permissionsRetrieved(permissions) { - - // Store retrieved permissions - $scope.permissions = permissions; - - // Ignore permission to update root group - PermissionSet.removeConnectionGroupPermission($scope.permissions, PermissionSet.ObjectPermissionType.UPDATE, ConnectionGroup.ROOT_IDENTIFIER); - - // Return to home if there's nothing to do here - if (!$scope.canManageConnections()) - $location.path('/'); - - // Retrieve all connections for which we have UPDATE or DELETE permission - dataSourceService.apply( - connectionGroupService.getConnectionGroupTree, - [$scope.dataSource], - ConnectionGroup.ROOT_IDENTIFIER, - [PermissionSet.ObjectPermissionType.UPDATE, PermissionSet.ObjectPermissionType.DELETE] - ) - .then(function connectionGroupsReceived(rootGroups) { - $scope.rootGroups = rootGroups; - }, requestService.DIE); - - }, requestService.DIE); // end retrieve permissions - - }] - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsPreferences.js b/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsPreferences.js deleted file mode 100644 index 347c751774..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsPreferences.js +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for managing preferences local to the current user. - */ -angular.module('settings').directive('guacSettingsPreferences', [function guacSettingsPreferences() { - - return { - // Element only - restrict: 'E', - replace: true, - - scope: {}, - - templateUrl: 'app/settings/templates/settingsPreferences.html', - controller: ['$scope', '$injector', function settingsPreferencesController($scope, $injector) { - - // Get required types - const Form = $injector.get('Form'); - const PermissionSet = $injector.get('PermissionSet'); - - // Required services - const $translate = $injector.get('$translate'); - const authenticationService = $injector.get('authenticationService'); - const guacNotification = $injector.get('guacNotification'); - const permissionService = $injector.get('permissionService'); - const preferenceService = $injector.get('preferenceService'); - const requestService = $injector.get('requestService'); - const schemaService = $injector.get('schemaService'); - const userService = $injector.get('userService'); - - /** - * An action to be provided along with the object sent to - * showStatus which closes the currently-shown status dialog. - */ - var ACKNOWLEDGE_ACTION = { - name : 'SETTINGS_PREFERENCES.ACTION_ACKNOWLEDGE', - // Handle action - callback : function acknowledgeCallback() { - guacNotification.showStatus(false); - } - }; - - /** - * An action which closes the current dialog, and refreshes - * the user data on dialog close. - */ - const ACKNOWLEDGE_ACTION_RELOAD = { - name : 'SETTINGS_PREFERENCES.ACTION_ACKNOWLEDGE', - // Handle action - callback : function acknowledgeCallback() { - userService.getUser(dataSource, username) - .then(user => $scope.user = user) - .then(() => guacNotification.showStatus(false)); - } - }; - - /** - * The user being modified. - * - * @type User - */ - $scope.user = null; - - /** - * The username of the current user. - * - * @type String - */ - var username = authenticationService.getCurrentUsername(); - - /** - * The identifier of the data source which authenticated the - * current user. - * - * @type String - */ - var dataSource = authenticationService.getDataSource(); - - /** - * All currently-set preferences, or their defaults if not yet set. - * - * @type Object. - */ - $scope.preferences = preferenceService.preferences; - - /** - * All available user attributes. This is only the set of attribute - * definitions, organized as logical groupings of attributes, not attribute - * values. - * - * @type Form[] - */ - $scope.attributes = null; - - /** - * The fields which should be displayed for choosing locale - * preferences. Each field name must be a property on - * $scope.preferences. - * - * @type Field[] - */ - $scope.localeFields = [ - { 'type' : 'LANGUAGE', 'name' : 'language' }, - { 'type' : 'TIMEZONE', 'name' : 'timezone' } - ]; - - // Automatically update applied translation when language preference is changed - $scope.$watch('preferences.language', function changeLanguage(language) { - $translate.use(language); - }); - - /** - * The new password for the user. - * - * @type String - */ - $scope.newPassword = null; - - /** - * The password match for the user. The update password action will - * fail if $scope.newPassword !== $scope.passwordMatch. - * - * @type String - */ - $scope.newPasswordMatch = null; - - /** - * Whether the current user can edit themselves - i.e. update their - * password or change user preference attributes, or null if this - * is not yet known. - * - * @type Boolean - */ - $scope.canUpdateSelf = null; - - /** - * Update the current user's password to the password currently set within - * the password change dialog. - */ - $scope.updatePassword = function updatePassword() { - - // Verify passwords match - if ($scope.newPasswordMatch !== $scope.newPassword) { - guacNotification.showStatus({ - className : 'error', - title : 'SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR', - text : { - key : 'SETTINGS_PREFERENCES.ERROR_PASSWORD_MISMATCH' - }, - actions : [ ACKNOWLEDGE_ACTION ] - }); - return; - } - - // Verify that the new password is not blank - if (!$scope.newPassword) { - guacNotification.showStatus({ - className : 'error', - title : 'SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR', - text : { - key : 'SETTINGS_PREFERENCES.ERROR_PASSWORD_BLANK' - }, - actions : [ ACKNOWLEDGE_ACTION ] - }); - return; - } - - // Save the user with the new password - userService.updateUserPassword(dataSource, username, $scope.oldPassword, $scope.newPassword) - .then(function passwordUpdated() { - - // Clear the password fields - $scope.oldPassword = null; - $scope.newPassword = null; - $scope.newPasswordMatch = null; - - // Indicate that the password has been changed - guacNotification.showStatus({ - text : { - key : 'SETTINGS_PREFERENCES.INFO_PASSWORD_CHANGED' - }, - actions : [ ACKNOWLEDGE_ACTION ] - }); - }, guacNotification.SHOW_REQUEST_ERROR); - - }; - - // Retrieve current permissions - permissionService.getEffectivePermissions(dataSource, username) - .then(function permissionsRetrieved(permissions) { - - // Add action for updaing password or user preferences if permission is granted - $scope.canUpdateSelf = ( - - // If permission is explicitly granted - PermissionSet.hasUserPermission(permissions, - PermissionSet.ObjectPermissionType.UPDATE, username) - - // Or if implicitly granted through being an administrator - || PermissionSet.hasSystemPermission(permissions, - PermissionSet.SystemPermissionType.ADMINISTER)); - - }) - ['catch'](requestService.createErrorCallback(function permissionsFailed(error) { - $scope.canUpdateSelf = false; - })); - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface to be - * useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.canUpdateSelf !== null - && $scope.languages !== null; - - }; - - - /** - * Saves the current user, displaying an acknowledgement message if - * saving was successful, or an error if the save failed. - */ - $scope.saveUser = function saveUser() { - return userService.saveUser(dataSource, $scope.user) - .then(() => guacNotification.showStatus({ - text : { - key : 'SETTINGS_PREFERENCES.INFO_PREFERENCE_ATTRIBUTES_CHANGED' - }, - - // Reload the user on successful save in case any attributes changed - actions : [ ACKNOWLEDGE_ACTION_RELOAD ] - }), - guacNotification.SHOW_REQUEST_ERROR); - }; - - // Fetch the user record - userService.getUser(dataSource, username).then(function saveUserData(user) { - $scope.user = user; - }); - - // Fetch all user preference attribute forms defined - schemaService.getUserPreferenceAttributes(dataSource).then(function saveAttributes(attributes) { - $scope.attributes = attributes; - }); - }] - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsSessions.js b/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsSessions.js deleted file mode 100644 index 30b8bdeb0b..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsSessions.js +++ /dev/null @@ -1,416 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for managing all active Guacamole sessions. - */ -angular.module('settings').directive('guacSettingsSessions', [function guacSettingsSessions() { - - return { - // Element only - restrict: 'E', - replace: true, - - scope: { - }, - - templateUrl: 'app/settings/templates/settingsSessions.html', - controller: ['$scope', '$injector', function settingsSessionsController($scope, $injector) { - - // Required types - var ActiveConnectionWrapper = $injector.get('ActiveConnectionWrapper'); - var ClientIdentifier = $injector.get('ClientIdentifier'); - var ConnectionGroup = $injector.get('ConnectionGroup'); - var SortOrder = $injector.get('SortOrder'); - - // Required services - var $filter = $injector.get('$filter'); - var $translate = $injector.get('$translate'); - var $q = $injector.get('$q'); - var activeConnectionService = $injector.get('activeConnectionService'); - var authenticationService = $injector.get('authenticationService'); - var connectionGroupService = $injector.get('connectionGroupService'); - var dataSourceService = $injector.get('dataSourceService'); - var guacNotification = $injector.get('guacNotification'); - var requestService = $injector.get('requestService'); - - /** - * The identifiers of all data sources accessible by the current - * user. - * - * @type String[] - */ - var dataSources = authenticationService.getAvailableDataSources(); - - /** - * The ActiveConnectionWrappers of all active sessions accessible - * by the current user, or null if the active sessions have not yet - * been loaded. - * - * @type ActiveConnectionWrapper[] - */ - $scope.wrappers = null; - - /** - * SortOrder instance which maintains the sort order of the visible - * connection wrappers. - * - * @type SortOrder - */ - $scope.wrapperOrder = new SortOrder([ - 'activeConnection.username', - 'startDate', - 'activeConnection.remoteHost', - 'name' - ]); - - /** - * Array of all wrapper properties that are filterable. - * - * @type String[] - */ - $scope.filteredWrapperProperties = [ - 'activeConnection.username', - 'startDate', - 'activeConnection.remoteHost', - 'name' - ]; - - /** - * All active connections, if known, grouped by corresponding data - * source identifier, or null if active connections have not yet - * been loaded. - * - * @type Object.> - */ - var allActiveConnections = null; - - /** - * Map of all visible connections by data source identifier and - * object identifier, or null if visible connections have not yet - * been loaded. - * - * @type Object.> - */ - var allConnections = null; - - /** - * The date format for use for session-related dates. - * - * @type String - */ - var sessionDateFormat = null; - - /** - * Map of all currently-selected active connection wrappers by - * data source and identifier. - * - * @type Object.> - */ - var allSelectedWrappers = {}; - - /** - * Adds the given connection to the internal set of visible - * connections. - * - * @param {String} dataSource - * The identifier of the data source associated with the given - * connection. - * - * @param {Connection} connection - * The connection to add to the internal set of visible - * connections. - */ - var addConnection = function addConnection(dataSource, connection) { - - // Add given connection to set of visible connections - allConnections[dataSource][connection.identifier] = connection; - - }; - - /** - * Adds all descendant connections of the given connection group to - * the internal set of connections. - * - * @param {String} dataSource - * The identifier of the data source associated with the given - * connection group. - * - * @param {ConnectionGroup} connectionGroup - * The connection group whose descendant connections should be - * added to the internal set of connections. - */ - var addDescendantConnections = function addDescendantConnections(dataSource, connectionGroup) { - - // Add all child connections - angular.forEach(connectionGroup.childConnections, function addConnectionForDataSource(connection) { - addConnection(dataSource, connection); - }); - - // Add all child connection groups - angular.forEach(connectionGroup.childConnectionGroups, function addConnectionGroupForDataSource(connectionGroup) { - addDescendantConnections(dataSource, connectionGroup); - }); - - }; - - /** - * Wraps all loaded active connections, storing the resulting array - * within the scope. If required data has not yet finished loading, - * this function has no effect. - */ - var wrapAllActiveConnections = function wrapAllActiveConnections() { - - // Abort if not all required data is available - if (!allActiveConnections || !allConnections || !sessionDateFormat) - return; - - // Wrap all active connections for sake of display - $scope.wrappers = []; - angular.forEach(allActiveConnections, function wrapActiveConnections(activeConnections, dataSource) { - angular.forEach(activeConnections, function wrapActiveConnection(activeConnection, identifier) { - - // Retrieve corresponding connection - var connection = allConnections[dataSource][activeConnection.connectionIdentifier]; - - // Add wrapper - if (activeConnection.username !== null) { - $scope.wrappers.push(new ActiveConnectionWrapper({ - dataSource : dataSource, - name : connection.name, - startDate : $filter('date')(activeConnection.startDate, sessionDateFormat), - activeConnection : activeConnection - })); - } - - }); - }); - - }; - - // Retrieve all connections - dataSourceService.apply( - connectionGroupService.getConnectionGroupTree, - dataSources, - ConnectionGroup.ROOT_IDENTIFIER - ) - .then(function connectionGroupsReceived(rootGroups) { - - allConnections = {}; - - // Load connections from each received root group - angular.forEach(rootGroups, function connectionGroupReceived(rootGroup, dataSource) { - allConnections[dataSource] = {}; - addDescendantConnections(dataSource, rootGroup); - }); - - // Attempt to produce wrapped list of active connections - wrapAllActiveConnections(); - - }, requestService.DIE); - - // Query active sessions - dataSourceService.apply( - activeConnectionService.getActiveConnections, - dataSources - ) - .then(function sessionsRetrieved(retrievedActiveConnections) { - - // Store received map of active connections - allActiveConnections = retrievedActiveConnections; - - // Attempt to produce wrapped list of active connections - wrapAllActiveConnections(); - - }, requestService.DIE); - - // Get session date format - $translate('SETTINGS_SESSIONS.FORMAT_STARTDATE').then(function sessionDateFormatReceived(retrievedSessionDateFormat) { - - // Store received date format - sessionDateFormat = retrievedSessionDateFormat; - - // Attempt to produce wrapped list of active connections - wrapAllActiveConnections(); - - }, angular.noop); - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface - * to be useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - return $scope.wrappers !== null; - }; - - /** - * An action to be provided along with the object sent to - * showStatus which closes the currently-shown status dialog. - */ - var CANCEL_ACTION = { - name : "SETTINGS_SESSIONS.ACTION_CANCEL", - // Handle action - callback : function cancelCallback() { - guacNotification.showStatus(false); - } - }; - - /** - * An action to be provided along with the object sent to - * showStatus which immediately deletes the currently selected - * sessions. - */ - var DELETE_ACTION = { - name : "SETTINGS_SESSIONS.ACTION_DELETE", - className : "danger", - // Handle action - callback : function deleteCallback() { - deleteAllSessionsImmediately(); - guacNotification.showStatus(false); - } - }; - - /** - * Immediately deletes the selected sessions, without prompting the - * user for confirmation. - */ - var deleteAllSessionsImmediately = function deleteAllSessionsImmediately() { - - var deletionRequests = []; - - // Perform deletion for each relevant data source - angular.forEach(allSelectedWrappers, function deleteSessionsImmediately(selectedWrappers, dataSource) { - - // Delete sessions, if any are selected - var identifiers = Object.keys(selectedWrappers); - if (identifiers.length) - deletionRequests.push(activeConnectionService.deleteActiveConnections(dataSource, identifiers)); - - }); - - // Update interface - $q.all(deletionRequests) - .then(function activeConnectionsDeleted() { - - // Remove deleted connections from wrapper array - $scope.wrappers = $scope.wrappers.filter(function activeConnectionStillExists(wrapper) { - return !(wrapper.activeConnection.identifier in (allSelectedWrappers[wrapper.dataSource] || {})); - }); - - // Clear selection - allSelectedWrappers = {}; - - }, guacNotification.SHOW_REQUEST_ERROR); - - }; - - /** - * Delete all selected sessions, prompting the user first to - * confirm that deletion is desired. - */ - $scope.deleteSessions = function deleteSessions() { - // Confirm deletion request - guacNotification.showStatus({ - 'title' : 'SETTINGS_SESSIONS.DIALOG_HEADER_CONFIRM_DELETE', - 'text' : { - 'key' : 'SETTINGS_SESSIONS.TEXT_CONFIRM_DELETE' - }, - 'actions' : [ DELETE_ACTION, CANCEL_ACTION] - }); - }; - - /** - * Returns the relative URL of the client page which accesses the - * given active connection. If the active connection is not - * connectable, null is returned. - * - * @param {String} dataSource - * The unique identifier of the data source containing the - * active connection. - * - * @param {String} activeConnection - * The active connection to determine the relative URL of. - * - * @returns {String} - * The relative URL of the client page which accesses the given - * active connection, or null if the active connection is not - * connectable. - */ - $scope.getClientURL = function getClientURL(dataSource, activeConnection) { - - if (!activeConnection.connectable) - return null; - - return '#/client/' + encodeURIComponent(ClientIdentifier.toString({ - dataSource : dataSource, - type : ClientIdentifier.Types.ACTIVE_CONNECTION, - id : activeConnection.identifier - })); - - }; - - /** - * Returns whether the selected sessions can be deleted. - * - * @returns {Boolean} - * true if selected sessions can be deleted, false otherwise. - */ - $scope.canDeleteSessions = function canDeleteSessions() { - - // We can delete sessions if at least one is selected - for (var dataSource in allSelectedWrappers) { - for (var identifier in allSelectedWrappers[dataSource]) - return true; - } - - return false; - - }; - - /** - * Called whenever an active connection wrapper changes selected - * status. - * - * @param {ActiveConnectionWrapper} wrapper - * The wrapper whose selected status has changed. - */ - $scope.wrapperSelectionChange = function wrapperSelectionChange(wrapper) { - - // Get selection map for associated data source, creating if necessary - var selectedWrappers = allSelectedWrappers[wrapper.dataSource]; - if (!selectedWrappers) - selectedWrappers = allSelectedWrappers[wrapper.dataSource] = {}; - - // Add wrapper to map if selected - if (wrapper.checked) - selectedWrappers[wrapper.activeConnection.identifier] = wrapper; - - // Otherwise, remove wrapper from map - else - delete selectedWrappers[wrapper.activeConnection.identifier]; - - }; - - }] - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUserGroups.js b/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUserGroups.js deleted file mode 100644 index a8f2dd37cb..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUserGroups.js +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for managing all user groups in the system. - */ -angular.module('settings').directive('guacSettingsUserGroups', ['$injector', - function guacSettingsUserGroups($injector) { - - // Required types - var ManageableUserGroup = $injector.get('ManageableUserGroup'); - var PermissionSet = $injector.get('PermissionSet'); - var SortOrder = $injector.get('SortOrder'); - - // Required services - var $location = $injector.get('$location'); - var authenticationService = $injector.get('authenticationService'); - var dataSourceService = $injector.get('dataSourceService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var userGroupService = $injector.get('userGroupService'); - - var directive = { - restrict : 'E', - replace : true, - templateUrl : 'app/settings/templates/settingsUserGroups.html', - scope : {} - }; - - directive.controller = ['$scope', function settingsUserGroupsController($scope) { - - // Identifier of the current user - var currentUsername = authenticationService.getCurrentUsername(); - - /** - * The identifiers of all data sources accessible by the current - * user. - * - * @type String[] - */ - var dataSources = authenticationService.getAvailableDataSources(); - - /** - * Map of data source identifiers to all permissions associated - * with the current user within that data source, or null if the - * user's permissions have not yet been loaded. - * - * @type Object. - */ - var permissions = null; - - /** - * All visible user groups, along with their corresponding data - * sources. - * - * @type ManageableUserGroup[] - */ - $scope.manageableUserGroups = null; - - /** - * Array of all user group properties that are filterable. - * - * @type String[] - */ - $scope.filteredUserGroupProperties = [ - 'userGroup.identifier' - ]; - - /** - * SortOrder instance which stores the sort order of the listed - * user groups. - * - * @type SortOrder - */ - $scope.order = new SortOrder([ - 'userGroup.identifier' - ]); - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user group - * interface to be useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - return $scope.manageableUserGroups !== null; - }; - - /** - * Returns the identifier of the data source that should be used by - * default when creating a new user group. - * - * @return {String} - * The identifier of the data source that should be used by - * default when creating a new user group, or null if user group - * creation is not allowed. - */ - $scope.getDefaultDataSource = function getDefaultDataSource() { - - // Abort if permissions have not yet loaded - if (!permissions) - return null; - - // For each data source - var dataSources = _.keys(permissions).sort(); - for (var i = 0; i < dataSources.length; i++) { - - // Retrieve corresponding permission set - var dataSource = dataSources[i]; - var permissionSet = permissions[dataSource]; - - // Can create user groups if adminstrator or have explicit permission - if (PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.CREATE_USER_GROUP)) - return dataSource; - - } - - // No data sources allow user group creation - return null; - - }; - - /** - * Returns whether the current user can create new user groups - * within at least one data source. - * - * @return {Boolean} - * true if the current user can create new user groups within at - * least one data source, false otherwise. - */ - $scope.canCreateUserGroups = function canCreateUserGroups() { - return $scope.getDefaultDataSource() !== null; - }; - - /** - * Returns whether the current user can create new user groups or - * make changes to existing user groups within at least one data - * source. The user group management interface as a whole is useless - * if this function returns false. - * - * @return {Boolean} - * true if the current user can create new user groups or make - * changes to existing user groups within at least one data - * source, false otherwise. - */ - var canManageUserGroups = function canManageUserGroups() { - - // Abort if permissions have not yet loaded - if (!permissions) - return false; - - // Creating user groups counts as management - if ($scope.canCreateUserGroups()) - return true; - - // For each data source - for (var dataSource in permissions) { - - // Retrieve corresponding permission set - var permissionSet = permissions[dataSource]; - - // Can manage user groups if granted explicit update or delete - if (PermissionSet.hasUserGroupPermission(permissionSet, PermissionSet.ObjectPermissionType.UPDATE) - || PermissionSet.hasUserGroupPermission(permissionSet, PermissionSet.ObjectPermissionType.DELETE)) - return true; - - } - - // No data sources allow management of user groups - return false; - - }; - - /** - * Sets the displayed list of user groups. If any user groups are - * already shown within the interface, those user groups are replaced - * with the given user groups. - * - * @param {Object.} permissions - * A map of data source identifiers to all permissions associated - * with the current user within that data source. - * - * @param {Object.>} userGroups - * A map of all user groups which should be displayed, where each - * key is the data source identifier from which the user groups - * were retrieved and each value is a map of user group identifiers - * to their corresponding @link{UserGroup} objects. - */ - var setDisplayedUserGroups = function setDisplayedUserGroups(permissions, userGroups) { - - var addedUserGroups = {}; - $scope.manageableUserGroups = []; - - // For each user group in each data source - angular.forEach(dataSources, function addUserGroupList(dataSource) { - angular.forEach(userGroups[dataSource], function addUserGroup(userGroup) { - - // Do not add the same user group twice - if (addedUserGroups[userGroup.identifier]) - return; - - // Link to default creation data source if we cannot manage this user - if (!PermissionSet.hasSystemPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.ADMINISTER) - && !PermissionSet.hasUserGroupPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.UPDATE, userGroup.identifier) - && !PermissionSet.hasUserGroupPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.DELETE, userGroup.identifier)) - dataSource = $scope.getDefaultDataSource(); - - // Add user group to overall list - addedUserGroups[userGroup.identifier] = userGroup; - $scope.manageableUserGroups.push(new ManageableUserGroup ({ - 'dataSource' : dataSource, - 'userGroup' : userGroup - })); - - }); - }); - - }; - - // Retrieve current permissions - dataSourceService.apply( - permissionService.getEffectivePermissions, - dataSources, - currentUsername - ) - .then(function permissionsRetrieved(retrievedPermissions) { - - // Store retrieved permissions - permissions = retrievedPermissions; - - // Return to home if there's nothing to do here - if (!canManageUserGroups()) - $location.path('/'); - - // If user groups can be created, list all readable user groups - if ($scope.canCreateUserGroups()) - return dataSourceService.apply(userGroupService.getUserGroups, dataSources); - - // Otherwise, list only updateable/deletable users - return dataSourceService.apply(userGroupService.getUserGroups, dataSources, [ - PermissionSet.ObjectPermissionType.UPDATE, - PermissionSet.ObjectPermissionType.DELETE - ]); - - }) - .then(function userGroupsReceived(userGroups) { - setDisplayedUserGroups(permissions, userGroups); - }, requestService.WARN); - - }]; - - return directive; - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUsers.js b/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUsers.js deleted file mode 100644 index 6b8c6e06a8..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/directives/guacSettingsUsers.js +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive for managing all users in the system. - */ -angular.module('settings').directive('guacSettingsUsers', [function guacSettingsUsers() { - - return { - // Element only - restrict: 'E', - replace: true, - - scope: { - }, - - templateUrl: 'app/settings/templates/settingsUsers.html', - controller: ['$scope', '$injector', function settingsUsersController($scope, $injector) { - - // Required types - var ManageableUser = $injector.get('ManageableUser'); - var PermissionSet = $injector.get('PermissionSet'); - var SortOrder = $injector.get('SortOrder'); - - // Required services - var $location = $injector.get('$location'); - var $translate = $injector.get('$translate'); - var authenticationService = $injector.get('authenticationService'); - var dataSourceService = $injector.get('dataSourceService'); - var permissionService = $injector.get('permissionService'); - var requestService = $injector.get('requestService'); - var userService = $injector.get('userService'); - - // Identifier of the current user - var currentUsername = authenticationService.getCurrentUsername(); - - /** - * The identifiers of all data sources accessible by the current - * user. - * - * @type String[] - */ - var dataSources = authenticationService.getAvailableDataSources(); - - /** - * All visible users, along with their corresponding data sources. - * - * @type ManageableUser[] - */ - $scope.manageableUsers = null; - - /** - * The name of the new user to create, if any, when user creation - * is requested via newUser(). - * - * @type String - */ - $scope.newUsername = ""; - - /** - * Map of data source identifiers to all permissions associated - * with the current user within that data source, or null if the - * user's permissions have not yet been loaded. - * - * @type Object. - */ - $scope.permissions = null; - - /** - * Array of all user properties that are filterable. - * - * @type String[] - */ - $scope.filteredUserProperties = [ - 'user.attributes["guac-full-name"]', - 'user.attributes["guac-organization"]', - 'user.lastActive', - 'user.username' - ]; - - /** - * The date format for use for the last active date. - * - * @type String - */ - $scope.dateFormat = null; - - /** - * SortOrder instance which stores the sort order of the listed - * users. - * - * @type SortOrder - */ - $scope.order = new SortOrder([ - 'user.username', - '-user.lastActive', - 'user.attributes["guac-organization"]', - 'user.attributes["guac-full-name"]' - ]); - - // Get session date format - $translate('SETTINGS_USERS.FORMAT_DATE') - .then(function dateFormatReceived(retrievedDateFormat) { - - // Store received date format - $scope.dateFormat = retrievedDateFormat; - - }, angular.noop); - - /** - * Returns whether critical data has completed being loaded. - * - * @returns {Boolean} - * true if enough data has been loaded for the user interface - * to be useful, false otherwise. - */ - $scope.isLoaded = function isLoaded() { - - return $scope.dateFormat !== null - && $scope.manageableUsers !== null - && $scope.permissions !== null; - - }; - - /** - * Returns the identifier of the data source that should be used by - * default when creating a new user. - * - * @return {String} - * The identifier of the data source that should be used by - * default when creating a new user, or null if user creation - * is not allowed. - */ - $scope.getDefaultDataSource = function getDefaultDataSource() { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return null; - - // For each data source - var dataSources = _.keys($scope.permissions).sort(); - for (var i = 0; i < dataSources.length; i++) { - - // Retrieve corresponding permission set - var dataSource = dataSources[i]; - var permissionSet = $scope.permissions[dataSource]; - - // Can create users if adminstrator or have explicit permission - if (PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.ADMINISTER) - || PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.CREATE_USER)) - return dataSource; - - } - - // No data sources allow user creation - return null; - - }; - - /** - * Returns whether the current user can create new users within at - * least one data source. - * - * @return {Boolean} - * true if the current user can create new users within at - * least one data source, false otherwise. - */ - $scope.canCreateUsers = function canCreateUsers() { - return $scope.getDefaultDataSource() !== null; - }; - - /** - * Returns whether the current user can create new users or make - * changes to existing users within at least one data source. The - * user management interface as a whole is useless if this function - * returns false. - * - * @return {Boolean} - * true if the current user can create new users or make - * changes to existing users within at least one data source, - * false otherwise. - */ - var canManageUsers = function canManageUsers() { - - // Abort if permissions have not yet loaded - if (!$scope.permissions) - return false; - - // Creating users counts as management - if ($scope.canCreateUsers()) - return true; - - // For each data source - for (var dataSource in $scope.permissions) { - - // Retrieve corresponding permission set - var permissionSet = $scope.permissions[dataSource]; - - // Can manage users if granted explicit update or delete - if (PermissionSet.hasUserPermission(permissionSet, PermissionSet.ObjectPermissionType.UPDATE) - || PermissionSet.hasUserPermission(permissionSet, PermissionSet.ObjectPermissionType.DELETE)) - return true; - - } - - // No data sources allow management of users - return false; - - }; - - // Retrieve current permissions - dataSourceService.apply( - permissionService.getEffectivePermissions, - dataSources, - currentUsername - ) - .then(function permissionsRetrieved(permissions) { - - // Store retrieved permissions - $scope.permissions = permissions; - - // Return to home if there's nothing to do here - if (!canManageUsers()) - $location.path('/'); - - var userPromise; - - // If users can be created, list all readable users - if ($scope.canCreateUsers()) - userPromise = dataSourceService.apply(userService.getUsers, dataSources); - - // Otherwise, list only updateable/deletable users - else - userPromise = dataSourceService.apply(userService.getUsers, dataSources, [ - PermissionSet.ObjectPermissionType.UPDATE, - PermissionSet.ObjectPermissionType.DELETE - ]); - - userPromise.then(function usersReceived(allUsers) { - - var addedUsers = {}; - $scope.manageableUsers = []; - - // For each user in each data source - angular.forEach(dataSources, function addUserList(dataSource) { - angular.forEach(allUsers[dataSource], function addUser(user) { - - // Do not add the same user twice - if (addedUsers[user.username]) - return; - - // Link to default creation data source if we cannot manage this user - if (!PermissionSet.hasSystemPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.ADMINISTER) - && !PermissionSet.hasUserPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.UPDATE, user.username) - && !PermissionSet.hasUserPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.DELETE, user.username)) - dataSource = $scope.getDefaultDataSource(); - - // Add user to overall list - addedUsers[user.username] = user; - $scope.manageableUsers.push(new ManageableUser ({ - 'dataSource' : dataSource, - 'user' : user - })); - - }); - }); - - }, requestService.DIE); - - }, requestService.DIE); - - }] - }; - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/services/csvService.js b/guacamole/src/main/frontend/src/app/settings/services/csvService.js deleted file mode 100644 index e68cf15e43..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/services/csvService.js +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for generating downloadable CSV links given arbitrary data. - */ -angular.module('settings').factory('csvService', [function csvService() { - - var service = {}; - - /** - * Encodes an arbitrary value for inclusion in a CSV file as an individual - * field. With the exception of null and undefined (which are both - * interpreted as equivalent to an empty string), all values are coerced to - * a string and, if non-numeric, included within double quotes. If the - * value itself includes double quotes, those quotes will be properly - * escaped. - * - * @param {*} field - * The arbitrary value to encode. - * - * @return {String} - * The provided value, coerced to a string and properly escaped for - * CSV. - */ - var encodeField = function encodeField(field) { - - // Coerce field to string - if (field === null || field === undefined) - field = ''; - else - field = '' + field; - - // Do not quote numeric fields - if (/^[0-9.]*$/.test(field)) - return field; - - // Enclose all other fields in quotes, escaping any quotes therein - return '"' + field.replace(/"/g, '""') + '"'; - - }; - - /** - * Encodes each of the provided values for inclusion in a CSV file as - * fields within the same record (in the manner specified by - * encodeField()), separated by commas. - * - * @param {*[]} fields - * An array of arbitrary values which make up the record. - * - * @return {String} - * A CSV record containing the each value in the given array. - */ - var encodeRecord = function encodeRecord(fields) { - return fields.map(encodeField).join(','); - }; - - /** - * Encodes an entire array of records as properly-formatted CSV, where each - * entry in the provided array is an array of arbitrary fields. - * - * @param {Array.<*[]>} records - * An array of all records making up the desired CSV. - * - * @return {String} - * An entire CSV containing each provided record, separated by CR+LF - * line terminators. - */ - var encodeCSV = function encodeCSV(records) { - return records.map(encodeRecord).join('\r\n'); - }; - - /** - * Creates a new Blob containing properly-formatted CSV generated from the - * given array of records, where each entry in the provided array is an - * array of arbitrary fields. - * - * @param {Array.<*[]>} records - * An array of all records making up the desired CSV. - * - * @returns {Blob} - * A new Blob containing each provided record in CSV format. - */ - service.toBlob = function toBlob(records) { - return new Blob([ encodeCSV(records) ], { type : 'text/csv' }); - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/services/preferenceService.js b/guacamole/src/main/frontend/src/app/settings/services/preferenceService.js deleted file mode 100644 index f029790f84..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/services/preferenceService.js +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for setting and retrieving browser-local preferences. Preferences - * may be any JSON-serializable type. - */ -angular.module('settings').provider('preferenceService', ['$injector', - function preferenceServiceProvider($injector) { - - // Required providers - var localStorageServiceProvider = $injector.get('localStorageServiceProvider'); - - /** - * Reference to the provider itself. - * - * @type preferenceServiceProvider - */ - var provider = this; - - /** - * The storage key of Guacamole preferences within local storage. - * - * @type String - */ - var GUAC_PREFERENCES_STORAGE_KEY = "GUAC_PREFERENCES"; - - /** - * All valid input method type names. - * - * @type Object. - */ - var inputMethods = { - - /** - * No input method is used. Keyboard events are generated from a - * physical keyboard. - * - * @constant - * @type String - */ - NONE : 'none', - - /** - * Keyboard events will be generated from the Guacamole on-screen - * keyboard. - * - * @constant - * @type String - */ - OSK : 'osk', - - /** - * Keyboard events will be generated by inferring the keys necessary to - * produce typed text from an IME (Input Method Editor) such as the - * native on-screen keyboard of a mobile device. - * - * @constant - * @type String - */ - TEXT : 'text' - - }; - - /** - * Returns the key of the language currently in use within the browser. - * This is not necessarily the user's desired language, but is rather the - * language user by the browser's interface. - * - * @returns {String} - * The key of the language currently in use within the browser. - */ - var getDefaultLanguageKey = function getDefaultLanguageKey() { - - // Pull browser language, falling back to US English - var language = (navigator.languages && navigator.languages[0]) - || navigator.language - || navigator.browserLanguage - || 'en'; - - // Convert to format used internally - return language.replace(/-/g, '_'); - - }; - - /** - * Return the timezone detected for the current browser session - * by the JSTZ timezone library. - * - * @returns String - * The name of the currently-detected timezone in IANA zone key - * format (Olson time zone database). - */ - var getDetectedTimezone = function getDetectedTimezone() { - return jstz.determine().name(); - }; - - /** - * All currently-set preferences, as name/value pairs. Each property name - * corresponds to the name of a preference. - * - * @type Object. - */ - this.preferences = { - - /** - * Whether translation of touch to mouse events should emulate an - * absolute pointer device, or a relative pointer device. - * - * @type Boolean - */ - emulateAbsoluteMouse : true, - - /** - * The default input method. This may be any of the values defined - * within preferenceService.inputMethods. - * - * @type String - */ - inputMethod : inputMethods.NONE, - - /** - * The key of the desired display language. - * - * @type String - */ - language : getDefaultLanguageKey(), - - /** - * The number of recent connections to display. - * - * @type {!number} - */ - numberOfRecentConnections: 6, - - /** - * Whether or not to show the "Recent Connections" section. - * - * @type {!boolean} - */ - showRecentConnections : true, - - /** - * The timezone set by the user, in IANA zone key format (Olson time - * zone database). - * - * @type String - */ - timezone : getDetectedTimezone() - - }; - - // Get stored preferences from localStorage - var storedPreferences = localStorageServiceProvider.getItem(GUAC_PREFERENCES_STORAGE_KEY); - if (storedPreferences) - angular.extend(provider.preferences, storedPreferences); - - // Factory method required by provider - this.$get = ['$injector', function preferenceServiceFactory($injector) { - - // Required services - var $rootScope = $injector.get('$rootScope'); - var $window = $injector.get('$window'); - var localStorageService = $injector.get('localStorageService'); - - var service = {}; - - /** - * All valid input method type names. - * - * @type Object. - */ - service.inputMethods = inputMethods; - - /** - * All currently-set preferences, as name/value pairs. Each property name - * corresponds to the name of a preference. - * - * @type Object. - */ - service.preferences = provider.preferences; - - /** - * Persists the current values of all preferences, if possible. - */ - service.save = function save() { - localStorageService.setItem(GUAC_PREFERENCES_STORAGE_KEY, service.preferences); - }; - - // Persist settings when window is unloaded - $window.addEventListener('unload', service.save); - - // Persist settings upon navigation - $rootScope.$on('$routeChangeSuccess', function handleNavigate() { - service.save(); - }); - - // Persist settings upon logout - $rootScope.$on('guacLogout', function handleLogout() { - service.save(); - }); - - return service; - - }]; - -}]); diff --git a/guacamole/src/main/frontend/src/app/settings/settingsModule.js b/guacamole/src/main/frontend/src/app/settings/settingsModule.js deleted file mode 100644 index 4eeb517af1..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/settingsModule.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * The module for manipulation of general settings. This is distinct from the - * "manage" module, which deals only with administrator-level system management. - */ -angular.module('settings', [ - 'groupList', - 'list', - 'navigation', - 'notification', - 'player', - 'rest', - 'storage' -]); diff --git a/guacamole/src/main/frontend/src/app/settings/styles/buttons.css b/guacamole/src/main/frontend/src/app/settings/styles/buttons.css deleted file mode 100644 index 294bbefa6d..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/buttons.css +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -a.button.add-user, -a.button.add-user-group, -a.button.add-connection, -a.button.add-connection-group, -a.button.import-connections { - font-size: 0.8em; - padding-left: 1.8em; - position: relative; -} - -a.button.add-user::before, -a.button.add-user-group::before, -a.button.add-connection::before, -a.button.add-connection-group::before, -a.button.import-connections::before { - - content: ' '; - position: absolute; - width: 1.8em; - top: 0; - bottom: 0; - left: 0; - - background-repeat: no-repeat; - background-size: 1em; - background-position: 0.5em 0.45em; - -} - -a.button.add-user::before { - background-image: url('images/action-icons/guac-user-add.svg'); -} - -a.button.add-user-group::before { - background-image: url('images/action-icons/guac-user-group-add.svg'); -} - -a.button.add-connection::before { - background-image: url('images/action-icons/guac-monitor-add.svg'); -} - -a.button.add-connection-group::before { - background-image: url('images/action-icons/guac-group-add.svg'); -} - -a.button.import-connections::before { - background-image: url('images/action-icons/guac-file-import.svg'); -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/connection-list.css b/guacamole/src/main/frontend/src/app/settings/styles/connection-list.css deleted file mode 100644 index efcb9dc3bf..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/connection-list.css +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.settings.connections .connection-list .new-connection, -.settings.connections .connection-list .new-connection-group, -.settings.connections .connection-list .new-sharing-profile { - opacity: 0.5; - font-style: italic; -} - -.settings.connections .connection-list .new-connection a, -.settings.connections .connection-list .new-connection a:hover, -.settings.connections .connection-list .new-connection a:visited, -.settings.connections .connection-list .new-connection-group a, -.settings.connections .connection-list .new-connection-group a:hover, -.settings.connections .connection-list .new-connection-group a:visited, -.settings.connections .connection-list .new-sharing-profile a, -.settings.connections .connection-list .new-sharing-profile a:hover, -.settings.connections .connection-list .new-sharing-profile a:visited { - text-decoration:none; - color: black; -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/history-player.css b/guacamole/src/main/frontend/src/app/settings/styles/history-player.css deleted file mode 100644 index 55458dd511..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/history-player.css +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * NOTE: This session recording player implementation is based on the Session - * Recording Player for Glyptodon Enterprise which is available at - * https://github.com/glyptodon/glyptodon-enterprise-player under the - * following license: - * - * Copyright (C) 2019 Glyptodon, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -.settings.connectionHistoryPlayer { - - background: black; - color: white; - - position: absolute; - top: 0; - left: 0; - width: 100vw; - height: 100vh; - padding: 0; - margin: 0; - -} - -.settings.connectionHistoryPlayer guac-player { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.settings.connectionHistoryPlayer .guac-player-help-no-recording, -.settings.connectionHistoryPlayer .guac-player-help-recording-error { - margin: 8px; - max-width: 480px; -} - -.settings.connectionHistoryPlayer .guac-player-button { - - display: inline-block; - - border: 2px solid white; - border-radius: 0; - background: black; - color: white; - font-weight: bold; - - padding: 0.5em 1em; - margin: 8px; - -} - -.settings.connectionHistoryPlayer .guac-player-controls { - padding: 0.25em; -} - -.settings.connectionHistoryPlayer .guac-player-controls { - background: rgba(0, 0, 0, 0.5); -} - -.settings.connectionHistoryPlayer .guac-player-controls { - opacity: 0; - -webkit-transition: opacity 0.25s linear 0.25s; - -moz-transition: opacity 0.25s linear 0.25s; - -o-transition: opacity 0.25s linear 0.25s; - transition: opacity 0.25s linear 0.25s; -} - -.settings.connectionHistoryPlayer .guac-player-controls:hover, -.settings.connectionHistoryPlayer guac-player.recent-mouse-movement .guac-player-controls { - opacity: 1; -} - -.settings.connectionHistoryPlayer .guac-player-controls .heat-map { - position: absolute; - width: 100%; -} - -.settings.connectionHistoryPlayer .guac-player-controls .heat-map svg { - position: absolute; - bottom: 7px; - height: 50px; - width: 100%; - z-index: 100; - pointer-events: none; - opacity: 0; - -webkit-transition: opacity 0.1s linear 0.1s; - -moz-transition: opacity 0.1s linear 0.1s; - -o-transition: opacity 0.1s linear 0.1s; - transition: opacity 0.1s linear 0.1s; -} - -.settings.connectionHistoryPlayer .guac-player-controls:hover .heat-map svg { - opacity: 1; -} - -.settings.connectionHistoryPlayer .guac-player-controls .heat-map .legend { - position: absolute; - display: flex; - flex-direction: column; - align-items: end; - bottom: 65px; - right: 10px; - z-index: 100; - background-color: rgba(0, 0, 0, 0.85); - padding-top: 3px; - padding-bottom: 3px; - padding-left: 6px; - border-radius: 5px; - opacity: 0; - -webkit-transition: opacity 0.1s linear 0.1s; - -moz-transition: opacity 0.1s linear 0.1s; - -o-transition: opacity 0.1s linear 0.1s; - transition: opacity 0.1s linear 0.1s; -} - -.settings.connectionHistoryPlayer .guac-player-controls:hover .heat-map .legend { - opacity: 1; -} - -.settings.connectionHistoryPlayer .guac-player-controls .heat-map .legend .key-events::after, -.settings.connectionHistoryPlayer .guac-player-controls .heat-map .legend .frame-events::after { - display: inline-block; - content: ''; - width: 25px; - height: 10px; - margin-left: 3px; - margin-right: 10px; - border-radius: 3px; -} - -.settings.connectionHistoryPlayer .guac-player-controls .heat-map .legend .key-events::after { - background-color: #5BA300; -} - -.settings.connectionHistoryPlayer .guac-player-controls .heat-map .legend .frame-events::after { - background-color: #888888; -} - -.settings.connectionHistoryPlayer .heat-map svg.key-events path { - - /* #5BA300 color at 50% opacity */ - fill: rgba(91, 163, 0, 0.5); -} - -.settings.connectionHistoryPlayer .heat-map svg.frame-events path { - - /* #888888 color at 75% opacity */ - fill: rgba(135, 135, 135, 0.75); -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/history.css b/guacamole/src/main/frontend/src/app/settings/styles/history.css deleted file mode 100644 index d5c9dac00d..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/history.css +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.settings.connectionHistory .filter { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: stretch; - -ms-flex-direction: row; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: stretch; - -moz-box-orient: horizontal; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: stretch; - -webkit-box-orient: horizontal; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: stretch; - -webkit-flex-direction: row; - - /* W3C */ - display: flex; - align-items: stretch; - flex-direction: row; - -} - -.settings.connectionHistory .filter .search-string { - -ms-flex: 1 1 auto; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - flex: 1 1 auto; -} - -.settings.connectionHistory .filter .search-button, -.settings.connectionHistory .filter button { - - -ms-flex: 0 0 auto; - -moz-box-flex: 0; - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - flex: 0 0 auto; - - margin-top: 0; - margin-bottom: 0; - -} - -.settings.connectionHistory .history-list { - width: 100%; -} - -.settings.connectionHistory a.history-session-recording { - color: #0000ee; -} - -.settings.connectionHistory a.history-session-recording::after { - display: inline-block; - content: ' '; - width: 1em; - height: 1em; - background-size: contain; - background-position: center; - background-repeat: no-repeat; - background-image: url('images/action-icons/guac-play-link.svg'); - vertical-align: middle; -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/input-method.css b/guacamole/src/main/frontend/src/app/settings/styles/input-method.css deleted file mode 100644 index 8fe6b6a327..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/input-method.css +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.preferences .input-method .caption { - margin-left: 2em; - margin-right: 2em; -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/mouse-mode.css b/guacamole/src/main/frontend/src/app/settings/styles/mouse-mode.css deleted file mode 100644 index 7cbb21d1f4..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/mouse-mode.css +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.preferences .mouse-mode .choices { - text-align: center; -} - -.preferences .mouse-mode .choice { - display: inline-block; -} - -.preferences .mouse-mode .choice .figure { - display: inline-block; - vertical-align: middle; - width: 75%; - max-width: 320px; -} - -.preferences .mouse-mode .figure img { - display: block; - width: 100%; - max-width: 320px; - margin: 1em auto; -} - -.preferences .mouse-mode .caption { - text-align: left; -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/preferences.css b/guacamole/src/main/frontend/src/app/settings/styles/preferences.css deleted file mode 100644 index dbb2330a85..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/preferences.css +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.preferences .form .fields { - display: table; - padding-left: 0.5em; - border-left: 3px solid rgba(0,0,0,0.125); -} - -.preferences .form .fields .labeled-field { - display: table-row; -} - -.preferences .form .fields .field-header, -.preferences .form .fields .form-field { - display: table-cell; - padding: 0.125em; - vertical-align: top; -} - -.preferences .form .fields .field-header { - padding-right: 1em; -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/sessions.css b/guacamole/src/main/frontend/src/app/settings/styles/sessions.css deleted file mode 100644 index 3ff22be856..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/sessions.css +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.settings table.session-list { - width: 100%; -} - -.settings table.session-list tr.session:hover { - background: #CDA; -} - -.settings table.session-list .select-session { - min-width: 2em; - text-align: center; -} diff --git a/guacamole/src/main/frontend/src/app/settings/styles/settings.css b/guacamole/src/main/frontend/src/app/settings/styles/settings.css deleted file mode 100644 index 390a793187..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/settings.css +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.settings table.properties th { - text-align: left; - font-weight: normal; - padding-right: 1em; -} - -.settings .action-buttons { - text-align: center; - margin: 1em 0; -} - -.settings .toolbar { - - /* IE10 */ - display: -ms-flexbox; - -ms-flex-align: center; - -ms-flex-direction: row; - - /* Ancient Mozilla */ - display: -moz-box; - -moz-box-align: center; - -moz-box-orient: horizontal; - - /* Ancient WebKit */ - display: -webkit-box; - -webkit-box-align: center; - -webkit-box-orient: horizontal; - - /* Old WebKit */ - display: -webkit-flex; - -webkit-align-items: center; - -webkit-flex-direction: row; - - /* W3C */ - display: flex; - align-items: center; - flex-direction: row; - -} - -.settings .toolbar .action-buttons { - margin-right: 0.25em; -} - -.settings .toolbar .filter { - -ms-flex: 1 1 auto; - -moz-box-flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - flex: 1 1 auto; -} - diff --git a/guacamole/src/main/frontend/src/app/settings/styles/user-group-list.css b/guacamole/src/main/frontend/src/app/settings/styles/user-group-list.css deleted file mode 100644 index 6f29de70fa..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/user-group-list.css +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.settings.user-groups table.user-group-list { - width: 100%; -} - -.settings.user-groups table.user-group-list th.user-group-name, -.settings.user-groups table.user-group-list td.user-group-name { - width: 100%; -} - -.settings.user-groups table.user-group-list tr.user-group td.user-group-name a[href] { - display: block; - padding: .5em 1em; -} - -.settings.user-groups table.user-group-list tr.user-group.disabled, -.settings.user-groups table.user-group-list tr.user-group.disabled td.user-group-name a[href] { - color: gray; - font-style: italic; -} - -.settings.user-groups table.user-group-list tr.user-group td.user-group-name { - padding: 0; -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/settings/styles/user-list.css b/guacamole/src/main/frontend/src/app/settings/styles/user-list.css deleted file mode 100644 index e9631a9509..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/styles/user-list.css +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.settings.users table.user-list { - width: 100%; -} - -.settings.users table.user-list th.last-active, -.settings.users table.user-list td.last-active { - white-space: nowrap; -} - -.settings.users table.user-list th, -.settings.users table.user-list td { - width: 25%; -} - -.settings.users table.user-list tr.user td.username a[href] { - display: block; - padding: .5em 1em; -} - -.settings.users table.user-list tr.user.disabled, -.settings.users table.user-list tr.user.disabled td.username a[href] { - color: gray; - font-style: italic; -} - -.settings.users table.user-list tr.user td.username { - padding: 0; -} \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/settings/templates/connection.html b/guacamole/src/main/frontend/src/app/settings/templates/connection.html deleted file mode 100644 index ecf5e8eeec..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/connection.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -
    - - - {{item.name}} - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/settings/templates/connectionGroup.html b/guacamole/src/main/frontend/src/app/settings/templates/connectionGroup.html deleted file mode 100644 index 79e37925ba..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/connectionGroup.html +++ /dev/null @@ -1,10 +0,0 @@ - - - -
    - - - {{item.name}} - -
    diff --git a/guacamole/src/main/frontend/src/app/settings/templates/newConnection.html b/guacamole/src/main/frontend/src/app/settings/templates/newConnection.html deleted file mode 100644 index d5d8201382..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/newConnection.html +++ /dev/null @@ -1,4 +0,0 @@ - - {{'SETTINGS_CONNECTIONS.ACTION_NEW_CONNECTION' | translate}} - diff --git a/guacamole/src/main/frontend/src/app/settings/templates/newConnectionGroup.html b/guacamole/src/main/frontend/src/app/settings/templates/newConnectionGroup.html deleted file mode 100644 index bd9735c3d2..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/newConnectionGroup.html +++ /dev/null @@ -1,4 +0,0 @@ - - {{'SETTINGS_CONNECTIONS.ACTION_NEW_CONNECTION_GROUP' | translate}} - diff --git a/guacamole/src/main/frontend/src/app/settings/templates/newSharingProfile.html b/guacamole/src/main/frontend/src/app/settings/templates/newSharingProfile.html deleted file mode 100644 index ef0f8ca528..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/newSharingProfile.html +++ /dev/null @@ -1,4 +0,0 @@ - - {{'SETTINGS_CONNECTIONS.ACTION_NEW_SHARING_PROFILE' | translate}} - diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settings.html b/guacamole/src/main/frontend/src/app/settings/templates/settings.html deleted file mode 100644 index c0986ff453..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settings.html +++ /dev/null @@ -1,21 +0,0 @@ -
    - -
    -

    {{'SETTINGS.SECTION_HEADER_SETTINGS' | translate}}

    - -
    - - -
    - -
    - - - - - - - - - -
    diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistory.html b/guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistory.html deleted file mode 100644 index 00c5c2e30d..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistory.html +++ /dev/null @@ -1,70 +0,0 @@ -
    - - -

    {{'SETTINGS_CONNECTION_HISTORY.HELP_CONNECTION_HISTORY' | translate}}

    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - -
    - {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_USERNAME' | translate}} - - {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_STARTDATE' | translate}} - - {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_DURATION' | translate}} - - {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_CONNECTION_NAME' | translate}} - - {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_REMOTEHOST' | translate}} - - {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_LOGS' | translate}} -
    {{historyEntryWrapper.entry.startDate | date : dateFormat}}{{historyEntryWrapper.entry.connectionName}}{{historyEntryWrapper.entry.remoteHost}} - - {{'SETTINGS_CONNECTION_HISTORY.ACTION_VIEW_RECORDING' | translate}} - -
    - - -

    - {{'SETTINGS_CONNECTION_HISTORY.INFO_NO_HISTORY' | translate}} -

    - - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistoryPlayer.html b/guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistoryPlayer.html deleted file mode 100644 index d986864d1c..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settingsConnectionHistoryPlayer.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settingsConnections.html b/guacamole/src/main/frontend/src/app/settings/templates/settingsConnections.html deleted file mode 100644 index 20f0f82689..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settingsConnections.html +++ /dev/null @@ -1,53 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settingsPreferences.html b/guacamole/src/main/frontend/src/app/settings/templates/settingsPreferences.html deleted file mode 100644 index bf9684295a..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settingsPreferences.html +++ /dev/null @@ -1,119 +0,0 @@ -
    - - -
    -

    {{'SETTINGS_PREFERENCES.HELP_LOCALE' | translate}}

    - -
    - - -

    {{'SETTINGS_PREFERENCES.SECTION_HEADER_APPEARANCE' | translate}}

    -
    -

    {{'SETTINGS_PREFERENCES.HELP_APPEARANCE' | translate}}

    -
    - - - - - - - - - -
    {{'SETTINGS_PREFERENCES.FIELD_HEADER_SHOW_RECENT_CONNECTIONS' | translate}}
    {{'SETTINGS_PREFERENCES.FIELD_HEADER_NUMBER_RECENT_CONNECTIONS' | translate}}
    -
    -
    - - -

    {{'SETTINGS_PREFERENCES.SECTION_HEADER_UPDATE_PASSWORD' | translate}}

    -
    -

    {{'SETTINGS_PREFERENCES.HELP_UPDATE_PASSWORD' | translate}}

    - - -
    - - - - - - - - - - - - - -
    {{'SETTINGS_PREFERENCES.FIELD_HEADER_PASSWORD_OLD' | translate}}
    {{'SETTINGS_PREFERENCES.FIELD_HEADER_PASSWORD_NEW' | translate}}
    {{'SETTINGS_PREFERENCES.FIELD_HEADER_PASSWORD_NEW_AGAIN' | translate}}
    -
    - - -
    - -
    -
    - - -

    {{'SETTINGS_PREFERENCES.SECTION_HEADER_DEFAULT_INPUT_METHOD' | translate}}

    -
    -

    {{'SETTINGS_PREFERENCES.HELP_DEFAULT_INPUT_METHOD' | translate}}

    -
    - - -
    - -

    -
    - - -
    - -

    -
    - - -
    - -

    -
    - -
    -
    - - -

    {{'SETTINGS_PREFERENCES.SECTION_HEADER_DEFAULT_MOUSE_MODE' | translate}}

    -
    -

    {{'SETTINGS_PREFERENCES.HELP_DEFAULT_MOUSE_MODE' | translate}}

    -
    - - -
    - -
    - -

    -
    -
    - - -
    - -
    - -

    -
    -
    - -
    -
    - - -
    - - - - -
    - -
    diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settingsSessions.html b/guacamole/src/main/frontend/src/app/settings/templates/settingsSessions.html deleted file mode 100644 index a2cd9b3d8e..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settingsSessions.html +++ /dev/null @@ -1,58 +0,0 @@ -
    - - -

    {{'SETTINGS_SESSIONS.HELP_SESSIONS' | translate}}

    - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    - {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_USERNAME' | translate}} - - {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_STARTDATE' | translate}} - - {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_REMOTEHOST' | translate}} - - {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_CONNECTION_NAME' | translate}} -
    - - {{wrapper.startDate}}{{wrapper.activeConnection.remoteHost}}{{wrapper.name}}
    - - -

    - {{'SETTINGS_SESSIONS.INFO_NO_SESSIONS' | translate}} -

    - - - -
    diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settingsUserGroups.html b/guacamole/src/main/frontend/src/app/settings/templates/settingsUserGroups.html deleted file mode 100644 index 4e7cd4c5a9..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settingsUserGroups.html +++ /dev/null @@ -1,48 +0,0 @@ -
    - - -

    {{'SETTINGS_USER_GROUPS.HELP_USER_GROUPS' | translate}}

    - - - - - - - - - - - - - - - - - -
    - {{'SETTINGS_USER_GROUPS.TABLE_HEADER_USER_GROUP_NAME' | translate}} -
    - -
    - {{manageableUserGroup.userGroup.identifier}} -
    -
    - - - - -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/settings/templates/settingsUsers.html b/guacamole/src/main/frontend/src/app/settings/templates/settingsUsers.html deleted file mode 100644 index 4a178fe491..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/settingsUsers.html +++ /dev/null @@ -1,60 +0,0 @@ -
    - - -

    {{'SETTINGS_USERS.HELP_USERS' | translate}}

    - - - - - - - - - - - - - - - - - - - - - - - -
    - {{'SETTINGS_USERS.TABLE_HEADER_USERNAME' | translate}} - - {{'SETTINGS_USERS.TABLE_HEADER_ORGANIZATION' | translate}} - - {{'SETTINGS_USERS.TABLE_HEADER_FULL_NAME' | translate}} - - {{'SETTINGS_USERS.TABLE_HEADER_LAST_ACTIVE' | translate}} -
    - -
    - {{manageableUser.user.username}} -
    -
    {{manageableUser.user.attributes['guac-organization']}}{{manageableUser.user.attributes['guac-full-name']}}{{manageableUser.user.lastActive | date : dateFormat}}
    - - - - -
    \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/settings/templates/sharingProfile.html b/guacamole/src/main/frontend/src/app/settings/templates/sharingProfile.html deleted file mode 100644 index 6c8ae4de40..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/templates/sharingProfile.html +++ /dev/null @@ -1,10 +0,0 @@ - - - -
    - - - {{item.name}} - -
    diff --git a/guacamole/src/main/frontend/src/app/settings/types/ActiveConnectionWrapper.js b/guacamole/src/main/frontend/src/app/settings/types/ActiveConnectionWrapper.js deleted file mode 100644 index 18e9032c1b..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/types/ActiveConnectionWrapper.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the ActiveConnectionWrapper class. - */ -angular.module('settings').factory('ActiveConnectionWrapper', [ - function defineActiveConnectionWrapper() { - - /** - * Wrapper for ActiveConnection which adds display-specific - * properties, such as a checked option. - * - * @constructor - * @param {ActiveConnectionWrapper|Object} template - * The object whose properties should be copied within the new - * ActiveConnectionWrapper. - */ - var ActiveConnectionWrapper = function ActiveConnectionWrapper(template) { - - /** - * The identifier of the data source associated with the - * ActiveConnection wrapped by this ActiveConnectionWrapper. - * - * @type String - */ - this.dataSource = template.dataSource; - - /** - * The display name of this connection. - * - * @type String - */ - this.name = template.name; - - /** - * The date and time this session began, pre-formatted for display. - * - * @type String - */ - this.startDate = template.startDate; - - /** - * The wrapped ActiveConnection. - * - * @type ActiveConnection - */ - this.activeConnection = template.activeConnection; - - /** - * A flag indicating that the active connection has been selected. - * - * @type Boolean - */ - this.checked = template.checked || false; - - }; - - return ActiveConnectionWrapper; - -}]); \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.js b/guacamole/src/main/frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.js deleted file mode 100644 index e7db412d81..0000000000 --- a/guacamole/src/main/frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.js +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A service for defining the ConnectionHistoryEntryWrapper class. - */ -angular.module('settings').factory('ConnectionHistoryEntryWrapper', ['$injector', - function defineConnectionHistoryEntryWrapper($injector) { - - // Required types - const ActivityLog = $injector.get('ActivityLog'); - const ConnectionHistoryEntry = $injector.get('ConnectionHistoryEntry'); - - // Required services - const $translate = $injector.get('$translate'); - - /** - * Wrapper for ConnectionHistoryEntry which adds display-specific - * properties, such as a duration. - * - * @constructor - * @param {ConnectionHistoryEntry} historyEntry - * The ConnectionHistoryEntry that should be wrapped. - */ - const ConnectionHistoryEntryWrapper = function ConnectionHistoryEntryWrapper(dataSource, historyEntry) { - - /** - * The wrapped ConnectionHistoryEntry. - * - * @type ConnectionHistoryEntry - */ - this.entry = historyEntry; - - /** - * The total amount of time the connection associated with the wrapped - * history record was open, in seconds. - * - * @type Number - */ - this.duration = historyEntry.endDate - historyEntry.startDate; - - /** - * An object providing value and unit properties, denoting the duration - * and its corresponding units. - * - * @type ConnectionHistoryEntry.Duration - */ - this.readableDuration = null; - - // Set the duration if the necessary information is present - if (historyEntry.endDate && historyEntry.startDate) - this.readableDuration = new ConnectionHistoryEntry.Duration(this.duration); - - /** - * The string to display as the duration of this history entry. If a - * duration is available, its value and unit will be exposed to any - * given translation string as the VALUE and UNIT substitution - * variables respectively. - * - * @type String - */ - this.readableDurationText = 'SETTINGS_CONNECTION_HISTORY.TEXT_HISTORY_DURATION'; - - // Inform user if end date is not known - if (!historyEntry.endDate) - this.readableDurationText = 'SETTINGS_CONNECTION_HISTORY.INFO_CONNECTION_DURATION_UNKNOWN'; - - /** - * The graphical session recording associated with this history entry, - * if any. If no session recordings are associated with the entry, this - * will be null. If there are multiple session recordings, this will be - * the first such recording. - * - * @type {ConnectionHistoryEntryWrapper.Log} - */ - this.sessionRecording = (function getSessionRecording() { - - var identifier = historyEntry.identifier; - if (!identifier) - return null; - - var name = _.findKey(historyEntry.logs, log => log.type === ActivityLog.Type.GUACAMOLE_SESSION_RECORDING); - if (!name) - return null; - - var log = historyEntry.logs[name]; - return new ConnectionHistoryEntryWrapper.Log({ - - url : '#/settings/' + encodeURIComponent(dataSource) - + '/recording/' + encodeURIComponent(identifier) - + '/' + encodeURIComponent(name), - - description : $translate(log.description.key, log.description.variables) - - }); - - })(); - - }; - - /** - * Representation of the ActivityLog of a ConnectionHistoryEntry which adds - * display-specific properties, such as a URL for viewing the log. - * - * @param {ConnectionHistoryEntryWrapper.Log|Object} [template={}] - * The object whose properties should be copied within the new - * ConnectionHistoryEntryWrapper.Log. - */ - ConnectionHistoryEntryWrapper.Log = function Log(template) { - - // Use empty object by default - template = template || {}; - - /** - * The relative URL for a session recording player that loads the - * session recording represented by this log. - * - * @type {!string} - */ - this.url = template.url; - - /** - * A promise that resolves with a human-readable description of the log. - * - * @type {!Promise.} - */ - this.description = template.description; - - }; - - return ConnectionHistoryEntryWrapper; - -}]); diff --git a/guacamole/src/main/frontend/src/app/storage/services/localStorageService.js b/guacamole/src/main/frontend/src/app/storage/services/localStorageService.js deleted file mode 100644 index a8c68460ee..0000000000 --- a/guacamole/src/main/frontend/src/app/storage/services/localStorageService.js +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Service for setting, removing, and retrieving localStorage keys. If access - * to localStorage is disabled, or the browser does not support localStorage, - * key values are temporarily stored in memory instead. If necessary, the same - * functionality is also available at the localStorageServiceProvider level. - */ -angular.module('storage').provider('localStorageService', [function localStorageServiceProvider() { - - /** - * Reference to this provider. - * - * @type localStorageServiceProvider - */ - var provider = this; - - /** - * Internal cache of key/value pairs stored within localStorage, updated - * lazily as keys are retrieved, updated, or removed. If localStorage is - * not actually available, then this cache will be the sole storage - * location for these key/value pairs. - * - * @type Object. - */ - var storedItems = {}; - - /** - * Stores the given value within localStorage under the given key. If access - * to localStorage is not provided/implemented by the browser, the key/value - * pair will be stored internally (in memory) only, with the stored value - * remaining retrievable via getItem() until the browser tab/window is - * closed. - * - * @param {String} key - * The arbitrary, unique key under which the value should be stored. - * - * @param {Object} value - * The object to store under the given key. This may be any object that - * can be serialized as JSON, and will automatically be serialized as - * JSON prior to storage. - */ - provider.setItem = function setItem(key, value) { - - // Store given value internally - var data = JSON.stringify(value); - storedItems[key] = data; - - // Additionally store value within localStorage if allowed - try { - if (window.localStorage) - localStorage.setItem(key, data); - } - catch (ignore) {} - - }; - - /** - * Removes the item having the given key from localStorage. If access to - * localStorage is not provided/implemented by the browser, the item is - * removed solely from internal, in-memory storage. If no such item exists, - * this function has no effect. - * - * @param {String} key - * The arbitrary, unique key of the item to remove from localStorage. - */ - provider.removeItem = function removeItem(key) { - - // Evict key from internal storage - delete storedItems[key]; - - // Remove key from localStorage if allowed - try { - if (window.localStorage) - localStorage.removeItem(key); - } - catch (ignore) {} - - }; - - /** - * Retrieves the value currently stored within localStorage for the item - * having the given key. If access to localStorage is not - * provided/implemented by the browser, the item is retrieved from - * internal, in-memory storage. The retrieved value is automatically - * deserialized from JSON prior to being returned. - * - * @param {String} key - * The arbitrary, unique key of the item to retrieve from localStorage. - * - * @returns {Object} - * The value stored within localStorage under the given key, - * automatically deserialized from JSON, or null if no such item is - * present. - */ - provider.getItem = function getItem(key) { - - // Attempt to refresh internal storage from localStorage - try { - if (window.localStorage) - storedItems[key] = localStorage.getItem(key); - } - catch (ignore) {} - - // Pull and parse value from internal storage, if present - var data = storedItems[key]; - if (data) - return JSON.parse(data); - - // No value defined for given key - return null; - - }; - - // Factory method required by provider - this.$get = ['$injector', function localStorageServiceFactory($injector) { - - // Pass through all get/set/remove calls to the provider - // implementations of the same - return { - setItem : provider.setItem, - removeItem : provider.removeItem, - getItem : provider.getItem - }; - - }]; - -}]); diff --git a/guacamole/src/main/frontend/src/app/storage/services/sessionStorageFactory.js b/guacamole/src/main/frontend/src/app/storage/services/sessionStorageFactory.js deleted file mode 100644 index da53cdfe97..0000000000 --- a/guacamole/src/main/frontend/src/app/storage/services/sessionStorageFactory.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Factory for session-local storage. Creating session-local storage creates a - * getter/setter with semantics tied to the user's session. If a user is logged - * in, the storage is consistent. If the user logs out, the storage will not - * persist new values, and attempts to retrieve the existing value will result - * only in the default value. - */ -angular.module('storage').factory('sessionStorageFactory', ['$injector', function sessionStorageFactory($injector) { - - // Required services - var $rootScope = $injector.get('$rootScope'); - var authenticationService = $injector.get('authenticationService'); - - var service = {}; - - /** - * Creates session-local storage that uses the provided default value or - * getter to obtain new values as necessary. Beware that if the default is - * an object, the resulting getter provide deep copies for new values. - * - * @param {Function|*} [template] - * The default value for new users, or a getter which returns a newly- - * created default value. - * - * @param {Function} [destructor] - * Function which will be called just before the stored value is - * destroyed on logout, if a value is stored. - * - * @returns {Function} - * A getter/setter which returns or sets the current value of the new - * session-local storage. Newly-set values will only persist of the - * user is actually logged in. - */ - service.create = function create(template, destructor) { - - /** - * Whether new values may be stored and retrieved. - * - * @type Boolean - */ - var enabled = !!authenticationService.getCurrentToken(); - - /** - * Getter which returns the default value for this storage. - * - * @type Function - */ - var getter; - - // If getter provided, use that - if (typeof template === 'function') - getter = template; - - // Otherwise, create and maintain a deep copy (automatically cached to - // avoid "infdig" errors) - else { - var cached = angular.copy(template); - getter = function getIndependentCopy() { - - // Reset to template only if changed externally, such that - // session storage values can be safely used in scope watches - // even if not logged in - if (!_.isEqual(cached, template)) - cached = angular.copy(template); - - return cached; - - }; - } - - /** - * The current value of this storage, or undefined if not yet set. - */ - var value = undefined; - - // Reset value and allow storage when the user is logged in - $rootScope.$on('guacLogin', function userLoggedIn() { - enabled = true; - value = undefined; - }); - - // Reset value and disallow storage when the user is logged out - $rootScope.$on('guacLogout', function userLoggedOut() { - - // Call destructor before storage is teared down - if (angular.isDefined(value) && destructor) - destructor(value); - - // Destroy storage - enabled = false; - value = undefined; - - }); - - // Return getter/setter for value - return function sessionLocalGetterSetter(newValue) { - - // Only actually store/retrieve values if enabled - if (enabled) { - - // Set value if provided - if (angular.isDefined(newValue)) - value = newValue; - - // Obtain new value if unset - if (!angular.isDefined(value)) - value = getter(); - - // Return current value - return value; - - } - - // Otherwise, just pretend to store/retrieve - return angular.isDefined(newValue) ? newValue : getter(); - - }; - - }; - - return service; - -}]); diff --git a/guacamole/src/main/frontend/src/app/storage/storageModule.js b/guacamole/src/main/frontend/src/app/storage/storageModule.js deleted file mode 100644 index 219ffe06c2..0000000000 --- a/guacamole/src/main/frontend/src/app/storage/storageModule.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module which provides generic storage services. - */ -angular.module('storage', [ - 'auth' -]); diff --git a/guacamole/src/main/frontend/src/app/textInput/directives/guacKey.js b/guacamole/src/main/frontend/src/app/textInput/directives/guacKey.js deleted file mode 100644 index 45fa4b38f1..0000000000 --- a/guacamole/src/main/frontend/src/app/textInput/directives/guacKey.js +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which displays a button that controls the pressed state of a - * single keyboard key. - */ -angular.module('textInput').directive('guacKey', [function guacKey() { - - return { - restrict: 'E', - replace: true, - scope: { - - /** - * The text to display within the key. This will be run through the - * translation filter prior to display. - * - * @type String - */ - text : '=', - - /** - * The keysym to send within keyup and keydown events when this key - * is pressed or released. - * - * @type Number - */ - keysym : '=', - - /** - * Whether this key is sticky. Sticky keys toggle their pressed - * state with each click. - * - * @type Boolean - * @default false - */ - sticky : '=?', - - /** - * Whether this key is currently pressed. - * - * @type Boolean - * @default false - */ - pressed : '=?' - - }, - - templateUrl: 'app/textInput/templates/guacKey.html', - controller: ['$scope', '$rootScope', - function guacKey($scope, $rootScope) { - - // Not sticky by default - $scope.sticky = $scope.sticky || false; - - // Unpressed by default - $scope.pressed = $scope.pressed || false; - - /** - * Presses and releases this key, sending the corresponding keydown - * and keyup events. In the case of sticky keys, the pressed state - * is toggled, and only a single keydown/keyup event will be sent, - * depending on the current state. - * - * @param {MouseEvent} event - * The mouse event which resulted in this function being - * invoked. - */ - $scope.updateKey = function updateKey(event) { - - // If sticky, toggle pressed state - if ($scope.sticky) - $scope.pressed = !$scope.pressed; - - // For all non-sticky keys, press and release key immediately - else { - $rootScope.$broadcast('guacSyntheticKeydown', $scope.keysym); - $rootScope.$broadcast('guacSyntheticKeyup', $scope.keysym); - } - - // Prevent loss of focus due to interaction with buttons - event.preventDefault(); - - }; - - // Send keyup/keydown when pressed state is altered - $scope.$watch('pressed', function updatePressedState(isPressed, wasPressed) { - - // If the key is pressed now, send keydown - if (isPressed) - $rootScope.$broadcast('guacSyntheticKeydown', $scope.keysym); - - // If the key was pressed, but is not pressed any longer, send keyup - else if (wasPressed) - $rootScope.$broadcast('guacSyntheticKeyup', $scope.keysym); - - }); - - }] - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/textInput/directives/guacTextInput.js b/guacamole/src/main/frontend/src/app/textInput/directives/guacTextInput.js deleted file mode 100644 index c1a467727f..0000000000 --- a/guacamole/src/main/frontend/src/app/textInput/directives/guacTextInput.js +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which displays the Guacamole text input method. - */ -angular.module('textInput').directive('guacTextInput', [function guacTextInput() { - - return { - restrict: 'E', - replace: true, - scope: {}, - - templateUrl: 'app/textInput/templates/guacTextInput.html', - controller: ['$scope', '$rootScope', '$element', '$timeout', - function guacTextInput($scope, $rootScope, $element, $timeout) { - - /** - * The number of characters to include on either side of text input - * content, to allow the user room to use backspace and delete. - * - * @type Number - */ - var TEXT_INPUT_PADDING = 4; - - /** - * The Unicode codepoint of the character to use for padding on - * either side of text input content. - * - * @type Number - */ - var TEXT_INPUT_PADDING_CODEPOINT = 0x200B; - - /** - * Keys which should be allowed through to the client when in text - * input mode, providing corresponding key events are received. - * Keys in this set will be allowed through to the server. - * - * @type Object. - */ - var ALLOWED_KEYS = { - 0xFE03: true, /* AltGr */ - 0xFF08: true, /* Backspace */ - 0xFF09: true, /* Tab */ - 0xFF0D: true, /* Enter */ - 0xFF1B: true, /* Escape */ - 0xFF50: true, /* Home */ - 0xFF51: true, /* Left */ - 0xFF52: true, /* Up */ - 0xFF53: true, /* Right */ - 0xFF54: true, /* Down */ - 0xFF57: true, /* End */ - 0xFF64: true, /* Insert */ - 0xFFBE: true, /* F1 */ - 0xFFBF: true, /* F2 */ - 0xFFC0: true, /* F3 */ - 0xFFC1: true, /* F4 */ - 0xFFC2: true, /* F5 */ - 0xFFC3: true, /* F6 */ - 0xFFC4: true, /* F7 */ - 0xFFC5: true, /* F8 */ - 0xFFC6: true, /* F9 */ - 0xFFC7: true, /* F10 */ - 0xFFC8: true, /* F11 */ - 0xFFC9: true, /* F12 */ - 0xFFE1: true, /* Left shift */ - 0xFFE2: true, /* Right shift */ - 0xFFE3: true, /* Left ctrl */ - 0xFFE4: true, /* Right ctrl */ - 0xFFE9: true, /* Left alt */ - 0xFFEA: true, /* Right alt */ - 0xFFFF: true /* Delete */ - }; - - /** - * Recently-sent text, ordered from oldest to most recent. - * - * @type String[] - */ - $scope.sentText = []; - - /** - * Whether the "Alt" key is currently pressed within the text input - * interface. - * - * @type Boolean - */ - $scope.altPressed = false; - - /** - * Whether the "Ctrl" key is currently pressed within the text - * input interface. - * - * @type Boolean - */ - $scope.ctrlPressed = false; - - /** - * The text area input target. - * - * @type Element - */ - var target = $element.find('.target')[0]; - - /** - * Whether the text input target currently has focus. Setting this - * attribute has no effect, but any bound property will be updated - * as focus is gained or lost. - * - * @type Boolean - */ - var hasFocus = false; - - target.onfocus = function targetFocusGained() { - hasFocus = true; - resetTextInputTarget(TEXT_INPUT_PADDING); - }; - - target.onblur = function targetFocusLost() { - hasFocus = false; - }; - - /** - * Whether composition is currently active within the text input - * target element, such as when an IME is in use. - * - * @type Boolean - */ - var composingText = false; - - target.addEventListener("compositionstart", function targetComposeStart(e) { - composingText = true; - }, false); - - target.addEventListener("compositionend", function targetComposeEnd(e) { - composingText = false; - }, false); - - /** - * Translates a given Unicode codepoint into the corresponding X11 - * keysym. - * - * @param {Number} codepoint - * The Unicode codepoint to translate. - * - * @returns {Number} - * The X11 keysym that corresponds to the given Unicode - * codepoint, or null if no such keysym exists. - */ - var keysymFromCodepoint = function keysymFromCodepoint(codepoint) { - - // Keysyms for control characters - if (codepoint <= 0x1F || (codepoint >= 0x7F && codepoint <= 0x9F)) - return 0xFF00 | codepoint; - - // Keysyms for ASCII chars - if (codepoint >= 0x0000 && codepoint <= 0x00FF) - return codepoint; - - // Keysyms for Unicode - if (codepoint >= 0x0100 && codepoint <= 0x10FFFF) - return 0x01000000 | codepoint; - - return null; - - }; - - /** - * Presses and releases the key corresponding to the given keysym, - * as if typed by the user. - * - * @param {Number} keysym The keysym of the key to send. - */ - var sendKeysym = function sendKeysym(keysym) { - $rootScope.$broadcast('guacSyntheticKeydown', keysym); - $rootScope.$broadcast('guacSyntheticKeyup', keysym); - }; - - /** - * Presses and releases the key having the keysym corresponding to - * the Unicode codepoint given, as if typed by the user. - * - * @param {Number} codepoint - * The Unicode codepoint of the key to send. - */ - var sendCodepoint = function sendCodepoint(codepoint) { - - if (codepoint === 10) { - sendKeysym(0xFF0D); - releaseStickyKeys(); - return; - } - - var keysym = keysymFromCodepoint(codepoint); - if (keysym) { - sendKeysym(keysym); - releaseStickyKeys(); - } - - }; - - /** - * Translates each character within the given string to keysyms and - * sends each, in order, as if typed by the user. - * - * @param {String} content - * The string to send. - */ - var sendString = function sendString(content) { - - var sentText = ""; - - // Send each codepoint within the string - for (var i=0; i - {{text | translate}} - diff --git a/guacamole/src/main/frontend/src/app/textInput/templates/guacTextInput.html b/guacamole/src/main/frontend/src/app/textInput/templates/guacTextInput.html deleted file mode 100644 index 7b8b728815..0000000000 --- a/guacamole/src/main/frontend/src/app/textInput/templates/guacTextInput.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - - -
    {{text}}
    - -
    diff --git a/guacamole/src/main/frontend/src/app/textInput/textInputModule.js b/guacamole/src/main/frontend/src/app/textInput/textInputModule.js deleted file mode 100644 index 7fd3445270..0000000000 --- a/guacamole/src/main/frontend/src/app/textInput/textInputModule.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for displaying the Guacamole text input method. - */ -angular.module('textInput', []); diff --git a/guacamole/src/main/frontend/src/app/touch/directives/guacTouchDrag.js b/guacamole/src/main/frontend/src/app/touch/directives/guacTouchDrag.js deleted file mode 100644 index 79ffd93e20..0000000000 --- a/guacamole/src/main/frontend/src/app/touch/directives/guacTouchDrag.js +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which allows handling of drag gestures on a particular element. - */ -angular.module('touch').directive('guacTouchDrag', [function guacTouchDrag() { - - return { - restrict: 'A', - - link: function linkGuacTouchDrag($scope, $element, $attrs) { - - /** - * Called during a drag gesture as the user's finger is placed upon - * the element, moves, and is lifted from the element. - * - * @event - * @param {Boolean} inProgress - * Whether the gesture is currently in progress. This will - * always be true except when the gesture has ended, at which - * point one final call will occur with this parameter set to - * false. - * - * @param {Number} startX - * The X location at which the drag gesture began. - * - * @param {Number} startY - * The Y location at which the drag gesture began. - * - * @param {Number} currentX - * The current X location of the user's finger. - * - * @param {Number} currentY - * The current Y location of the user's finger. - * - * @param {Number} deltaX - * The difference in X location relative to the start of the - * gesture. - * - * @param {Number} deltaY - * The difference in Y location relative to the start of the - * gesture. - * - * @return {Boolean} - * false if the default action of the touch event should be - * prevented, any other value otherwise. - */ - var guacTouchDrag = $scope.$eval($attrs.guacTouchDrag); - - /** - * The element which will register the drag gesture. - * - * @type Element - */ - var element = $element[0]; - - /** - * Whether a drag gesture is in progress. - * - * @type Boolean - */ - var inProgress = false; - - /** - * The starting X location of the drag gesture. - * - * @type Number - */ - var startX = null; - - /** - * The starting Y location of the drag gesture. - * - * @type Number - */ - var startY = null; - - /** - * The current X location of the drag gesture. - * - * @type Number - */ - var currentX = null; - - /** - * The current Y location of the drag gesture. - * - * @type Number - */ - var currentY = null; - - /** - * The change in X relative to drag start. - * - * @type Number - */ - var deltaX = 0; - - /** - * The change in X relative to drag start. - * - * @type Number - */ - var deltaY = 0; - - // When there is exactly one touch, monitor the change in location - element.addEventListener("touchmove", function dragTouchMove(e) { - if (e.touches.length === 1) { - - // Get touch location - var x = e.touches[0].clientX; - var y = e.touches[0].clientY; - - // Init start location and deltas if gesture is starting - if (!startX || !startY) { - startX = currentX = x; - startY = currentY = y; - deltaX = 0; - deltaY = 0; - inProgress = true; - } - - // Update deltas if gesture is in progress - else if (inProgress) { - deltaX = x - currentX; - deltaY = y - currentY; - currentX = x; - currentY = y; - } - - // Signal start/change in drag gesture - if (inProgress && guacTouchDrag) { - $scope.$apply(function dragChanged() { - if (guacTouchDrag(true, startX, startY, currentX, currentY, deltaX, deltaY) === false) - e.preventDefault(); - }); - } - - } - }, false); - - // Reset monitoring and fire end event when done - element.addEventListener("touchend", function dragTouchEnd(e) { - - if (startX && startY && e.touches.length === 0) { - - // Signal end of drag gesture - if (inProgress && guacTouchDrag) { - $scope.$apply(function dragComplete() { - if (guacTouchDrag(true, startX, startY, currentX, currentY, deltaX, deltaY) === false) - e.preventDefault(); - }); - } - - startX = currentX = null; - startY = currentY = null; - deltaX = 0; - deltaY = 0; - inProgress = false; - - } - - }, false); - - } - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/touch/directives/guacTouchPinch.js b/guacamole/src/main/frontend/src/app/touch/directives/guacTouchPinch.js deleted file mode 100644 index f754001047..0000000000 --- a/guacamole/src/main/frontend/src/app/touch/directives/guacTouchPinch.js +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * A directive which allows handling of pinch gestures (pinch-to-zoom, for - * example) on a particular element. - */ -angular.module('touch').directive('guacTouchPinch', [function guacTouchPinch() { - - return { - restrict: 'A', - - link: function linkGuacTouchPinch($scope, $element, $attrs) { - - /** - * Called when a pinch gesture begins, changes, or ends. - * - * @event - * @param {Boolean} inProgress - * Whether the gesture is currently in progress. This will - * always be true except when the gesture has ended, at which - * point one final call will occur with this parameter set to - * false. - * - * @param {Number} startLength - * The initial distance between the two touches of the - * pinch gesture, in pixels. - * - * @param {Number} currentLength - * The current distance between the two touches of the - * pinch gesture, in pixels. - * - * @param {Number} centerX - * The current X coordinate of the center of the pinch gesture. - * - * @param {Number} centerY - * The current Y coordinate of the center of the pinch gesture. - * - * @return {Boolean} - * false if the default action of the touch event should be - * prevented, any other value otherwise. - */ - var guacTouchPinch = $scope.$eval($attrs.guacTouchPinch); - - /** - * The element which will register the pinch gesture. - * - * @type Element - */ - var element = $element[0]; - - /** - * The starting pinch distance, or null if the gesture has not yet - * started. - * - * @type Number - */ - var startLength = null; - - /** - * The current pinch distance, or null if the gesture has not yet - * started. - * - * @type Number - */ - var currentLength = null; - - /** - * The X coordinate of the current center of the pinch gesture. - * - * @type Number - */ - var centerX = 0; - - /** - * The Y coordinate of the current center of the pinch gesture. - * @type Number - */ - var centerY = 0; - - /** - * Given a touch event, calculates the distance between the first - * two touches in pixels. - * - * @param {TouchEvent} e - * The touch event to use when performing distance calculation. - * - * @return {Number} - * The distance in pixels between the first two touches. - */ - var pinchDistance = function pinchDistance(e) { - - var touchA = e.touches[0]; - var touchB = e.touches[1]; - - var deltaX = touchA.clientX - touchB.clientX; - var deltaY = touchA.clientY - touchB.clientY; - - return Math.sqrt(deltaX*deltaX + deltaY*deltaY); - - }; - - /** - * Given a touch event, calculates the center between the first two - * touches in pixels, returning the X coordinate of this center. - * - * @param {TouchEvent} e - * The touch event to use when performing center calculation. - * - * @return {Number} - * The X coordinate of the center of the first two touches. - */ - var pinchCenterX = function pinchCenterX(e) { - - var touchA = e.touches[0]; - var touchB = e.touches[1]; - - return (touchA.clientX + touchB.clientX) / 2; - - }; - - /** - * Given a touch event, calculates the center between the first two - * touches in pixels, returning the Y coordinate of this center. - * - * @param {TouchEvent} e - * The touch event to use when performing center calculation. - * - * @return {Number} - * The Y coordinate of the center of the first two touches. - */ - var pinchCenterY = function pinchCenterY(e) { - - var touchA = e.touches[0]; - var touchB = e.touches[1]; - - return (touchA.clientY + touchB.clientY) / 2; - - }; - - // When there are exactly two touches, monitor the distance between - // them, firing zoom events as appropriate - element.addEventListener("touchmove", function pinchTouchMove(e) { - if (e.touches.length === 2) { - - // Calculate current zoom level - currentLength = pinchDistance(e); - - // Calculate center - centerX = pinchCenterX(e); - centerY = pinchCenterY(e); - - // Init start length if pinch is not in progress - if (!startLength) - startLength = currentLength; - - // Notify of pinch status - if (guacTouchPinch) { - $scope.$apply(function pinchChanged() { - if (guacTouchPinch(true, startLength, currentLength, centerX, centerY) === false) - e.preventDefault(); - }); - } - - } - }, false); - - // Reset monitoring and fire end event when done - element.addEventListener("touchend", function pinchTouchEnd(e) { - - if (startLength && e.touches.length < 2) { - - // Notify of pinch end - if (guacTouchPinch) { - $scope.$apply(function pinchComplete() { - if (guacTouchPinch(false, startLength, currentLength, centerX, centerY) === false) - e.preventDefault(); - }); - } - - startLength = null; - - } - - }, false); - - } - - }; -}]); diff --git a/guacamole/src/main/frontend/src/app/touch/touchModule.js b/guacamole/src/main/frontend/src/app/touch/touchModule.js deleted file mode 100644 index 751c9aee13..0000000000 --- a/guacamole/src/main/frontend/src/app/touch/touchModule.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Module for handling common touch gestures, like panning or pinch-to-zoom. - */ -angular.module('touch', []); diff --git a/guacamole/src/main/frontend/src/fonts/carlito/Carlito-Bold.woff b/guacamole/src/main/frontend/src/fonts/carlito/Carlito-Bold.woff deleted file mode 100644 index 0afd4f57537a5824febbf93e1d4e9d2439aadb7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281212 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

  • Cvc_8VhG~ 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
    =M*T=iDOfwvrO#XEcV2pq0}VGpZzK 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�qNwm4Cv7x@M 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%0DIOfb@D{!U(YWI@2;_{TcE;VVh{pKPxm+RiK+ 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

    Q|h*Oy~Qk6#HP5JfWn#;a;s;sBldhXw( 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

    1C^-qB9HRT9fxP8;5;Cma#{|b zO^)Ty<&Aki-p(@KIL5r1WxQ!MBW|pLkN9XzM*i@XkYnD8vdOj2Z@H+~fL6?HpPC#R z=xB2|YxH8;^EsI{uqu>>)j_-zlH2(@NE z_uL`$8n$_CvYY@nxn_Xg(gK`PL?noDak&eEbg&?W`+7RsTbrS>Y~^6ppi3kQ+iUOw z&k`?iTpvjpeh=A+5HHYe7fdhE)Ah;8+@l_PdYKUscVG4a^lla)(3ckx7qp_<0yahU zJA|$~;1Ld&>zLnVQEzN+0-c?i8Xwy<2sCQi(!9m3xgn>08}_nqMr7PA@)JyNsVgWY;fT%icywFk&-Zr5}0aY2b+p1$d{e5K$GfDv5{}moR;)%5I)Y zW8IytEorhySCq&4O8X-1N#lH7B0RsA`TaTA_?d_dZ+;o<93a#Q+GG>ujq{z_zuu4Ymz5FsSDHa0d5g7u*N%x7gdYUb6Bt*kmgzi}I?3 z;gzlv-$+Z60X5=08O&8XOppY0Gqa#vl2}l(<1=w4;s7inKARIPTq0Ar=G#LC_k;`A zGu%hmD`JZV#_LlTGzQCjU+2%9lB0~zIaowWmk_NRX2P<=pzjs;o9|FfXatsz$YT|Q z0`-9I{ozQue0}| z-JhUc1v8IbfYctl|rNfoUtz22U*npgpgJ7s(OQvf2?_DPUYrp@&-Ti85ttj z^Jnk0z66f>-ksrgo{PtiRG$XF$b{osAqcmZoU+*4-QL!euCJ@Aj1MFR2zbpYleal( zO?F%=*>Q!~7AX=ZveRA935GoJ=DsUNe;`g1oSCrS1atT0(aF2LwG*p?fB;cgMm#)P zc1^(;F$L2UB`D@a+K|l>PZo*%rZJXA62Ot&mnXb+fuiBVkS5h&tVOSciyx0q(Co@4 zKj3g5y96&1VO+IfoN&qa8LSaIV22{0d?~ZZMwX*`vd0NWoXq@L_G$DE-Cs@^$&`gN zf~JB|tcz-TC=qXIO4h|Y5*8h5J7931zv500FBH3~&)H~9$~ zA$q23=Y0~1iXCqX%B+uU&LPp+nTU7xclP&m+2*1dbGeqxrNl9p4r4CAWwC~t-~4Bs z3q0G(o6ASZ+WA2%haj1Y5jQz~_BSkxVCKo}Q|RluzaOh?E}AJ(JxEiLsx4a<$WJYh z&r+m7u2P00n_w^Nh*mbx6Y_Ev?1X#)mfYVZinYBxiTLK}vC*Dwz1uq4ni`p>9Pdta z6A}asJDB+u)ukzyF6n1~mi>aYHVdZ3&RcDqOA5gIx+lD;O#cSp<*)TGh26Q<1>?!p zhvAi&eRZQddzzTZwT>j~YN`nBQVFn#ienAg*cy*Ekv{KWzR)JXrJd!ve-*{WJlp5# z6KLxagf!X9ZbHIgjKh`TiqaAs!lBYgsf7!Jdy@<9LuvZzt~~C(i=^OXH+YQeYHO-! zNSg)Rf_=gP8|=2sa&6eEH+!HACD7wB1EQRx0i)X{z>>f-a)4P^iuV3SU$|EkAm_Yt zA(`hvbO*YJ>`>3q7fwIOX+9Z3$+>Ai_G!LVq+xAU5jY623#c5=%sB**$}DQ;&O0A} z>|>|yyZ6p}?!4#jk9_EZA9(*;-+av*uYO&3S7%#mb1>9~tFRoCO64HLuEBrct+8zT zCxqGesbnNMf)l;*L=A?2;-`jLErjW24jJcjARE?-$-VmdQ|zaabNV0oaTCn5PIjrfJ7;hJDHSmAH2ll@{e7}SV}Z~_Mc z{7HbxlMj$LSK?(M6csg5^ZDy`c0~N;K{cuo_?che(9IVFO6r56Dh5kc(pBUj4Vxgm zrsV9M+@;TdLQ}ZoXHVf@-Sxw3{B{0U`H4hc=}-FJ%-yO46*(wZ2P=c;?e@ie?dg=L z2ufHHWS;!viz-@afZ*dN?i0a<*m<7gMPehBs4w74_}hAXF<)IO-B1xICorml!J42y z;ZH>B!oCt;2|=htjVkrENPHBCIg8=Y@G+I31TmN}{hCT9MZA%3pc%nAbHZ_lW@@pAn$^}+S31><>KXB! zExj;d<7Ylgb9Q-Ym-Bwrsb`2oo3a{(7erC>_DT>Bc&jNw(MUK%ng&ZFF?z@95H@<% z`VI#xuVYuP4r)EObS0U`{_HRKgW_vo9{XV)9h63=UW?HEx-Urx(=Bq6%o$lr2a&3X ziYl%^9(rEjRtV;@#KCh~MF~PwI`zU5w00_5z#3<)iX-dosL@C~=uTtjO5s6w{n%)G z8;7SRM>mgc?(JzCX&*_aYO2Z;u@aw(Te;Q%JE!uR3y(gA6;x<81S3`PLJCqR6`RdE zJ9^G$l+I>!^XQB|QD`?g3 z4G;D4YDJY8Z`{7;$k6Zwb8VCF_`%)Bj!qny=tx8>l)Am2ykg%q=X7K?x9^x9t^TtQ zU))*VI)d+bHL+)}216{rCR*{jZ~jHNd?_{5SW-K6Y6<5|Z)?5X)HvATPzxp62J;h$H0R|}fxliyg9MLBsq_DmRVT{6J7D!_!(kM2|D;WYJwp>Ar`~8M7ojwqM|M3bI1ikpSF;IuDgqM z1EvaxYCvPh$3{K%)xU9l zg^=bKprZG}BDPVj6z;piri&N5bn%H}2>s9{S#?yhv>@TEW^wjNjzVM!SNHm;q0f^n z#v8LQX+(C^s^9^{)sygM9i2R7s*&m1{M^>rDSdR$*d8yr3fc7RqptPwljs9P-+t|) zLKV%EWD1OiR1pfT<}4EpxeON5vU-P>Da4>CzNI`!1t~JN{;q{}ZSmm3-XgkY(nR{5 z)AkUWoXkE)eTN17X7slnwr4hs1OC7&@+(UZT zdFjHX3zp9S6)J$| zdia%V>%X5mBP#JsJ=}gDUJnSE;*Xxg}iy}RbO z%ubFMwQ<5A+^#!x=xdLX|LT#wo2PjtCm-gfVk}5cXV$y5@Fdr8&^X~)$5z2jrtuB* z^ft**oYOfUGk|MxU=gLg};Tzbk!q8uZzDU=8|E8+NbM z>yn>u-jDc3W-hAcalp5NgMq`-oL}2aHVqcNB-4x;ZL~sdqU(SYTN6%k5IF-kkAeX$ z5Y$$XUsD49WtBQ#Hf{8wK+qRhD!|S#<3`9~>}CtX3gUpa0bo&D&en#Y=2uo;EQUb4 zEro$?5XHJb28y5)yDXrZKcM-K6UQjvSB?YdKrzsTpz8ZxEWi-ep0L~aF6zyoKgTaT zcHZKlJ-Z6)kZq4Ez15{d-y$|n!w8po?185vIH1DLMAcM3s84tuJ7Uix zDZK!sB3oVeHfi(5L3o}_b?)8E1a0r(y^H7UFTQJz8nMcZZs)t`_Fba87rW>NOAC>2 zzpDDrMFE0qAfIqc>m!`O0>4W3g)a`0!2(Z6CjE}AeKfeW5HiqzkJpAvRndMgE)X{C zGuS{h{qVlS>tI8U5ASvH;d_rDUNCl2dvVZz2@VC167%D+lcGN#<Im8JV?bXN zg0Ytp!MZ;Jf^02Z3#QwyIF>I5M1Akt2m++t1vF$KOf@8u?_YEpOX9^Bo_}QNz(R2) zDRI~;x1aHSVyk*RY&_BF06{+xS}Mi2a40mevjimV}Eb~q3`LTDXb}Zt{7ZC zio_XP@g$V8pwio6&wI-rvny#srl)uxm^*JR2iDQY`_2-`uzlOsS#J-E-q?zU?rk>i zZT6yzu;6ibV?WqdeTur6yF4}%7RQQR@-@=)xedX{UxX{+;hPf#=>&IuKCinzPhYAL zu7%8$3x%$S!Y}N4NOaW|aDRRQ*GKnp?PtHrjYn&mFjYTq}KyWi?K8K(y;S|-u~fRW2uhv^7dpbmTWIC??}Zq%&Z??@wM^}=-*LZ z(NQ0Z)pywL2d{VCjeQOS=hk=AV3pk3$PKJVC(j$$wQd@yeDT>a{%?hMqX9I9wxiwX zl%A}s;1Cy6IgDnpinm}z-8rw1wurLQjW|J;rcGmNWN}mxCXS3GNS8p?8yT*)jb~yB zT1t%74-W{`m^%B2UVUh}WawxWInzsq2FXr!Y;bC5s-Y>JPN!OZ@wTB(Ooge$DNFGL zO{u}tl5wWoHOVyL1`{zX^KsnY*d$NjAskB#1@VVcEiH#{UAeFOh+Uv2kGH%&m@J?8 zT&iK0C3~BPE(oMcC-5Cq&<2+ppKQWA1pdN`{_4y=@zvAA{dMO}buG@1M6fn&idAj( znbPviSGr$6clH)T`bysytH9k<&^SfPd@I3;rHzsIb3D#`y)5y`@+~y)2=OKE6n@Nq zA5EZLct3NMqaawDvE&mmk_NF#cNMlTHRH=g*1XRqKt74{*$;U&jtU!<9>}*s1*=>& z*UOw?k$jp@(!4;B#iIa(2I|(V2?4RSQ_~E0!U2Ws3)}z{`iyuTfKUz&xW=XWFOo#%c|#l!^WI{J~%#z9kyz*?-yChn*&>aJ&NU=`Ikj5F`$bJx<5vaV`{# zSFrkSBwk@Xor=XP?Ax(Ea)d zr^q#Nh$}Y4Vuox)$vz6LK$=Kdkya2-gouaOFiFFhm++A&4u!}r+0V%`T2NtA3(FSA zF+*PphJNP@gMus|GsN?-;E{dpkt6%|a`?zaM=m5gi*xoa?OU4Pv3X`a07kywdy1CkHF`U;L`!&9B(gK6%TJ?mf0Vd2phWTDN@iSP*KJ}WrSGtyW z4J~hJ!4HidooSZv&uT~apFIp-82`PAKfCYcEma>sRaIZ5Dq~H<>FA}e7~4NkRzGv` z?8xPZMue^_UR&Q>PYvGr2lgL3`zx`2V77T-KDFg#Tk*G>=T>JXR(H1HN3KAoT(cOD zb703vwexf3#Y67=Hg{_xKHqKy9W`D^)E53ui(LYJg3%U(& zawqxpI$f=*j0u8B--kA^7lRUe?hu?&v600%0RiLOf&v9(Sw0KzRtkG64QgqHTSVzKG#C z7zycQDTV7LIRc6bN$Eh@PChvHo(m6LzuY(S^7kw+zqwZvn(+AE*Y|Z^HhtpcHJN=h z`u-hfpV+!E{f37wf6bX2=eJKCO!Mc=Z^<-I_MQ3c!}mU4dnNM`PiF3>b8kbN&_A)| zEYjT-kOWmJBd#`7`GseyuJ2@8R*l7KLEd&)wCH1l1Vk*M1^TQ$K+_YL$p;OmuFEV- zT&$m2q!_wE#&VkLIIoA5L^tQNnZ3vw7wu^8?`_}Iu_>8uPemG%VPAsyYZ4-vS~-4fOXH5#pjhVfch>1WZ?YH=1ZwB#f5SIs z-!^vHLT@CxH692Z+{wQq#|NsvvqXPK*g8848q#CDBY;Zu^ZNDlGj^PX3FQXOjReI=yi)11ZeBeWbzh`4MNz9)%i0Xr*j@^+uea9b zTf_3h=LOzlB@_(RbhYM60+Nt*)*SFtTsl_Nybihm%JpXc~opp84OMt_f`zg>s|8nIb1@1p4F#q z^5o)^kqWo~kDHs=I93gFIu8FmHV&Z#yj&jE2MfdZgi2vbG+zngvVWBw9%S;v9lan(JqH>ufnEKFlNFsr@_dP4 z=H%?v4w>72&A@GRli!uVJELtCAegu7AH4)*DiXerY~?d$mAcOt(9ZtPi!7<@?)+h_ zg8TUSb6iN0iA?@+=nF72_d0A%ug%tcoh4h1(V`v1@DB(4JQ6o!8Nn$*{?}MA^Ro^k zMdeflcG^5tbXh@=k_R0(bFWf{L2KE6Mi2&k@PJpdUk zDdVCOA6Qv9vD`oW^7o#<_{N?GGdmYvKhSmA%ylP|6NeuGw<%KcXLCoU-uTJaz5J8c z?;0KAs-L^!O*?1tH_3AS$a&WvY{~qF<&WKw`LKsPeH^{*xiR!EJ)GlMH(5q_gEDPM zA(N*20>_*+MjF*}nkeVUii#zi-&&;<(sCR$dMxTyz`dctfxgyeH~(1DH;&+aw=hBQ zZbzf&JIsY6$f{gVH$hgdH{3nvS8i{QxLhXU3P&-=>+<#r^ef`+<$BNqI@-rWiy!YvUjKQF;UPUgw+O+r8U^D>s5&w-Rt zFfaF=Lci-VzEiF5avvq~k;bP0ForHv1LYP}OcC}`S&*^Dn+IbxR9CEdv3A7yEYhWc zW+Qcy0&Y9@5)le{b?Bi7cWZTE&o}6&+`(H1&{GzgHT}nZaRMVaQ7y% z5%(UStS@Z*i%}YNqDk~2-8VeM$!Y@I4rRzTM@6c~@bqHKM@QG(qgU#^q>s7^B}L@b ze8fFF5uPL0V;~%?v%j9c5dfDr5iE^d&`q6*Q+q!&j z=+7x$N!f_K-^7dZiLhk~SoWnUAy6 z*!4)?BUcoYxhK$VpoBT|;Smw<|5H?iACc^OE0^_sWW3~sJ13v*|ew#k) zJ)UCavB?`He*~4T|NlAGoBzT(4RauSH;YFG4awf^Cq*Q~lV;#Zn6;RSN`^(Z8=QQ@ ze}@;zpTA+Dz|n4E(05=>9m9$SXb5Ita)|yi#wltUJ*_fgbG^M(B286P zO`&l?%DEovv~kWTu`RJrVw1!TQq7=xV)rbke4>$9w zqAigQa5*olmgOzbc~Ng>#$nr*>8Z)_kxl)5-E%#2`I8D;>%OqW-b>o_>udjj&}rSj zWq62}RlDCZ8X#h+trl_ zdjrbm^mR6;*^SO==|#?|unlaOHs&k@T>lSx`KSF?Ds7z)Pu08s)pb(-;#se zAxg7g0pqo~AgBQLtLulw9!=QLQ+@Kvi^PvTnkWcsV+hv04g(Fvr~O#MQH1sTV4s1xfSmX*BT4fwZ`-mMzfozwoh*- z+u|Nt%Az_^DhWu(x(6>cf?iz?@i{0@KVgKje8>R-*rTmz!Jf5(h?GTZG;@L6&2g18i z4;n@jXc}FnUlQ?gGMXCV6nPvAT)Le2mF5++%iNS&1;lAO9rc|mi-4u-HUj_o12=RDVOq6jK2y`P|AY129 zy1z;O=FA+>Y~*E~uZAnZN5*EOWtsav+qgXJ+(qAh*<0a0kP`^iaPao3natx{P31fB ze9vXCn0fkIAX-KFCrisSKN!B}6)lySzpbswZL7C@IaVR0PhS0OB$_#~mTzzTnKLDaG?Z# zqDNmFJ7%~GUQXOoR~I;WVXPwf{q-I=;O~~kf8r1Q9<4zi%N5!%eflVU`o{W3Hx0f7 z^ubiH;2L6M^!amId->=;2PAI{se!u{3TpBqEV`cW|S zn}~hqaywU5kOfsPeq>4mu#Md-oSGIm%%kJ~jmP+>(YEL2(8JbFrJ258%JWr?4TtCU zVkSgmz+n#)QKzSg=dX*r;{u&{eH5*Owx5HV5~d# zud(s9vF=P+>yAH6Ru{jvWGo>^;Mo;;QC`bX(7p_@1$&zbC}^!k8-QqAnkw~e@OaC& zx;DVIK*6KG`MH^C4j-Xe80MDem$%GL@0i&!KHAsY*3#HeS3_^|r?{zz^DORSmw(oC ztl)_vJrJ~SOxJOuDCbTT^SZBfqPTT-a(rmOTUde>X3bsh0-3k!kB+nRMDzfDJ(|(= zXoTa);GzI!c@QlVM+TzTNkO0_+RKyCL-ZmoAa2IEyR)$Y*W%hpX*!)yp%?) zKzsx0L-(-j+YkZE6EKq4f@KAcaU9>M);(`06d4jFaP3%;U3%Sx_X?14o8862Q^}k_ z3|Ji$c$A|S>1ZBzP#-7I)0Iv~0O@#Gg9jCnrcOML`^<%zM&|^%YA}~xH@Eo6!xxlR z+}5%Gs=3zs{`j{5Qg}yzx)tS3frgG6Hy@M|CYXJ~NaPmSv;(1Q`;6 zfc4iLJ|Tur*l8+9EdXKDG_Dg8$bNlo4aV%Ow7aXLt+}y2Su{~{sLIVx zevZjLo!7zt%if!S$#oTn!sp!Ecj zeZdCX!8XQVjLq)Y7>of2M2zJahXg|)2_!!R$j?hc@+I(i`QA(T67s*~J&e`!SDkbB zzCF`p{IWfGFV=MTsXA44>QvR)s@XckLP^qRY72ePYct!v5WEO`ZO@)G}<@AX=A)9(pbkL~r{ z=Q2Q8vMwt4=_nQa9aI&NX1uaxd>gQRtM7R96ICEs?j5hsDomOIibN{jy33aO8MX`p zKmoTx%ZCIf9PkVN06r8g0w!z1Vtr2>)BfJ}w#Ejpx$>;|vU^Nnj;261+qD_j9Q7Un z`@TD+&N&%y%t^QIusKOSR6G|4oO99LZ&P9ogo1O~v%2ueBMPg&$sj;d?^& z^`Cg-E5?}0)Moz{xc&7##m83M2fp(a{fr||X*fiX4ywB$_x1o^n<+^yZ379NG zhzd(~ROKVk^QhEPddU%9kCqP6p-qDW{cPf3WEMB>XoEeGKUt*XFN$B{J|1;lJZb58 z@=fS?@=fS?a$`Ea+f1BNVh|IF= z-({gqy!Di({?AaFdFv@{aijFjC*5--kubh23neZwR5by$Bai!xM@e zE+46)PrpU2ePozYo+o7Ij%_pA#Fov&b0c#_b1{>*;w$-(H5c)QvM~pRFY9w~kow~} z8umBRKsZ4~pEU>V--^@F&YXjuFsYI-nG!JU%aHR+yPru!VF|}B%P)ex^v~->L2#|1 z{~3$L=Se&snUO(!>Rco!sA_aZ!BRJ2YWf*Bo_I(w5gC8SV&>naa3$U%no@5eO_{fd zrj}wnq4_v!v$?ioXpAqt@qnN4lR(TLSSo>P9R#|b=P1S0DG-N^k8K?t#&^CgP4%^z zIR9TFY1i+EY_aPCU-$UV!M{to-g$b3e%&khJiJ1<$SZJ6qa*|&ehBLzg7u1qeWGc< zj1P|K8!@J@F5XQxc($=(0t;)x_OrE#4vUR#o}3gJ4GU5mHapZoq7807G#(X_Dh&}c-8M5SdLIv-3h zHjpUOkjwj&zy>j<8xf387>Cpop*I>m9^1EP*N!P|%jjD1*t1f>Jx5@zfw^UVQF@Me z#z(yQFj-%C5hI9nWMkvgz^VSEELfNUASAM`-n;UyRZ{91twwbnX0fWNh2u zsdZu;2h9nc=A=htGwBRJ){<8#G;J)kt}ZqYbY&pXwiLl99T7}PL|j9gF=AOKT1n+Q z^|d_2D)*ByvZ_nI0Rn>@1O{;yOAKHvp(Ws-ko^ZsD`V?Km5Ji$x&IIR|@-WVC%x@BajucxyEGn5#sF;)Yfs)E`@yP_H%E0 zTj7p#g)7fpk*<2Y=g=Ly>&I~WxTRxTe>HvPJ@;mtV$~Jen6Op&sJS^IYVd!2_hO%8 z7kQUsGlShZ$P(iFocso2 zD`{V?b=%vr&2;@uiD&yoE!)sQNJD1>2n%|yk0+<%x#mnLW81J{!r4keT4o%U09}SAgl;@2CEgG7N3?*lM%8T#(M>9Li&o!1bAz~{XDWzd!Y^#@7NPuO{jASz(Q^!n30lN>uifGK3$3Xx@_zM+1=HEv>n ziJ}s!mcrzX1ZHv2A6x+>_;8^l22Ws2szC zCz265!p?>>*<3mmr5S#d(Hf!YRGpkQ)71^LO9{jJ)dae!$H$wn2l13$_RwFc6&0bQ z|IheJCnasm^+U(szE>Nrtrj-x%}x zQ~if#CvQ1A(y{aS;La;*lhY#|$LrgFZE@#K^IgCA@ARM7n`(szU2p3RT>&4Xp^rJn>t(HA#?zP|6sA7`3Zr#`!ic)UY$d@c)|~U> zcBylaFq4;EW5OjgX2KZeby0a^!84aYFtD;d8gB%c)&J|=Q6yxqhkG8JI|}`3sgpG5cS^)Go@n;K_!Zl$fbm{_J>zL$ zC~5h0Or?w`8eg!RV1VC@@kHV9VhrBmi8%ECR+qlKKtrG}ua?r6Em$Bu0Dhrpw8C`V zIWTSjmsFcDU27gREwKsC>!hv0oZ&Ciy1zVz^V#Vt*U*0m!SD%c=uOXO3qh&*jQ$PO zw}f{Kzop&{U+lkS4(<2Yv$eO}hlxY_8#m0|@F{M?*c)695Y$#j{fWte9OY@XZG#0ka-qqE>O9u#{4Q!0tR&62r8O z7Q^C8qbSEf)_{lQssZXJs?V=3mIsKd$KDu(;p zd``2R1AAzSvzgvLE2x2X5KDhw7G&TD8Q|8E`MqTSUYE@%mQwKrRNt~mEt`5sWRS}z zR7yUqik3Hg(8X#A9C(b)E2#J&9M=()2Mc1V?&&6E&+dzMPK@zX1t5=36jXCK)k)*# z1>L~`J|D(i$&cU{>c~@2T!#2l<2QZ!n%iF3(jIL{v~Hds-@dZFsbOl@!ocFYFB{r& z%||c0^uEEc(pq?V?yjNk8)ts)vE1ZQ`mUmA@4IhYdF1`qjBVdEQ&pX-Zr^#?=Ife9 zniErZpTA}Kr3d!RjPGuG;~RUn)31yVz52q^{fFAc?-ac?=41Y#YfijIH^I-p^UKYN z`Euukb2`j#U^?hZy?6J_l$TPQ{GE33_X>Fe{>^Ndzs;69MnJoG5`BZo5N8r|c!~=p z6nne`f{=^d5=gZ1Aip;3#!?@-L+$8di>zTL6_X3cDeD~i!AR2$c;R= zVR?0!gd$}s7m&Y%7W5d6RTne<5@Vl6PF(Z{{xi_e^1nPQ)d2m|WR8B8M-%aO8j^Nw z&x%TD)Gtu}9<L(u$zeJ4A3R z)JXF&>IFrEK?8`a0naSD2`|gh8HR*x1V=ZPJpvqlBH(i)5&r+FGEq@GCQVx(2^%(! zV~!M|U}rkn*_qwDX69z+w2ASp&G9B2yQWwKZ$|RGWNZ0{tu&rnFS(8HzQ6X*p8fU9 z*Y^@v(VMHsFWcU-t1~KPgW>K5t^dLqo8#Df@3Fx(UBruyipu79l^XZ~V* z`}nqL&5KtvZcMYdang($oFOCQ&KWIwL=9Hq`3*%4CRo`~1IBm|3A-b_(3^|!Sl+TX z6V$!LRy-Sy<9v6s{KzXH{FmiFM;%*19lMn6L44uA5WJb*P%9`>+Q+gagSl3u6~f-{ zVbWWI=8WgOg$6=cn5DF}r8!@jr5T#Zr}GJaoqpc-9_&NU3;Z5p^nwxMCGcrP+r+w{ z(|GN1UZzg$iiN$ow%Wk0nz-4WP&aO#O>e6#xmQsf;tUtnzMvUhW!)G9w-K}mOKzOlZx zsxp;`M#3T4NBU`hAljL=y+q7gnRVm&I9t#w@w{Sxg7`M`D33y%rcUwg;S$qW5EZEp(Mn19w&pI#yFe|;xi zIIj-}KQQlvQ4tgYv&?x73ePQvb3QH^w`0l%;mPk}8}B8t@m^9J?PWt9@LMJo65Kx#?>$cS*s3SCE>ebfoyGamxcUJ(C_P7J=(GB3s{!g$+p_`$2Q3jvpfd9pe5)jj zzh!B_*G`3i`7F;+`Ou+!?1MNqmeO#|J;DOqM6=9-;Uh9k#1T zl*WZ0e>~*h)PCJ~b$WB{-nj|whG_c3?LswGgGN+ z(%A5O=)3-s#ui$-eJ!;W*HztoL|8~Ax2I@#G*S4%y%&C~eJDb|E{jX*hj=gqg=fTl(%TW=op>AgH2r^>CA%Vw|9vg`bLJoaZuRGQj~~dFFM1+5=xD*B%OvhYwKWtdux4dx*`ozkEUp9xFuMl_j?^oo-293*RlSXzkf~m zIcWhu0uy?kc?ata7Xh!8#!?|Z>Ptw~_@48+!n1B1NVD*B^ofO+;nOCq-@+x^-h=5E zBr1J?mCAZRTAd|7?KPW%+7R~6y%>a85Q|!%t-U!1S`- z>aI4FbQMFRy&paIfV-a1aH_GpvZ5=OOy;^OD!Us~5Iw%=s2U`VRd!+hvMzfav(@vU zD>HmOVvG&u4_oblPd%8#Q@{tA%V;W`8iW!J`lW~*VN#U&Sd+)WsWbpS^y7~cOB-L< z!SMkyKneKV8YuxjDI$dfs)dgTt6zctq+yLIk`%f4d?W-KU_1}4f*2o~0ycI%N3tOU zCqO_SR`3C+up&8hAxcOpnTW|aL}FZyb>dx$=AzU1nRE0V9y_Z&;&-2PY?guy{}gBp z@|;aJ8NRsM0H3bnOPM?jIL|YkV)tcuCe+Z3>L9w_)M!7`Xy9*2br4^PV)szuK((Hi z=*Q6aKk|HR)?9-bT*vdVt?re+MfUQGEERws=Ch;|WhW#9U;5bN*(KT0f81+|<2a!V z2(0x)SWUFB=v9~_$f13V2~lK;%U$AfXXivS=YB_D?|^ja46b2T{|5N@XTG;!lj$p~ zSHh=7KK|9jr{JS4VTo&#lZ9$zL0mE0IQdAU95d;7G#HSoZam`DR)D68|#956RNaN z!Zi2PCmuKQ!Mg^G_gznbM;|jdrJ5l<%?^}Sj`^a-sd8|ZiH-$Bah!e?nOM}XIDDL8 zr=0qFZuMgLbm*lZnkmCM~ns(*)33>T{bdN|T9rRFQ1v(eSO}cZ+Nf z_*Qa?d)1t2RaE=)Z-+0fb6Fnnr5i9jK*t{f|F!aSE+78_L>j$J*L}LK-vYXRHP`jL zpR$UOf+VaUA<{fXLn)U{%-LGub4Tb^@*Q;%ht5L}kdihh!ib{~LlOEFkWmn4vyZ|c zd(2 zEjXeqMuw>S#=9WKx`dC_UFKNn(G{c29wRUXtQ1_48kcq98G4&7o;uCrz4Xt?fY!_7 zNplhp3ce2&)8ns{=!IiAqp-oCZ;f_(;jLLbbvBxxe2v|wG0AWD7=y!07X4^f#U zNSHH3l5h^YFji|dL=vSHAJeR&pBJ?l!3VPqnG|#ZoG5YI?%#yKcI7=HhJ}W0SMP2Z zst!;kTAAE4O&=+aAAa$-TTkuo@&}Il{Q}*-&sXUTCMX{Z(2;7CP1q%S#Vv6lxSCWm zX~)&HuD5PVnHC?v_g)uyx8BNi`Vj|3!cCyypsV*59ugnc_has5qsEE}k*^aR!y8|U zB0(VUPG*f^Atexz<*(I4UG!sNrXp67iAJLxe2t|e4!hf9X{~gwfzqyyhVEQ9%ZJh2 z*4&7PUq};xKP>;bizb15L1Ayj+gk)xM!JM)EPy1h5LHrFtUld+QQFtr)79AE=*H^j zjiP>j<4bG@m9y@rz`+XP<&wPF7iJrP7k-_$h?l~%9`Y6FPd-M-gtnFUQBtn9njf~* zA&B0upA+7@Dlq(Ym|sO3jX3b>l{<>*1v+vK^#D|d$Z~#W3I~Su<$HuGbu`P%?etI< z^CU6m>1#`7!_*h4%RXKB<48>`ULB!3o=P`_3;!IctnNNH#CvD6?ODEOdT-%5@eQDRkUY*)nFOlAh+?`EmeE1~;1`TcC+)D* zqOy-J89DuV68{B(7AHCBGn1RF1yh{gq@p<&k2g02c)?hc_rW63Bt0^mh*#WZN#b0w zq<;EG?nEb+REi|_Oi`|ryJ1Kl;y&eW)X}Rzid|Z}Q-5TBpZh1m=G z4mjY?M&C_b+aD&RQ)`oS_Y3PN{h5cgT#HFj$8rsD-CTGG){|^c)S9WWya!@)KkUDzQg{mH{ zMS@R~@Z+}5o;@RVlwSCN@MWQ=rDrdG5Dr~9Eb#g9G}|NOcK>N&+a>hf6ei~W;MtdW zSi}S6My3`r7SD;yDAa3@uv%+TjTd#yGn8t$sAX_J(Y=@GH}(=CmX-cS{2N3@PEX-k``8%t(4VlIszvm8QGwpg zIzDVFMTNat33_1eJzjWD{us;4`Z3;RXfh&;qMFn5FIgXD(_go+S9Atdpq&ak*}yk> zXuGYe&izD!7)6qo8I1^K(C7eiTye&e3XN#vTSrIo$y{?YkeUl)wi~vcIw7(W$oSv1 zM=r8)%FiVt_Cu`4ms43GS~I@=K=+mRRHwHsoEUie^S|x(*xz41*|l$L{@lsq+6_J8 zcjL(`awF}T>y8cY8OVO+Hwzhu*B%wFKXY^K){8geX~fNEX0~2vLs_nlNq^(}02v{F ztObXA+gl>Qn1o{)VO5tvT*7gp_>`-8kqA*AR=+G7*`2r&3Pf00yImW*z=jUpY-d)w z3CafF6fp$on+yXQYTt67U3^;ghYot zg`T^8*D*}cdeiP(<~q+UpHw5ttLF;;z-lx;>6ZAxWAVq+l`o5f$KQD|%J3R%`;AB!;K5=XUB{LR)-m{au=V~_S)7c`}kLS0Rr{20x#d>bAy zw=~sMIoPrIIpX3+uV`RNm|vR5!clid8`* zWy!0x*5PVMv7wWjpv6s1H4M){Usq>)Yg1!gZPifqkil2j`VPttDsQwYsqaWpLtRzAI`6IT4;In%8pUd@Gb_>P(f47DlJm*(2k=_iR z9$1Uj9^#WR_nuA}W)0;v)Pi_y zfWd;tH0ZY41{J|MegTguQH4%%Vrgc@lZ4983Y#7nZC&7Is_c_jpfT~SlxVc5RismtjE)R%>S(L4O|_<5gMN~vNxzZh+`3qh z9GHNAtpe^vkCTMjt6#WnYU;KZuD<#=Zl9XE{Wq@Ov9cqdhyU!n8vnhT-c(%YaL0XL zI(yTX?%M(X-gFlJedELZ#~(a=_`%}?1N`59@u#*8a8v$A9P)=~0amXM@+hH)U2*g4 zCq)?jWBwRDO5o|tgAPG;KwI1rQNZ{600JiNQi;ZkS|itwsmZNdMu!LcySv(FJ7(=; z7tE8<-+U8$N2*~WF@nVDPtAOvrXYBL) zv}^9YLOuvT-^OQ03y}jLB-yv5SToQ|oGmC$X~k?_Ql@o$#J6l78tm<9pXivd%hjsY z=C%m}`Q5FAT%_&bgBw%=;u`b}4sx5oOAi!VhLF{dtybXmd@q;b^f8>04JYEW-Z7{ zXxxq{YM632bhoi?NA#j?k}<@=Anv%apHW)1IT;TUj*iHwa(YT_u&0f8 z!Y)-*ahp4~Wz%4Hr^~MC_2W+3>c?>%_|v}zpYZbJK%Zzi&&~ilmGf|+Uc|Nq^fNrC zBlWZrTedJOF|%cQ^XSM>XS>Tvuzmk;pibFp!f`r(@FS#i;$Ml*tva1sXG+q^b>CL! zjnnyOKPEyS*U97->Q^qN0sqcEL6z}3wV5tc|4DZJlqe0ADh1^UU`>pzB;c3*0eP9I zvd^!ckeDF{l~Ra5z=}B-GULe(LdBD0QxRx@`sMXu6Z{#O)xE6xmN(dcid`5lf-R4L zhF_WhZQKNxRllsBVo3pfrx1zXj>H?Dza3~mU0OJ}fA5a%6Jy2tPMylf^RIUt7u%WEL;hF#R! zxPL!<@uB(MySB|tPHY)vo_=S?PCGAF4VY)`F^GE9^f&K5KiF@J(|bK8FRuq1u(=}p z@pG4Z0L@pUGog)u}^||S#UOeJ978OV+kjt*Xt+l8?rhqzNY>h<) z5;ihCH0UJC&tuTSc@~3q5sl2^%W8Z$5e!k{!!jj=xxx@TmJ{*JRx}?xL71+ut?+Wg z90)apo?I_JBeJBv3qV4gxf!!D7(r1Y;wdj6TyN?i;A48aDVd#_o*EtQ)_Sz|)@)jl zNEhu2U?nzw*}8=#H?fssiwH_YWH+)W1ko!9ejzMX*DekmI;jnw{K&OiFbu}9cx3tg z$Ks9EvA&i}O)B)TS7iLH&{U>ok2ZKTuk3xti`SmzA@bR)KmYdqfnaT8d#0&FQ5Cw~ zGg_APIXBB<{jFp_nJ4%1=&lnlIY_F1v1rxdwK!@wTDw*sUTdQ|TrJEWoI9}RB3}E% zzG?`Sv1)MLW0&0b+RIs02#LD(Os2Iik*I6UWZLTz^h~0zEt74li^uEQvYEEJ#D%Y6 z{jsuE9wz}4z_n(w?TE2G>-tRR&g!+uekyNcvYsJ3$Vd4~beIH4PznSWi&mr&YemYF zC50VAA20yTm1)GeGA#yL)LPoxQ2sl%Z=1y&lOsd8LESdfK4Tw+==!6OG|#v3JL7D- zOzA&woPFoEZtBe#N8gQGH}w=gR`zo50e(haovY#J<2AWzy6uc<&mMHyv)9;Z3`YB? z&t#2#mlDywSx@e#@Ida-h7GvRlu~TRGFm zQu*%6%C1~0mFudk?9Qjk5w7%uGk;pyjWFHTGY`v0f7G#G(MVq0$9K0Lrp-ncjLlIR z3}Y^tOH5_FlBJ^zMsQ-}R^Rjc#7{@Ew?8`Dbhg z=6U&NPJYgKM6%k0rd%vz0w{pH#@S>e?h zfn(FQJ>ax$(ge$=^tP9}C_n2@uwz;ltDSI}JFjr9-3aT}ZL3FZV_PBi?Jm9V{eW{n zQ<@;JGCDPS1U~IBv|ItMy9 zRn_&NVQFUvBnF(_kQamDl4f!e1u?m8a@(|4ERIl>2>At zkV}6jnf~67tjmV}w)1nC6A+^N?1!~p3fy6w*{t6f7DU{p;x19U)}eXs6S--GF`Fcx z(sg(YK7W!u>eLCgjTyf5>YWv?I0D2Tro38Cg$+1R{ykL{>ya#&>aoA_}LlhWFKYHHRfK*H_v6 z(imnAAhRPQJ>4VP$mH0T?%|%{=H|BMHvPTBy9?*V{~`XEojJdoou6PFaIF@qtx-hD zm&FPL`aPgpgkZ*+bn9ys!B?8^_8tvt+awxv^6)X zwH6)v9hi5sxbciG1qnVq=0#5@NC5&rECq?2`#q^s4eENKHC1G)w`R2Zy=YYpTC3aI zkXjzdIA{*qX@0PX=GW)|e0so(=2mM_vktwTw&lCrd3;>-(AOnT-zB(A= zdeVbbHRWZ|uV$#=H>tu*_xd&PAiD>uljZm89T6kXiLE6gE66T@a4SG~>bZUv6EiLC_SMFdXLcW*dfS)oxaQS|_KgjH{+@g9y+?dz z&-OywfWaUSJ3SuzJ1eB2b=c4|8>ydAhoC$y{?68}y`e&|&4_aj`~b_xqh1@NT;X z%B4#vRivu3Ij1Cw<û#Y`TC|@S& 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 \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-config-dark.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-config-dark.svg deleted file mode 100644 index 709ec0a8b0..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-config-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-config.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-config.svg deleted file mode 100644 index 2db45dbcc6..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-config.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-file-import.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-file-import.svg deleted file mode 100644 index 4b29411c7a..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-file-import.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-first-page.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-first-page.svg deleted file mode 100644 index e61faf63c7..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-first-page.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-group-add.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-group-add.svg deleted file mode 100644 index bf7a194750..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-group-add.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-hide-pass.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-hide-pass.svg deleted file mode 100644 index d3bf3f6dc1..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-hide-pass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-home-dark.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-home-dark.svg deleted file mode 100644 index 782e09ed1c..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-home-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-home.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-home.svg deleted file mode 100644 index ca1b889cf9..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-home.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-key.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-key.svg deleted file mode 100644 index fc4c8c7e94..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-key.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-last-page.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-last-page.svg deleted file mode 100644 index 541bb8dd9f..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-last-page.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-logout-dark.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-logout-dark.svg deleted file mode 100644 index 748dbf59ee..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-logout-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-logout.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-logout.svg deleted file mode 100644 index 52e4da118f..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-logout.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-monitor-add.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-monitor-add.svg deleted file mode 100644 index 7d32e5696e..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-monitor-add.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-next-page.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-next-page.svg deleted file mode 100644 index 2fea9b2785..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-next-page.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-pause.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-pause.svg deleted file mode 100644 index 2fbb899ee9..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-play-link.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-play-link.svg deleted file mode 100644 index 5c5ced87ff..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-play-link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-play.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-play.svg deleted file mode 100644 index 8aa6ccba20..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-prev-page.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-prev-page.svg deleted file mode 100644 index d0a5d1a233..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-prev-page.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-show-pass.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-show-pass.svg deleted file mode 100644 index d4e75eebc3..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-show-pass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-user-add.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-user-add.svg deleted file mode 100644 index b36a25a9d8..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-user-add.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/action-icons/guac-user-group-add.svg b/guacamole/src/main/frontend/src/images/action-icons/guac-user-group-add.svg deleted file mode 100644 index bbefb5a5f2..0000000000 --- a/guacamole/src/main/frontend/src/images/action-icons/guac-user-group-add.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/arrows/down.svg b/guacamole/src/main/frontend/src/images/arrows/down.svg deleted file mode 100644 index 865be43249..0000000000 --- a/guacamole/src/main/frontend/src/images/arrows/down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/arrows/left.svg b/guacamole/src/main/frontend/src/images/arrows/left.svg deleted file mode 100644 index db04c59440..0000000000 --- a/guacamole/src/main/frontend/src/images/arrows/left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/arrows/right.svg b/guacamole/src/main/frontend/src/images/arrows/right.svg deleted file mode 100644 index d0363a5aac..0000000000 --- a/guacamole/src/main/frontend/src/images/arrows/right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/arrows/up.svg b/guacamole/src/main/frontend/src/images/arrows/up.svg deleted file mode 100644 index 28dea1b1eb..0000000000 --- a/guacamole/src/main/frontend/src/images/arrows/up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/checker.svg b/guacamole/src/main/frontend/src/images/checker.svg deleted file mode 100644 index 56edaff0d1..0000000000 --- a/guacamole/src/main/frontend/src/images/checker.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/images/checkmark.svg b/guacamole/src/main/frontend/src/images/checkmark.svg deleted file mode 100644 index 213d2fd9f4..0000000000 --- a/guacamole/src/main/frontend/src/images/checkmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/circle-arrows.svg b/guacamole/src/main/frontend/src/images/circle-arrows.svg deleted file mode 100644 index f2ce7cb0ae..0000000000 --- a/guacamole/src/main/frontend/src/images/circle-arrows.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/cog.svg b/guacamole/src/main/frontend/src/images/cog.svg deleted file mode 100644 index ad26f0af6a..0000000000 --- a/guacamole/src/main/frontend/src/images/cog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/drive.svg b/guacamole/src/main/frontend/src/images/drive.svg deleted file mode 100644 index 0f58afdb73..0000000000 --- a/guacamole/src/main/frontend/src/images/drive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/file.svg b/guacamole/src/main/frontend/src/images/file.svg deleted file mode 100644 index 5955b59036..0000000000 --- a/guacamole/src/main/frontend/src/images/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/folder-closed.svg b/guacamole/src/main/frontend/src/images/folder-closed.svg deleted file mode 100644 index 0a57100c90..0000000000 --- a/guacamole/src/main/frontend/src/images/folder-closed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/folder-open.svg b/guacamole/src/main/frontend/src/images/folder-open.svg deleted file mode 100644 index 12c0e38e88..0000000000 --- a/guacamole/src/main/frontend/src/images/folder-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/folder-up.svg b/guacamole/src/main/frontend/src/images/folder-up.svg deleted file mode 100644 index a7bcf9256e..0000000000 --- a/guacamole/src/main/frontend/src/images/folder-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/group-icons/guac-closed.svg b/guacamole/src/main/frontend/src/images/group-icons/guac-closed.svg deleted file mode 100644 index b7f253ca0e..0000000000 --- a/guacamole/src/main/frontend/src/images/group-icons/guac-closed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/group-icons/guac-open.svg b/guacamole/src/main/frontend/src/images/group-icons/guac-open.svg deleted file mode 100644 index 9af184b057..0000000000 --- a/guacamole/src/main/frontend/src/images/group-icons/guac-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/guac-tricolor.svg b/guacamole/src/main/frontend/src/images/guac-tricolor.svg deleted file mode 100644 index 0242862a66..0000000000 --- a/guacamole/src/main/frontend/src/images/guac-tricolor.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/guacamole/src/main/frontend/src/images/lock.svg b/guacamole/src/main/frontend/src/images/lock.svg deleted file mode 100644 index f71e950d8a..0000000000 --- a/guacamole/src/main/frontend/src/images/lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/logo-144.png b/guacamole/src/main/frontend/src/images/logo-144.png deleted file mode 100644 index e2cb830e93ff0c7bd7dc9a1cd10402456af34c76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9167 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 Wa+i#07o_+GN=8CKyjs*S=zjomwz@h1 diff --git a/guacamole/src/main/frontend/src/images/logo-64.png b/guacamole/src/main/frontend/src/images/logo-64.png deleted file mode 100644 index 99aaf3ea986d290a002850abb12906ce76fc8a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5082 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 diff --git a/guacamole/src/main/frontend/src/images/magnifier.svg b/guacamole/src/main/frontend/src/images/magnifier.svg deleted file mode 100644 index 8027668094..0000000000 --- a/guacamole/src/main/frontend/src/images/magnifier.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/mouse/blank.cur b/guacamole/src/main/frontend/src/images/mouse/blank.cur deleted file mode 100644 index 60b635ababf3ed7814e21376530f6ac7b64fb329..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 ycmZQzU}9ioP*7lE009F=1_m)8tpUUeK5{)-0I$ZZ_jW3 VwnrY*o^>vJb!yu??%Avi)&Ppi9P9u9 diff --git a/guacamole/src/main/frontend/src/images/mouse/dot.gif b/guacamole/src/main/frontend/src/images/mouse/dot.gif deleted file mode 100644 index 9ac8a00b920c77ff759bf7bc2b693191c4c6ead0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmZ?wbhEHbRA5kGXkcUjg8%>jEB<6*ij|0P}PjHUIzs diff --git a/guacamole/src/main/frontend/src/images/plus.svg b/guacamole/src/main/frontend/src/images/plus.svg deleted file mode 100644 index 76234d2616..0000000000 --- a/guacamole/src/main/frontend/src/images/plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/progress.svg b/guacamole/src/main/frontend/src/images/progress.svg deleted file mode 100644 index b401c67a34..0000000000 --- a/guacamole/src/main/frontend/src/images/progress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/protocol-icons/guac-monitor.svg b/guacamole/src/main/frontend/src/images/protocol-icons/guac-monitor.svg deleted file mode 100644 index 54b61e9f41..0000000000 --- a/guacamole/src/main/frontend/src/images/protocol-icons/guac-monitor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/protocol-icons/guac-plug.svg b/guacamole/src/main/frontend/src/images/protocol-icons/guac-plug.svg deleted file mode 100644 index b546628b55..0000000000 --- a/guacamole/src/main/frontend/src/images/protocol-icons/guac-plug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/protocol-icons/guac-text.svg b/guacamole/src/main/frontend/src/images/protocol-icons/guac-text.svg deleted file mode 100644 index 323b5d5a8a..0000000000 --- a/guacamole/src/main/frontend/src/images/protocol-icons/guac-text.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/question.svg b/guacamole/src/main/frontend/src/images/question.svg deleted file mode 100644 index 062ccfa359..0000000000 --- a/guacamole/src/main/frontend/src/images/question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/settings/tablet-keys.svg b/guacamole/src/main/frontend/src/images/settings/tablet-keys.svg deleted file mode 100644 index dbec86e867..0000000000 --- a/guacamole/src/main/frontend/src/images/settings/tablet-keys.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/settings/touchpad.svg b/guacamole/src/main/frontend/src/images/settings/touchpad.svg deleted file mode 100644 index 4ee1da14f3..0000000000 --- a/guacamole/src/main/frontend/src/images/settings/touchpad.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/settings/touchscreen.svg b/guacamole/src/main/frontend/src/images/settings/touchscreen.svg deleted file mode 100644 index f617206178..0000000000 --- a/guacamole/src/main/frontend/src/images/settings/touchscreen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/settings/zoom-in.svg b/guacamole/src/main/frontend/src/images/settings/zoom-in.svg deleted file mode 100644 index 8b7995b712..0000000000 --- a/guacamole/src/main/frontend/src/images/settings/zoom-in.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/settings/zoom-out.svg b/guacamole/src/main/frontend/src/images/settings/zoom-out.svg deleted file mode 100644 index 52e6a31dc2..0000000000 --- a/guacamole/src/main/frontend/src/images/settings/zoom-out.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/share-white.svg b/guacamole/src/main/frontend/src/images/share-white.svg deleted file mode 100644 index 51c3d3f294..0000000000 --- a/guacamole/src/main/frontend/src/images/share-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/share.svg b/guacamole/src/main/frontend/src/images/share.svg deleted file mode 100644 index 349f048985..0000000000 --- a/guacamole/src/main/frontend/src/images/share.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/user-icons/guac-user-group.svg b/guacamole/src/main/frontend/src/images/user-icons/guac-user-group.svg deleted file mode 100644 index 1af99e0dc1..0000000000 --- a/guacamole/src/main/frontend/src/images/user-icons/guac-user-group.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/user-icons/guac-user-white.svg b/guacamole/src/main/frontend/src/images/user-icons/guac-user-white.svg deleted file mode 100644 index e00605fed9..0000000000 --- a/guacamole/src/main/frontend/src/images/user-icons/guac-user-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/user-icons/guac-user.svg b/guacamole/src/main/frontend/src/images/user-icons/guac-user.svg deleted file mode 100644 index aea331f779..0000000000 --- a/guacamole/src/main/frontend/src/images/user-icons/guac-user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/warning-white.svg b/guacamole/src/main/frontend/src/images/warning-white.svg deleted file mode 100644 index 63cc03a10c..0000000000 --- a/guacamole/src/main/frontend/src/images/warning-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/warning.svg b/guacamole/src/main/frontend/src/images/warning.svg deleted file mode 100644 index d7f725c814..0000000000 --- a/guacamole/src/main/frontend/src/images/warning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/x-red.svg b/guacamole/src/main/frontend/src/images/x-red.svg deleted file mode 100644 index 1015164412..0000000000 --- a/guacamole/src/main/frontend/src/images/x-red.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/images/x.svg b/guacamole/src/main/frontend/src/images/x.svg deleted file mode 100644 index ed22eddc8e..0000000000 --- a/guacamole/src/main/frontend/src/images/x.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/guacamole/src/main/frontend/src/index.html b/guacamole/src/main/frontend/src/index.html deleted file mode 100644 index 7a26c121f6..0000000000 --- a/guacamole/src/main/frontend/src/index.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - <% for (var index in htmlWebpackPlugin.files.css) { %> - - <% } %> - - - - - - - - - -

    - -
    -

    -

    - -

    -
    -
    -
    - - -
    - -
    -

    -

    -
    -
    -
    - - - - - - - - -
    - - - - - - -
    -
    - - -
    - -
    - -
    - - - - - - - - - - - - - <% for (var index in htmlWebpackPlugin.files.js) { %> - - <% } %> - - - - - - - diff --git a/guacamole/src/main/frontend/src/layouts/de-de-qwertz.json b/guacamole/src/main/frontend/src/layouts/de-de-qwertz.json deleted file mode 100644 index 052a3a7e0c..0000000000 --- a/guacamole/src/main/frontend/src/layouts/de-de-qwertz.json +++ /dev/null @@ -1,449 +0,0 @@ -{ - - "language" : "de_DE", - "type" : "qwertz", - "width" : 23, - - "keys" : { - - "Esc" : 65307, - "F1" : 65470, - "F2" : 65471, - "F3" : 65472, - "F4" : 65473, - "F5" : 65474, - "F6" : 65475, - "F7" : 65476, - "F8" : 65477, - "F9" : 65478, - "F10" : 65479, - "F11" : 65480, - "F12" : 65481, - - "Space" : " ", - - "Back" : [{ - "title" : "⟵", - "keysym" : 65288 - }], - "Tab" : [{ - "title" : "Tab ↹", - "keysym" : 65289 - }], - "Enter" : [{ - "title" : "↵", - "keysym" : 65293 - }], - "Home" : [{ - "title" : "Pos 1", - "keysym" : 65360 - }], - "PgUp" : [{ - "title" : "Bild ↑", - "keysym" : 65365 - }], - "PgDn" : [{ - "title" : "Bild ↓", - "keysym" : 65366 - }], - "End" : [{ - "title" : "Ende", - "keysym" : 65367 - }], - "Ins" : [{ - "title" : "Einfg", - "keysym" : 65379 - }], - "Del" : [{ - "title" : "Entf", - "keysym" : 65535 - }], - - "Left" : [{ - "title" : "←", - "keysym" : 65361 - }], - "Up" : [{ - "title" : "↑", - "keysym" : 65362 - }], - "Right" : [{ - "title" : "→", - "keysym" : 65363 - }], - "Down" : [{ - "title" : "↓", - "keysym" : 65364 - }], - - "Menu" : [{ - "title" : "Menu", - "keysym" : 65383 - }], - "LShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65505 - }], - "RShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65506 - }], - "LCtrl" : [{ - "title" : "Strg", - "modifier" : "control", - "keysym" : 65507 - }], - "RCtrl" : [{ - "title" : "Strg", - "modifier" : "control", - "keysym" : 65508 - }], - "Caps" : [{ - "title" : "Caps", - "modifier" : "caps", - "keysym" : 65509 - }], - "LAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65513 - }], - "AltGr" : [{ - "title" : "AltGr", - "modifier" : "alt-gr", - "keysym" : 65027 - }], - "Meta" : [{ - "title" : "Meta", - "modifier" : "meta", - "keysym" : 65511 - }], - - "^" : [ - { "title" : "^", "requires" : [ ] }, - { "title" : "°", "requires" : [ "shift" ] } - ], - "1" : [ - { "title" : "1", "requires" : [ ] }, - { "title" : "!", "requires" : [ "shift" ] } - ], - "2" : [ - { "title" : "2", "requires" : [ ] }, - { "title" : "\"", "requires" : [ "shift" ] }, - { "title" : "²", "requires" : [ "alt-gr" ] } - ], - "3" : [ - { "title" : "3", "requires" : [ ] }, - { "title" : "§", "requires" : [ "shift" ] }, - { "title" : "³", "requires" : [ "alt-gr" ] } - ], - "4" : [ - { "title" : "4", "requires" : [ ] }, - { "title" : "$", "requires" : [ "shift" ] } - ], - "5" : [ - { "title" : "5", "requires" : [ ] }, - { "title" : "%", "requires" : [ "shift" ] } - ], - "6" : [ - { "title" : "6", "requires" : [ ] }, - { "title" : "&", "requires" : [ "shift" ] } - ], - "7" : [ - { "title" : "7", "requires" : [ ] }, - { "title" : "/", "requires" : [ "shift" ] }, - { "title" : "{", "requires" : [ "alt-gr" ] } - ], - "8" : [ - { "title" : "8", "requires" : [ ] }, - { "title" : "(", "requires" : [ "shift" ] }, - { "title" : "[", "requires" : [ "alt-gr" ] } - ], - "9" : [ - { "title" : "9", "requires" : [ ] }, - { "title" : ")", "requires" : [ "shift" ] }, - { "title" : "]", "requires" : [ "alt-gr" ] } - ], - "0" : [ - { "title" : "0", "requires" : [ ] }, - { "title" : "=", "requires" : [ "shift" ] }, - { "title" : "}", "requires" : [ "alt-gr" ] } - ], - "ß" : [ - { "title" : "ß", "requires" : [ ] }, - { "title" : "?", "requires" : [ "shift" ] }, - { "title" : "\\", "requires" : [ "alt-gr" ] } - ], - "´" : [ - { "title" : "´", "requires" : [ ] }, - { "title" : "`", "requires" : [ "shift" ] } - ], - "+" : [ - { "title" : "+", "requires" : [ ] }, - { "title" : "*", "requires" : [ "shift" ] }, - { "title" : "~", "requires" : [ "alt-gr" ] } - ], - "#" : [ - { "title" : "#", "requires" : [ ] }, - { "title" : "'", "requires" : [ "shift" ] } - ], - "<" : [ - { "title" : "<", "requires" : [ ] }, - { "title" : ">", "requires" : [ "shift" ] }, - { "title" : "|", "requires" : [ "alt-gr" ] } - ], - "," : [ - { "title" : ",", "requires" : [ ] }, - { "title" : ";", "requires" : [ "shift" ] } - ], - "." : [ - { "title" : ".", "requires" : [ ] }, - { "title" : ":", "requires" : [ "shift" ] } - ], - "-" : [ - { "title" : "-", "requires" : [ ] }, - { "title" : "_", "requires" : [ "shift" ] } - ], - - "q" : [ - { "title" : "q", "requires" : [ ] }, - { "title" : "Q", "requires" : [ "caps" ] }, - { "title" : "Q", "requires" : [ "shift" ] }, - { "title" : "q", "requires" : [ "caps", "shift" ] }, - { "title" : "@", "requires" : [ "alt-gr" ] } - ], - "w" : [ - { "title" : "w", "requires" : [ ] }, - { "title" : "W", "requires" : [ "caps" ] }, - { "title" : "W", "requires" : [ "shift" ] }, - { "title" : "w", "requires" : [ "caps", "shift" ] } - ], - "e" : [ - { "title" : "e", "requires" : [ ] }, - { "title" : "E", "requires" : [ "caps" ] }, - { "title" : "E", "requires" : [ "shift" ] }, - { "title" : "e", "requires" : [ "caps", "shift" ] }, - { "title" : "€", "requires" : [ "alt-gr" ] } - ], - "r" : [ - { "title" : "r", "requires" : [ ] }, - { "title" : "R", "requires" : [ "caps" ] }, - { "title" : "R", "requires" : [ "shift" ] }, - { "title" : "r", "requires" : [ "caps", "shift" ] } - ], - "t" : [ - { "title" : "t", "requires" : [ ] }, - { "title" : "T", "requires" : [ "caps" ] }, - { "title" : "T", "requires" : [ "shift" ] }, - { "title" : "t", "requires" : [ "caps", "shift" ] } - ], - "z" : [ - { "title" : "z", "requires" : [ ] }, - { "title" : "Z", "requires" : [ "caps" ] }, - { "title" : "Z", "requires" : [ "shift" ] }, - { "title" : "z", "requires" : [ "caps", "shift" ] } - ], - "u" : [ - { "title" : "u", "requires" : [ ] }, - { "title" : "U", "requires" : [ "caps" ] }, - { "title" : "U", "requires" : [ "shift" ] }, - { "title" : "u", "requires" : [ "caps", "shift" ] } - ], - "i" : [ - { "title" : "i", "requires" : [ ] }, - { "title" : "I", "requires" : [ "caps" ] }, - { "title" : "I", "requires" : [ "shift" ] }, - { "title" : "i", "requires" : [ "caps", "shift" ] } - ], - "o" : [ - { "title" : "o", "requires" : [ ] }, - { "title" : "O", "requires" : [ "caps" ] }, - { "title" : "O", "requires" : [ "shift" ] }, - { "title" : "o", "requires" : [ "caps", "shift" ] } - ], - "p" : [ - { "title" : "p", "requires" : [ ] }, - { "title" : "P", "requires" : [ "caps" ] }, - { "title" : "P", "requires" : [ "shift" ] }, - { "title" : "p", "requires" : [ "caps", "shift" ] } - ], - "ü" : [ - { "title" : "ü", "requires" : [ ] }, - { "title" : "Ü", "requires" : [ "caps" ] }, - { "title" : "Ü", "requires" : [ "shift" ] }, - { "title" : "ü", "requires" : [ "caps", "shift" ] } - ], - "a" : [ - { "title" : "a", "requires" : [ ] }, - { "title" : "A", "requires" : [ "caps" ] }, - { "title" : "A", "requires" : [ "shift" ] }, - { "title" : "a", "requires" : [ "caps", "shift" ] } - ], - "s" : [ - { "title" : "s", "requires" : [ ] }, - { "title" : "S", "requires" : [ "caps" ] }, - { "title" : "S", "requires" : [ "shift" ] }, - { "title" : "s", "requires" : [ "caps", "shift" ] } - ], - "d" : [ - { "title" : "d", "requires" : [ ] }, - { "title" : "D", "requires" : [ "caps" ] }, - { "title" : "D", "requires" : [ "shift" ] }, - { "title" : "d", "requires" : [ "caps", "shift" ] } - ], - "f" : [ - { "title" : "f", "requires" : [ ] }, - { "title" : "F", "requires" : [ "caps" ] }, - { "title" : "F", "requires" : [ "shift" ] }, - { "title" : "f", "requires" : [ "caps", "shift" ] } - ], - "g" : [ - { "title" : "g", "requires" : [ ] }, - { "title" : "G", "requires" : [ "caps" ] }, - { "title" : "G", "requires" : [ "shift" ] }, - { "title" : "g", "requires" : [ "caps", "shift" ] } - ], - "h" : [ - { "title" : "h", "requires" : [ ] }, - { "title" : "H", "requires" : [ "caps" ] }, - { "title" : "H", "requires" : [ "shift" ] }, - { "title" : "h", "requires" : [ "caps", "shift" ] } - ], - "j" : [ - { "title" : "j", "requires" : [ ] }, - { "title" : "J", "requires" : [ "caps" ] }, - { "title" : "J", "requires" : [ "shift" ] }, - { "title" : "j", "requires" : [ "caps", "shift" ] } - ], - "k" : [ - { "title" : "k", "requires" : [ ] }, - { "title" : "K", "requires" : [ "caps" ] }, - { "title" : "K", "requires" : [ "shift" ] }, - { "title" : "k", "requires" : [ "caps", "shift" ] } - ], - "l" : [ - { "title" : "l", "requires" : [ ] }, - { "title" : "L", "requires" : [ "caps" ] }, - { "title" : "L", "requires" : [ "shift" ] }, - { "title" : "l", "requires" : [ "caps", "shift" ] } - ], - "ö" : [ - { "title" : "ö", "requires" : [ ] }, - { "title" : "Ö", "requires" : [ "caps" ] }, - { "title" : "Ö", "requires" : [ "shift" ] }, - { "title" : "ö", "requires" : [ "caps", "shift" ] } - ], - "ä" : [ - { "title" : "ä", "requires" : [ ] }, - { "title" : "Ä", "requires" : [ "caps" ] }, - { "title" : "Ä", "requires" : [ "shift" ] }, - { "title" : "ä", "requires" : [ "caps", "shift" ] } - ], - "y" : [ - { "title" : "y", "requires" : [ ] }, - { "title" : "Y", "requires" : [ "caps" ] }, - { "title" : "Y", "requires" : [ "shift" ] }, - { "title" : "y", "requires" : [ "caps", "shift" ] } - ], - "x" : [ - { "title" : "x", "requires" : [ ] }, - { "title" : "X", "requires" : [ "caps" ] }, - { "title" : "X", "requires" : [ "shift" ] }, - { "title" : "x", "requires" : [ "caps", "shift" ] } - ], - "c" : [ - { "title" : "c", "requires" : [ ] }, - { "title" : "C", "requires" : [ "caps" ] }, - { "title" : "C", "requires" : [ "shift" ] }, - { "title" : "c", "requires" : [ "caps", "shift" ] } - ], - "v" : [ - { "title" : "v", "requires" : [ ] }, - { "title" : "V", "requires" : [ "caps" ] }, - { "title" : "V", "requires" : [ "shift" ] }, - { "title" : "v", "requires" : [ "caps", "shift" ] } - ], - "b" : [ - { "title" : "b", "requires" : [ ] }, - { "title" : "B", "requires" : [ "caps" ] }, - { "title" : "B", "requires" : [ "shift" ] }, - { "title" : "b", "requires" : [ "caps", "shift" ] } - ], - "n" : [ - { "title" : "n", "requires" : [ ] }, - { "title" : "N", "requires" : [ "caps" ] }, - { "title" : "N", "requires" : [ "shift" ] }, - { "title" : "n", "requires" : [ "caps", "shift" ] } - ], - "m" : [ - { "title" : "m", "requires" : [ ] }, - { "title" : "M", "requires" : [ "caps" ] }, - { "title" : "M", "requires" : [ "shift" ] }, - { "title" : "m", "requires" : [ "caps", "shift" ] }, - { "title" : "µ", "requires" : [ "alt-gr" ] } - ] - - }, - - "layout" : [ - - [ "Esc", 0.7, "F1", "F2", "F3", "F4", - 0.7, "F5", "F6", "F7", "F8", - 0.7, "F9", "F10", "F11", "F12" ], - - [ 0.1 ], - - { - "main" : { - "alpha" : [ - - [ "^", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", "´", "Back" ], - [ "Tab", "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", "+", 1, 0.6 ], - [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä", "#", "Enter" ], - [ "LShift", "<", "y", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], - [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] - - ], - - "movement" : [ - [ "Ins", "Home", "PgUp" ], - [ "Del", "End", "PgDn" ], - [ 1 ], - [ "Up" ], - [ "Left", "Down", "Right" ] - ] - } - } - - ], - - "keyWidths" : { - - "Back" : 2, - "Tab" : 1.5, - "\\" : 1.5, - "Caps" : 1.75, - "Enter" : 1.25, - "LShift" : 2, - "RShift" : 2.1, - - "LCtrl" : 1.6, - "Meta" : 1.6, - "LAlt" : 1.6, - "Space" : 6.1, - "AltGr" : 1.6, - "Menu" : 1.6, - "RCtrl" : 1.6, - - "Ins" : 1.6, - "Home" : 1.6, - "PgUp" : 1.6, - "Del" : 1.6, - "End" : 1.6, - "PgDn" : 1.6 - - } - -} diff --git a/guacamole/src/main/frontend/src/layouts/en-us-qwerty.json b/guacamole/src/main/frontend/src/layouts/en-us-qwerty.json deleted file mode 100644 index fa9a6fe680..0000000000 --- a/guacamole/src/main/frontend/src/layouts/en-us-qwerty.json +++ /dev/null @@ -1,399 +0,0 @@ -{ - - "language" : "en_US", - "type" : "qwerty", - "width" : 22, - - "keys" : { - - "Back" : 65288, - "Tab" : 65289, - "Enter" : 65293, - "Esc" : 65307, - "Home" : 65360, - "PgUp" : 65365, - "PgDn" : 65366, - "End" : 65367, - "Ins" : 65379, - "F1" : 65470, - "F2" : 65471, - "F3" : 65472, - "F4" : 65473, - "F5" : 65474, - "F6" : 65475, - "F7" : 65476, - "F8" : 65477, - "F9" : 65478, - "F10" : 65479, - "F11" : 65480, - "F12" : 65481, - "Del" : 65535, - - "Space" : " ", - - "Left" : [{ - "title" : "←", - "keysym" : 65361 - }], - "Up" : [{ - "title" : "↑", - "keysym" : 65362 - }], - "Right" : [{ - "title" : "→", - "keysym" : 65363 - }], - "Down" : [{ - "title" : "↓", - "keysym" : 65364 - }], - - "Menu" : [{ - "title" : "Menu", - "keysym" : 65383 - }], - "LShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65505 - }], - "RShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65506 - }], - "LCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65507 - }], - "RCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65508 - }], - "Caps" : [{ - "title" : "Caps", - "modifier" : "caps", - "keysym" : 65509 - }], - "LAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65513 - }], - "RAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65514 - }], - "Meta" : [{ - "title" : "Meta", - "modifier" : "meta", - "keysym" : 65511 - }], - - "`" : [ - { "title" : "`", "requires" : [ ] }, - { "title" : "~", "requires" : [ "shift" ] } - ], - "1" : [ - { "title" : "1", "requires" : [ ] }, - { "title" : "!", "requires" : [ "shift" ] } - ], - "2" : [ - { "title" : "2", "requires" : [ ] }, - { "title" : "@", "requires" : [ "shift" ] } - ], - "3" : [ - { "title" : "3", "requires" : [ ] }, - { "title" : "#", "requires" : [ "shift" ] } - ], - "4" : [ - { "title" : "4", "requires" : [ ] }, - { "title" : "$", "requires" : [ "shift" ] } - ], - "5" : [ - { "title" : "5", "requires" : [ ] }, - { "title" : "%", "requires" : [ "shift" ] } - ], - "6" : [ - { "title" : "6", "requires" : [ ] }, - { "title" : "^", "requires" : [ "shift" ] } - ], - "7" : [ - { "title" : "7", "requires" : [ ] }, - { "title" : "&", "requires" : [ "shift" ] } - ], - "8" : [ - { "title" : "8", "requires" : [ ] }, - { "title" : "*", "requires" : [ "shift" ] } - ], - "9" : [ - { "title" : "9", "requires" : [ ] }, - { "title" : "(", "requires" : [ "shift" ] } - ], - "0" : [ - { "title" : "0", "requires" : [ ] }, - { "title" : ")", "requires" : [ "shift" ] } - ], - "-" : [ - { "title" : "-", "requires" : [ ] }, - { "title" : "_", "requires" : [ "shift" ] } - ], - "=" : [ - { "title" : "=", "requires" : [ ] }, - { "title" : "+", "requires" : [ "shift" ] } - ], - "," : [ - { "title" : ",", "requires" : [ ] }, - { "title" : "<", "requires" : [ "shift" ] } - ], - "." : [ - { "title" : ".", "requires" : [ ] }, - { "title" : ">", "requires" : [ "shift" ] } - ], - "/" : [ - { "title" : "/", "requires" : [ ] }, - { "title" : "?", "requires" : [ "shift" ] } - ], - "[" : [ - { "title" : "[", "requires" : [ ] }, - { "title" : "{", "requires" : [ "shift" ] } - ], - "]" : [ - { "title" : "]", "requires" : [ ] }, - { "title" : "}", "requires" : [ "shift" ] } - ], - "\\" : [ - { "title" : "\\", "requires" : [ ] }, - { "title" : "|", "requires" : [ "shift" ] } - ], - ";" : [ - { "title" : ";", "requires" : [ ] }, - { "title" : ":", "requires" : [ "shift" ] } - ], - "'" : [ - { "title" : "'", "requires" : [ ] }, - { "title" : "\"", "requires" : [ "shift" ] } - ], - - "q" : [ - { "title" : "q", "requires" : [ ] }, - { "title" : "Q", "requires" : [ "caps" ] }, - { "title" : "Q", "requires" : [ "shift" ] }, - { "title" : "q", "requires" : [ "caps", "shift" ] } - ], - "w" : [ - { "title" : "w", "requires" : [ ] }, - { "title" : "W", "requires" : [ "caps" ] }, - { "title" : "W", "requires" : [ "shift" ] }, - { "title" : "w", "requires" : [ "caps", "shift" ] } - ], - "e" : [ - { "title" : "e", "requires" : [ ] }, - { "title" : "E", "requires" : [ "caps" ] }, - { "title" : "E", "requires" : [ "shift" ] }, - { "title" : "e", "requires" : [ "caps", "shift" ] } - ], - "r" : [ - { "title" : "r", "requires" : [ ] }, - { "title" : "R", "requires" : [ "caps" ] }, - { "title" : "R", "requires" : [ "shift" ] }, - { "title" : "r", "requires" : [ "caps", "shift" ] } - ], - "t" : [ - { "title" : "t", "requires" : [ ] }, - { "title" : "T", "requires" : [ "caps" ] }, - { "title" : "T", "requires" : [ "shift" ] }, - { "title" : "t", "requires" : [ "caps", "shift" ] } - ], - "y" : [ - { "title" : "y", "requires" : [ ] }, - { "title" : "Y", "requires" : [ "caps" ] }, - { "title" : "Y", "requires" : [ "shift" ] }, - { "title" : "y", "requires" : [ "caps", "shift" ] } - ], - "u" : [ - { "title" : "u", "requires" : [ ] }, - { "title" : "U", "requires" : [ "caps" ] }, - { "title" : "U", "requires" : [ "shift" ] }, - { "title" : "u", "requires" : [ "caps", "shift" ] } - ], - "i" : [ - { "title" : "i", "requires" : [ ] }, - { "title" : "I", "requires" : [ "caps" ] }, - { "title" : "I", "requires" : [ "shift" ] }, - { "title" : "i", "requires" : [ "caps", "shift" ] } - ], - "o" : [ - { "title" : "o", "requires" : [ ] }, - { "title" : "O", "requires" : [ "caps" ] }, - { "title" : "O", "requires" : [ "shift" ] }, - { "title" : "o", "requires" : [ "caps", "shift" ] } - ], - "p" : [ - { "title" : "p", "requires" : [ ] }, - { "title" : "P", "requires" : [ "caps" ] }, - { "title" : "P", "requires" : [ "shift" ] }, - { "title" : "p", "requires" : [ "caps", "shift" ] } - ], - "a" : [ - { "title" : "a", "requires" : [ ] }, - { "title" : "A", "requires" : [ "caps" ] }, - { "title" : "A", "requires" : [ "shift" ] }, - { "title" : "a", "requires" : [ "caps", "shift" ] } - ], - "s" : [ - { "title" : "s", "requires" : [ ] }, - { "title" : "S", "requires" : [ "caps" ] }, - { "title" : "S", "requires" : [ "shift" ] }, - { "title" : "s", "requires" : [ "caps", "shift" ] } - ], - "d" : [ - { "title" : "d", "requires" : [ ] }, - { "title" : "D", "requires" : [ "caps" ] }, - { "title" : "D", "requires" : [ "shift" ] }, - { "title" : "d", "requires" : [ "caps", "shift" ] } - ], - "f" : [ - { "title" : "f", "requires" : [ ] }, - { "title" : "F", "requires" : [ "caps" ] }, - { "title" : "F", "requires" : [ "shift" ] }, - { "title" : "f", "requires" : [ "caps", "shift" ] } - ], - "g" : [ - { "title" : "g", "requires" : [ ] }, - { "title" : "G", "requires" : [ "caps" ] }, - { "title" : "G", "requires" : [ "shift" ] }, - { "title" : "g", "requires" : [ "caps", "shift" ] } - ], - "h" : [ - { "title" : "h", "requires" : [ ] }, - { "title" : "H", "requires" : [ "caps" ] }, - { "title" : "H", "requires" : [ "shift" ] }, - { "title" : "h", "requires" : [ "caps", "shift" ] } - ], - "j" : [ - { "title" : "j", "requires" : [ ] }, - { "title" : "J", "requires" : [ "caps" ] }, - { "title" : "J", "requires" : [ "shift" ] }, - { "title" : "j", "requires" : [ "caps", "shift" ] } - ], - "k" : [ - { "title" : "k", "requires" : [ ] }, - { "title" : "K", "requires" : [ "caps" ] }, - { "title" : "K", "requires" : [ "shift" ] }, - { "title" : "k", "requires" : [ "caps", "shift" ] } - ], - "l" : [ - { "title" : "l", "requires" : [ ] }, - { "title" : "L", "requires" : [ "caps" ] }, - { "title" : "L", "requires" : [ "shift" ] }, - { "title" : "l", "requires" : [ "caps", "shift" ] } - ], - "z" : [ - { "title" : "z", "requires" : [ ] }, - { "title" : "Z", "requires" : [ "caps" ] }, - { "title" : "Z", "requires" : [ "shift" ] }, - { "title" : "z", "requires" : [ "caps", "shift" ] } - ], - "x" : [ - { "title" : "x", "requires" : [ ] }, - { "title" : "X", "requires" : [ "caps" ] }, - { "title" : "X", "requires" : [ "shift" ] }, - { "title" : "x", "requires" : [ "caps", "shift" ] } - ], - "c" : [ - { "title" : "c", "requires" : [ ] }, - { "title" : "C", "requires" : [ "caps" ] }, - { "title" : "C", "requires" : [ "shift" ] }, - { "title" : "c", "requires" : [ "caps", "shift" ] } - ], - "v" : [ - { "title" : "v", "requires" : [ ] }, - { "title" : "V", "requires" : [ "caps" ] }, - { "title" : "V", "requires" : [ "shift" ] }, - { "title" : "v", "requires" : [ "caps", "shift" ] } - ], - "b" : [ - { "title" : "b", "requires" : [ ] }, - { "title" : "B", "requires" : [ "caps" ] }, - { "title" : "B", "requires" : [ "shift" ] }, - { "title" : "b", "requires" : [ "caps", "shift" ] } - ], - "n" : [ - { "title" : "n", "requires" : [ ] }, - { "title" : "N", "requires" : [ "caps" ] }, - { "title" : "N", "requires" : [ "shift" ] }, - { "title" : "n", "requires" : [ "caps", "shift" ] } - ], - "m" : [ - { "title" : "m", "requires" : [ ] }, - { "title" : "M", "requires" : [ "caps" ] }, - { "title" : "M", "requires" : [ "shift" ] }, - { "title" : "m", "requires" : [ "caps", "shift" ] } - ] - - }, - - "layout" : [ - - [ "Esc", 0.7, "F1", "F2", "F3", "F4", - 0.7, "F5", "F6", "F7", "F8", - 0.7, "F9", "F10", "F11", "F12" ], - - [ 0.1 ], - - { - "main" : { - "alpha" : [ - - [ "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "Back" ], - [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\" ], - [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "Enter" ], - [ "LShift", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "RShift" ], - [ "LCtrl", "Meta", "LAlt", "Space", "RAlt", "Menu", "RCtrl" ] - - ], - - "movement" : [ - [ "Ins", "Home", "PgUp" ], - [ "Del", "End", "PgDn" ], - [ 1 ], - [ "Up" ], - [ "Left", "Down", "Right" ] - ] - } - } - - ], - - "keyWidths" : { - - "Back" : 2, - "Tab" : 1.5, - "\\" : 1.5, - "Caps" : 1.85, - "Enter" : 2.25, - "LShift" : 2.1, - "RShift" : 3.1, - - "LCtrl" : 1.6, - "Meta" : 1.6, - "LAlt" : 1.6, - "Space" : 6.1, - "RAlt" : 1.6, - "Menu" : 1.6, - "RCtrl" : 1.6, - - "Ins" : 1.6, - "Home" : 1.6, - "PgUp" : 1.6, - "Del" : 1.6, - "End" : 1.6, - "PgDn" : 1.6 - - } - -} diff --git a/guacamole/src/main/frontend/src/layouts/es-es-qwerty.json b/guacamole/src/main/frontend/src/layouts/es-es-qwerty.json deleted file mode 100644 index e88c6cda47..0000000000 --- a/guacamole/src/main/frontend/src/layouts/es-es-qwerty.json +++ /dev/null @@ -1,455 +0,0 @@ -{ - - "language" : "es_ES", - "type" : "qwerty", - "width" : 23, - - "keys" : { - - "Esc" : 65307, - "F1" : 65470, - "F2" : 65471, - "F3" : 65472, - "F4" : 65473, - "F5" : 65474, - "F6" : 65475, - "F7" : 65476, - "F8" : 65477, - "F9" : 65478, - "F10" : 65479, - "F11" : 65480, - "F12" : 65481, - - "Space" : " ", - - "Back" : [{ - "title" : "⟵", - "keysym" : 65288 - }], - "Tab" : [{ - "title" : "Tab ↹", - "keysym" : 65289 - }], - "Enter" : [{ - "title" : "↵", - "keysym" : 65293 - }], - "Home" : [{ - "title" : "Inicio", - "keysym" : 65360 - }], - "PgUp" : [{ - "title" : "RePág ↑", - "keysym" : 65365 - }], - "PgDn" : [{ - "title" : "AvPág ↓", - "keysym" : 65366 - }], - "End" : [{ - "title" : "Fin", - "keysym" : 65367 - }], - "Ins" : [{ - "title" : "Ins", - "keysym" : 65379 - }], - "Del" : [{ - "title" : "Supr", - "keysym" : 65535 - }], - - "Left" : [{ - "title" : "←", - "keysym" : 65361 - }], - "Up" : [{ - "title" : "↑", - "keysym" : 65362 - }], - "Right" : [{ - "title" : "→", - "keysym" : 65363 - }], - "Down" : [{ - "title" : "↓", - "keysym" : 65364 - }], - - "Menu" : [{ - "title" : "Menu", - "keysym" : 65383 - }], - "LShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65505 - }], - "RShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65506 - }], - "LCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65507 - }], - "RCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65508 - }], - "Caps" : [{ - "title" : "Caps", - "modifier" : "caps", - "keysym" : 65509 - }], - "LAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65513 - }], - "AltGr" : [{ - "title" : "AltGr", - "modifier" : "alt-gr", - "keysym" : 65027 - }], - "Meta" : [{ - "title" : "Meta", - "modifier" : "meta", - "keysym" : 65511 - }], - - "º" : [ - { "title" : "º", "requires" : [ ] }, - { "title" : "ª", "requires" : [ "shift" ] }, - { "title" : "\\", "requires" : [ "alt-gr" ] } - ], - "1" : [ - { "title" : "1", "requires" : [ ] }, - { "title" : "!", "requires" : [ "shift" ] }, - { "title" : "|", "requires" : [ "alt-gr" ] } - ], - "2" : [ - { "title" : "2", "requires" : [ ] }, - { "title" : "\"", "requires" : [ "shift" ] }, - { "title" : "@", "requires" : [ "alt-gr" ] } - ], - "3" : [ - { "title" : "3", "requires" : [ ] }, - { "title" : ".", "requires" : [ "shift" ] }, - { "title" : "#", "requires" : [ "alt-gr" ] } - ], - "4" : [ - { "title" : "4", "requires" : [ ] }, - { "title" : "$", "requires" : [ "shift" ] }, - { "title" : "~", "requires" : [ "alt-gr" ] } - ], - "5" : [ - { "title" : "5", "requires" : [ ] }, - { "title" : "%", "requires" : [ "shift" ] }, - { "title" : "€", "requires" : [ "alt-gr" ] } - ], - "6" : [ - { "title" : "6", "requires" : [ ] }, - { "title" : "&", "requires" : [ "shift" ] }, - { "title" : "¬", "requires" : [ "alt-gr" ] } - ], - "7" : [ - { "title" : "7", "requires" : [ ] }, - { "title" : "/", "requires" : [ "shift" ] } - ], - "8" : [ - { "title" : "8", "requires" : [ ] }, - { "title" : "(", "requires" : [ "shift" ] } - ], - "9" : [ - { "title" : "9", "requires" : [ ] }, - { "title" : ")", "requires" : [ "shift" ] } - ], - "0" : [ - { "title" : "0", "requires" : [ ] }, - { "title" : "=", "requires" : [ "shift" ] } - ], - "'" : [ - { "title" : "'", "requires" : [ ] }, - { "title" : "?", "requires" : [ "shift" ] } - ], - "¡" : [ - { "title" : "¡", "requires" : [ ] }, - { "title" : "¿", "requires" : [ "shift" ] } - ], - - "q" : [ - { "title" : "q", "requires" : [ ] }, - { "title" : "Q", "requires" : [ "caps" ] }, - { "title" : "Q", "requires" : [ "shift" ] }, - { "title" : "q", "requires" : [ "caps", "shift" ] } - ], - "w" : [ - { "title" : "w", "requires" : [ ] }, - { "title" : "W", "requires" : [ "caps" ] }, - { "title" : "W", "requires" : [ "shift" ] }, - { "title" : "w", "requires" : [ "caps", "shift" ] } - ], - "e" : [ - { "title" : "e", "requires" : [ ] }, - { "title" : "E", "requires" : [ "caps" ] }, - { "title" : "E", "requires" : [ "shift" ] }, - { "title" : "e", "requires" : [ "caps", "shift" ] }, - { "title" : "€", "requires" : [ "alt-gr" ] } - ], - "r" : [ - { "title" : "r", "requires" : [ ] }, - { "title" : "R", "requires" : [ "caps" ] }, - { "title" : "R", "requires" : [ "shift" ] }, - { "title" : "r", "requires" : [ "caps", "shift" ] } - ], - "t" : [ - { "title" : "t", "requires" : [ ] }, - { "title" : "T", "requires" : [ "caps" ] }, - { "title" : "T", "requires" : [ "shift" ] }, - { "title" : "t", "requires" : [ "caps", "shift" ] } - ], - "y" : [ - { "title" : "y", "requires" : [ ] }, - { "title" : "Y", "requires" : [ "caps" ] }, - { "title" : "Y", "requires" : [ "shift" ] }, - { "title" : "y", "requires" : [ "caps", "shift" ] } - ], - "u" : [ - { "title" : "u", "requires" : [ ] }, - { "title" : "U", "requires" : [ "caps" ] }, - { "title" : "U", "requires" : [ "shift" ] }, - { "title" : "u", "requires" : [ "caps", "shift" ] } - ], - "i" : [ - { "title" : "i", "requires" : [ ] }, - { "title" : "I", "requires" : [ "caps" ] }, - { "title" : "I", "requires" : [ "shift" ] }, - { "title" : "i", "requires" : [ "caps", "shift" ] } - ], - "o" : [ - { "title" : "o", "requires" : [ ] }, - { "title" : "O", "requires" : [ "caps" ] }, - { "title" : "O", "requires" : [ "shift" ] }, - { "title" : "o", "requires" : [ "caps", "shift" ] } - ], - "p" : [ - { "title" : "p", "requires" : [ ] }, - { "title" : "P", "requires" : [ "caps" ] }, - { "title" : "P", "requires" : [ "shift" ] }, - { "title" : "p", "requires" : [ "caps", "shift" ] } - ], - "`" : [ - { "title" : "`", "requires" : [ ] }, - { "title" : "`", "requires" : [ "caps" ] }, - { "title" : "^", "requires" : [ "shift" ] }, - { "title" : "^", "requires" : [ "caps", "shift" ] }, - { "title" : "[", "requires" : [ "alt-gr" ] } - ], - "+" : [ - { "title" : "+", "requires" : [ ] }, - { "title" : "+", "requires" : [ "caps" ] }, - { "title" : "*", "requires" : [ "shift" ] }, - { "title" : "*", "requires" : [ "caps", "shift" ] }, - { "title" : "]", "requires" : [ "alt-gr" ] } - ], - "a" : [ - { "title" : "a", "requires" : [ ] }, - { "title" : "A", "requires" : [ "caps" ] }, - { "title" : "A", "requires" : [ "shift" ] }, - { "title" : "a", "requires" : [ "caps", "shift" ] } - ], - "s" : [ - { "title" : "s", "requires" : [ ] }, - { "title" : "S", "requires" : [ "caps" ] }, - { "title" : "S", "requires" : [ "shift" ] }, - { "title" : "s", "requires" : [ "caps", "shift" ] } - ], - "d" : [ - { "title" : "d", "requires" : [ ] }, - { "title" : "D", "requires" : [ "caps" ] }, - { "title" : "D", "requires" : [ "shift" ] }, - { "title" : "d", "requires" : [ "caps", "shift" ] } - ], - "f" : [ - { "title" : "f", "requires" : [ ] }, - { "title" : "F", "requires" : [ "caps" ] }, - { "title" : "F", "requires" : [ "shift" ] }, - { "title" : "f", "requires" : [ "caps", "shift" ] } - ], - "g" : [ - { "title" : "g", "requires" : [ ] }, - { "title" : "G", "requires" : [ "caps" ] }, - { "title" : "G", "requires" : [ "shift" ] }, - { "title" : "g", "requires" : [ "caps", "shift" ] } - ], - "h" : [ - { "title" : "h", "requires" : [ ] }, - { "title" : "H", "requires" : [ "caps" ] }, - { "title" : "H", "requires" : [ "shift" ] }, - { "title" : "h", "requires" : [ "caps", "shift" ] } - ], - "j" : [ - { "title" : "j", "requires" : [ ] }, - { "title" : "J", "requires" : [ "caps" ] }, - { "title" : "J", "requires" : [ "shift" ] }, - { "title" : "j", "requires" : [ "caps", "shift" ] } - ], - "k" : [ - { "title" : "k", "requires" : [ ] }, - { "title" : "K", "requires" : [ "caps" ] }, - { "title" : "K", "requires" : [ "shift" ] }, - { "title" : "k", "requires" : [ "caps", "shift" ] } - ], - "l" : [ - { "title" : "l", "requires" : [ ] }, - { "title" : "L", "requires" : [ "caps" ] }, - { "title" : "L", "requires" : [ "shift" ] }, - { "title" : "l", "requires" : [ "caps", "shift" ] } - ], - "ñ" : [ - { "title" : "ñ", "requires" : [ ] }, - { "title" : "Ñ", "requires" : [ "caps" ] }, - { "title" : "Ñ", "requires" : [ "shift" ] }, - { "title" : "ñ", "requires" : [ "caps", "shift" ] } - ], - "´" : [ - { "title" : "´", "requires" : [ ], "keysym" : 65105 }, - { "title" : "´", "requires" : [ "caps" ] }, - { "title" : "¨", "requires" : [ "shift" ] }, - { "title" : "¨", "requires" : [ "caps", "shift" ] }, - { "title" : "{", "requires" : [ "alt-gr" ] } - ], - "ç" : [ - { "title" : "ç", "requires" : [ ] }, - { "title" : "Ç", "requires" : [ "caps" ] }, - { "title" : "Ç", "requires" : [ "shift" ] }, - { "title" : "ç", "requires" : [ "caps", "shift" ] }, - { "title" : "}", "requires" : [ "alt-gr" ] } - ], - "<" : [ - { "title" : "<", "requires" : [ ] }, - { "title" : "<", "requires" : [ "caps" ] }, - { "title" : ">", "requires" : [ "shift" ] }, - { "title" : ">", "requires" : [ "caps", "shift" ] } - ], - - "z" : [ - { "title" : "z", "requires" : [ ] }, - { "title" : "Z", "requires" : [ "caps" ] }, - { "title" : "Z", "requires" : [ "shift" ] }, - { "title" : "z", "requires" : [ "caps", "shift" ] } - ], - "x" : [ - { "title" : "x", "requires" : [ ] }, - { "title" : "X", "requires" : [ "caps" ] }, - { "title" : "X", "requires" : [ "shift" ] }, - { "title" : "x", "requires" : [ "caps", "shift" ] } - ], - "c" : [ - { "title" : "c", "requires" : [ ] }, - { "title" : "C", "requires" : [ "caps" ] }, - { "title" : "C", "requires" : [ "shift" ] }, - { "title" : "c", "requires" : [ "caps", "shift" ] } - ], - "v" : [ - { "title" : "v", "requires" : [ ] }, - { "title" : "V", "requires" : [ "caps" ] }, - { "title" : "V", "requires" : [ "shift" ] }, - { "title" : "v", "requires" : [ "caps", "shift" ] } - ], - "b" : [ - { "title" : "b", "requires" : [ ] }, - { "title" : "B", "requires" : [ "caps" ] }, - { "title" : "B", "requires" : [ "shift" ] }, - { "title" : "b", "requires" : [ "caps", "shift" ] } - ], - "n" : [ - { "title" : "n", "requires" : [ ] }, - { "title" : "N", "requires" : [ "caps" ] }, - { "title" : "N", "requires" : [ "shift" ] }, - { "title" : "n", "requires" : [ "caps", "shift" ] } - ], - "m" : [ - { "title" : "m", "requires" : [ ] }, - { "title" : "M", "requires" : [ "caps" ] }, - { "title" : "M", "requires" : [ "shift" ] }, - { "title" : "m", "requires" : [ "caps", "shift" ] } - ], - "," : [ - { "title" : ",", "requires" : [ ] }, - { "title" : ";", "requires" : [ "shift" ] } - ], - "." : [ - { "title" : ".", "requires" : [ ] }, - { "title" : ":", "requires" : [ "shift" ] } - ], - "-" : [ - { "title" : "-", "requires" : [ ] }, - { "title" : "_", "requires" : [ "shift" ] } - ] - }, - - "layout" : [ - - [ "Esc", 0.8, "F1", "F2", "F3", "F4", - 0.8, "F5", "F6", "F7", "F8", - 0.8, "F9", "F10", "F11", "F12" ], - - [ 0.1 ], - - { - "main" : { - "alpha" : [ - - [ "º", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "'", "¡", "Back" ], - [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "`", "+", 1, 0.6 ], - [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ñ", "´", "ç", "Enter" ], - [ "LShift", "<", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], - [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] - - ], - - "movement" : [ - [ "Ins", "Home", "PgUp" ], - [ "Del", "End", "PgDn" ], - [ 1 ], - [ "Up" ], - [ "Left", "Down", "Right" ] - ] - } - } - - ], - - "keyWidths" : { - - "Back" : 2.3, - "Tab" : 1.75, - "\\" : 1.25, - "Caps" : 1.75, - "Enter" : 1.5, - "LShift" : 2.2, - "RShift" : 2.2, - - "LCtrl" : 1.6, - "Meta" : 1.6, - "LAlt" : 1.6, - "Space" : 6.4, - "AltGr" : 1.6, - "Menu" : 1.6, - "RCtrl" : 1.6, - - "Ins" : 1.6, - "Home" : 1.6, - "PgUp" : 1.6, - "Del" : 1.6, - "End" : 1.6, - "PgDn" : 1.6 - - } - -} diff --git a/guacamole/src/main/frontend/src/layouts/fr-fr-azerty.json b/guacamole/src/main/frontend/src/layouts/fr-fr-azerty.json deleted file mode 100644 index bf3eaf3c90..0000000000 --- a/guacamole/src/main/frontend/src/layouts/fr-fr-azerty.json +++ /dev/null @@ -1,446 +0,0 @@ -{ - - "language" : "fr_FR", - "type" : "azerty", - "width" : 22, - - "keys" : { - - "F1" : 65470, - "F2" : 65471, - "F3" : 65472, - "F4" : 65473, - "F5" : 65474, - "F6" : 65475, - "F7" : 65476, - "F8" : 65477, - "F9" : 65478, - "F10" : 65479, - "F11" : 65480, - "F12" : 65481, - - "Space" : " ", - - "Esc" : [{ - "title" : "Echap", - "keysym" : 65307 - }], - "Back" : [{ - "title" : "⟵", - "keysym" : 65288 - }], - "Tab" : [{ - "title" : "↹", - "keysym" : 65289 - }], - "Enter" : [{ - "title" : "Entrée", - "keysym" : 65293 - }], - "Home" : [{ - "title" : "Origine", - "keysym" : 65360 - }], - "PgUp" : [{ - "title" : "Pg préc.", - "keysym" : 65365 - }], - "PgDn" : [{ - "title" : "Pg suiv.", - "keysym" : 65366 - }], - "End" : [{ - "title" : "Fin", - "keysym" : 65367 - }], - "Ins" : [{ - "title" : "Inser", - "keysym" : 65379 - }], - "Del" : [{ - "title" : "Suppr", - "keysym" : 65535 - }], - - "Left" : [{ - "title" : "←", - "keysym" : 65361 - }], - "Up" : [{ - "title" : "↑", - "keysym" : 65362 - }], - "Right" : [{ - "title" : "→", - "keysym" : 65363 - }], - "Down" : [{ - "title" : "↓", - "keysym" : 65364 - }], - - "Menu" : [{ - "title" : "Menu", - "keysym" : 65383 - }], - "LShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65505 - }], - "RShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65506 - }], - "LCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65507 - }], - "RCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65508 - }], - "Caps" : [{ - "title" : "Caps", - "modifier" : "caps", - "keysym" : 65509 - }], - "LAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65513 - }], - "AltGr" : [{ - "title" : "AltGr", - "modifier" : "alt-gr", - "keysym" : 65027 - }], - "Meta" : [{ - "title" : "Meta", - "modifier" : "meta", - "keysym" : 65511 - }], - - "²" : [ - { "title" : "²", "requires" : [ ] } - ], - "&" : [ - { "title" : "&", "requires" : [ ] }, - { "title" : "1", "requires" : [ "shift" ] } - ], - "é" : [ - { "title" : "é", "requires" : [ ] }, - { "title" : "2", "requires" : [ "shift" ] }, - { "title" : "~", "requires" : [ "alt-gr" ] } - ], - "\"" : [ - { "title" : "\"", "requires" : [ ] }, - { "title" : "3", "requires" : [ "shift" ] }, - { "title" : "#", "requires" : [ "alt-gr" ] } - ], - "'" : [ - { "title" : "'", "requires" : [ ] }, - { "title" : "4", "requires" : [ "shift" ] }, - { "title" : "{", "requires" : [ "alt-gr" ] } - ], - "(" : [ - { "title" : "(", "requires" : [ ] }, - { "title" : "5", "requires" : [ "shift" ] }, - { "title" : "[", "requires" : [ "alt-gr" ] } - ], - "-" : [ - { "title" : "-", "requires" : [ ] }, - { "title" : "6", "requires" : [ "shift" ] }, - { "title" : "|", "requires" : [ "alt-gr" ] } - ], - "è" : [ - { "title" : "è", "requires" : [ ] }, - { "title" : "7", "requires" : [ "shift" ] }, - { "title" : "`", "requires" : [ "alt-gr" ] } - ], - "_" : [ - { "title" : "_", "requires" : [ ] }, - { "title" : "8", "requires" : [ "shift" ] }, - { "title" : "\\", "requires" : [ "alt-gr" ] } - ], - "ç" : [ - { "title" : "ç", "requires" : [ ] }, - { "title" : "9", "requires" : [ "shift" ] }, - { "title" : "^", "requires" : [ "alt-gr" ] } - ], - "à" : [ - { "title" : "à", "requires" : [ ] }, - { "title" : "0", "requires" : [ "shift" ] }, - { "title" : "@", "requires" : [ "alt-gr" ] } - ], - ")" : [ - { "title" : ")", "requires" : [ ] }, - { "title" : "°", "requires" : [ "shift" ] }, - { "title" : "]", "requires" : [ "alt-gr" ] } - ], - "=" : [ - { "title" : "=", "requires" : [ ] }, - { "title" : "+", "requires" : [ "shift" ] }, - { "title" : "}", "requires" : [ "alt-gr" ] } - ], - "^" : [ - { "title" : "^", "requires" : [ ] }, - { "title" : "¨", "requires" : [ "shift" ] } - ], - "$" : [ - { "title" : "$", "requires" : [ ] }, - { "title" : "£", "requires" : [ "shift" ] }, - { "title" : "¤", "requires" : [ "alt-gr" ] } - ], - "ù" : [ - { "title" : "ù", "requires" : [ ] }, - { "title" : "%", "requires" : [ "shift" ] } - ], - "*" : [ - { "title" : "*", "requires" : [ ] }, - { "title" : "µ", "requires" : [ "shift" ] } - ], - "<" : [ - { "title" : "<", "requires" : [ ] }, - { "title" : ">", "requires" : [ "shift" ] } - ], - "," : [ - { "title" : ",", "requires" : [ ] }, - { "title" : "?", "requires" : [ "shift" ] } - ], - ";" : [ - { "title" : ";", "requires" : [ ] }, - { "title" : ".", "requires" : [ "shift" ] } - ], - ":" : [ - { "title" : ":", "requires" : [ ] }, - { "title" : "/", "requires" : [ "shift" ] } - ], - "!" : [ - { "title" : "!", "requires" : [ ] }, - { "title" : "§", "requires" : [ "shift" ] } - ], - - "a" : [ - { "title" : "a", "requires" : [ ] }, - { "title" : "A", "requires" : [ "caps" ] }, - { "title" : "A", "requires" : [ "shift" ] }, - { "title" : "a", "requires" : [ "caps", "shift" ] } - ], - "z" : [ - { "title" : "z", "requires" : [ ] }, - { "title" : "Z", "requires" : [ "caps" ] }, - { "title" : "Z", "requires" : [ "shift" ] }, - { "title" : "z", "requires" : [ "caps", "shift" ] } - ], - "e" : [ - { "title" : "e", "requires" : [ ] }, - { "title" : "E", "requires" : [ "caps" ] }, - { "title" : "E", "requires" : [ "shift" ] }, - { "title" : "e", "requires" : [ "caps", "shift" ] }, - { "title" : "€", "requires" : [ "alt-gr" ] } - ], - "r" : [ - { "title" : "r", "requires" : [ ] }, - { "title" : "R", "requires" : [ "caps" ] }, - { "title" : "R", "requires" : [ "shift" ] }, - { "title" : "r", "requires" : [ "caps", "shift" ] } - ], - "t" : [ - { "title" : "t", "requires" : [ ] }, - { "title" : "T", "requires" : [ "caps" ] }, - { "title" : "T", "requires" : [ "shift" ] }, - { "title" : "t", "requires" : [ "caps", "shift" ] } - ], - "y" : [ - { "title" : "y", "requires" : [ ] }, - { "title" : "Y", "requires" : [ "caps" ] }, - { "title" : "Y", "requires" : [ "shift" ] }, - { "title" : "y", "requires" : [ "caps", "shift" ] } - ], - "u" : [ - { "title" : "u", "requires" : [ ] }, - { "title" : "U", "requires" : [ "caps" ] }, - { "title" : "U", "requires" : [ "shift" ] }, - { "title" : "u", "requires" : [ "caps", "shift" ] } - ], - "i" : [ - { "title" : "i", "requires" : [ ] }, - { "title" : "I", "requires" : [ "caps" ] }, - { "title" : "I", "requires" : [ "shift" ] }, - { "title" : "i", "requires" : [ "caps", "shift" ] } - ], - "o" : [ - { "title" : "o", "requires" : [ ] }, - { "title" : "O", "requires" : [ "caps" ] }, - { "title" : "O", "requires" : [ "shift" ] }, - { "title" : "o", "requires" : [ "caps", "shift" ] } - ], - "p" : [ - { "title" : "p", "requires" : [ ] }, - { "title" : "P", "requires" : [ "caps" ] }, - { "title" : "P", "requires" : [ "shift" ] }, - { "title" : "p", "requires" : [ "caps", "shift" ] } - ], - "q" : [ - { "title" : "q", "requires" : [ ] }, - { "title" : "Q", "requires" : [ "caps" ] }, - { "title" : "Q", "requires" : [ "shift" ] }, - { "title" : "q", "requires" : [ "caps", "shift" ] } - ], - "s" : [ - { "title" : "s", "requires" : [ ] }, - { "title" : "S", "requires" : [ "caps" ] }, - { "title" : "S", "requires" : [ "shift" ] }, - { "title" : "s", "requires" : [ "caps", "shift" ] } - ], - "d" : [ - { "title" : "d", "requires" : [ ] }, - { "title" : "D", "requires" : [ "caps" ] }, - { "title" : "D", "requires" : [ "shift" ] }, - { "title" : "d", "requires" : [ "caps", "shift" ] } - ], - "f" : [ - { "title" : "f", "requires" : [ ] }, - { "title" : "F", "requires" : [ "caps" ] }, - { "title" : "F", "requires" : [ "shift" ] }, - { "title" : "f", "requires" : [ "caps", "shift" ] } - ], - "g" : [ - { "title" : "g", "requires" : [ ] }, - { "title" : "G", "requires" : [ "caps" ] }, - { "title" : "G", "requires" : [ "shift" ] }, - { "title" : "g", "requires" : [ "caps", "shift" ] } - ], - "h" : [ - { "title" : "h", "requires" : [ ] }, - { "title" : "H", "requires" : [ "caps" ] }, - { "title" : "H", "requires" : [ "shift" ] }, - { "title" : "h", "requires" : [ "caps", "shift" ] } - ], - "j" : [ - { "title" : "j", "requires" : [ ] }, - { "title" : "J", "requires" : [ "caps" ] }, - { "title" : "J", "requires" : [ "shift" ] }, - { "title" : "j", "requires" : [ "caps", "shift" ] } - ], - "k" : [ - { "title" : "k", "requires" : [ ] }, - { "title" : "K", "requires" : [ "caps" ] }, - { "title" : "K", "requires" : [ "shift" ] }, - { "title" : "k", "requires" : [ "caps", "shift" ] } - ], - "l" : [ - { "title" : "l", "requires" : [ ] }, - { "title" : "L", "requires" : [ "caps" ] }, - { "title" : "L", "requires" : [ "shift" ] }, - { "title" : "l", "requires" : [ "caps", "shift" ] } - ], - "m" : [ - { "title" : "m", "requires" : [ ] }, - { "title" : "M", "requires" : [ "caps" ] }, - { "title" : "M", "requires" : [ "shift" ] }, - { "title" : "m", "requires" : [ "caps", "shift" ] } - ], - "w" : [ - { "title" : "w", "requires" : [ ] }, - { "title" : "W", "requires" : [ "caps" ] }, - { "title" : "W", "requires" : [ "shift" ] }, - { "title" : "w", "requires" : [ "caps", "shift" ] } - ], - "x" : [ - { "title" : "x", "requires" : [ ] }, - { "title" : "X", "requires" : [ "caps" ] }, - { "title" : "X", "requires" : [ "shift" ] }, - { "title" : "x", "requires" : [ "caps", "shift" ] } - ], - "c" : [ - { "title" : "c", "requires" : [ ] }, - { "title" : "C", "requires" : [ "caps" ] }, - { "title" : "C", "requires" : [ "shift" ] }, - { "title" : "c", "requires" : [ "caps", "shift" ] } - ], - "v" : [ - { "title" : "v", "requires" : [ ] }, - { "title" : "V", "requires" : [ "caps" ] }, - { "title" : "V", "requires" : [ "shift" ] }, - { "title" : "v", "requires" : [ "caps", "shift" ] } - ], - "b" : [ - { "title" : "b", "requires" : [ ] }, - { "title" : "B", "requires" : [ "caps" ] }, - { "title" : "B", "requires" : [ "shift" ] }, - { "title" : "b", "requires" : [ "caps", "shift" ] } - ], - "n" : [ - { "title" : "n", "requires" : [ ] }, - { "title" : "N", "requires" : [ "caps" ] }, - { "title" : "N", "requires" : [ "shift" ] }, - { "title" : "n", "requires" : [ "caps", "shift" ] } - ] - - }, - - "layout" : [ - - [ "Esc", 0.5, "F1", "F2", "F3", "F4", - 0.7, "F5", "F6", "F7", "F8", - 0.7, "F9", "F10", "F11", "F12" ], - - [ 0.1 ], - - { - "main" : { - "alpha" : [ - - [ "²", "&", "é", "\"", "'", "(", "-", "è", "_", "ç", "à", ")", "=", "Back" ], - [ "Tab", "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "$", 1, 0.8 ], - [ "Caps", "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "ù", "*", "Enter" ], - [ "LShift", "<", "w", "x", "c", "v", "b", "n", ",", ";", ":", "!", "RShift" ], - [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] - - ], - - "movement" : [ - [ "Ins", "Home", "PgUp" ], - [ "Del", "End", "PgDn" ], - [ 1 ], - [ "Up" ], - [ "Left", "Down", "Right" ] - ] - } - } - - ], - - "keyWidths" : { - - "Esc" : 1.2, - "Back" : 2, - "Tab" : 1.3, - "Caps" : 1.3, - "Enter" : 1.7, - "LShift" : 2, - "RShift" : 2.1, - - "LCtrl" : 1.6, - "Meta" : 1.6, - "LAlt" : 1.6, - "Space" : 6.1, - "AltGr" : 1.6, - "Menu" : 1.6, - "RCtrl" : 1.6, - - "Ins" : 1.6, - "Home" : 1.6, - "PgUp" : 1.6, - "Del" : 1.6, - "End" : 1.6, - "PgDn" : 1.6 - - } - -} diff --git a/guacamole/src/main/frontend/src/layouts/it-it-qwerty.json b/guacamole/src/main/frontend/src/layouts/it-it-qwerty.json deleted file mode 100644 index 4775e6fd6c..0000000000 --- a/guacamole/src/main/frontend/src/layouts/it-it-qwerty.json +++ /dev/null @@ -1,452 +0,0 @@ -{ - - "language" : "it_IT", - "type" : "qwerty", - "width" : 23, - - "keys" : { - - "Esc" : 65307, - "F1" : 65470, - "F2" : 65471, - "F3" : 65472, - "F4" : 65473, - "F5" : 65474, - "F6" : 65475, - "F7" : 65476, - "F8" : 65477, - "F9" : 65478, - "F10" : 65479, - "F11" : 65480, - "F12" : 65481, - - "Space" : " ", - - "Back" : [{ - "title" : "⟵", - "keysym" : 65288 - }], - "Tab" : [{ - "title" : "Tab ↹", - "keysym" : 65289 - }], - "Enter" : [{ - "title" : "↵", - "keysym" : 65293 - }], - "Home" : [{ - "title" : "Home", - "keysym" : 65360 - }], - "PgUp" : [{ - "title" : "PgUp ↑", - "keysym" : 65365 - }], - "PgDn" : [{ - "title" : "PgDn ↓", - "keysym" : 65366 - }], - "End" : [{ - "title" : "End", - "keysym" : 65367 - }], - "Ins" : [{ - "title" : "Ins", - "keysym" : 65379 - }], - "Del" : [{ - "title" : "Del", - "keysym" : 65535 - }], - - "Left" : [{ - "title" : "←", - "keysym" : 65361 - }], - "Up" : [{ - "title" : "↑", - "keysym" : 65362 - }], - "Right" : [{ - "title" : "→", - "keysym" : 65363 - }], - "Down" : [{ - "title" : "↓", - "keysym" : 65364 - }], - - "Menu" : [{ - "title" : "Menu", - "keysym" : 65383 - }], - "LShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65505 - }], - "RShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65506 - }], - "LCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65507 - }], - "RCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65508 - }], - "Caps" : [{ - "title" : "Caps", - "modifier" : "caps", - "keysym" : 65509 - }], - "LAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65513 - }], - "AltGr" : [{ - "title" : "AltGr", - "modifier" : "alt-gr", - "keysym" : 65027 - }], - "Meta" : [{ - "title" : "Meta", - "modifier" : "meta", - "keysym" : 65511 - }], - - "\\" : [ - { "title" : "\\", "requires" : [ ] }, - { "title" : "|", "requires" : [ "shift" ] } - ], - "1" : [ - { "title" : "1", "requires" : [ ] }, - { "title" : "!", "requires" : [ "shift" ] } - ], - "2" : [ - { "title" : "2", "requires" : [ ] }, - { "title" : "\"", "requires" : [ "shift" ] } - ], - "3" : [ - { "title" : "3", "requires" : [ ] }, - { "title" : "£", "requires" : [ "shift" ] } - ], - "4" : [ - { "title" : "4", "requires" : [ ] }, - { "title" : "$", "requires" : [ "shift" ] } - ], - "5" : [ - { "title" : "5", "requires" : [ ] }, - { "title" : "%", "requires" : [ "shift" ] }, - { "title" : "€", "requires" : [ "alt-gr" ] } - ], - "6" : [ - { "title" : "6", "requires" : [ ] }, - { "title" : "&", "requires" : [ "shift" ] } - ], - "7" : [ - { "title" : "7", "requires" : [ ] }, - { "title" : "/", "requires" : [ "shift" ] } - ], - "8" : [ - { "title" : "8", "requires" : [ ] }, - { "title" : "(", "requires" : [ "shift" ] } - ], - "9" : [ - { "title" : "9", "requires" : [ ] }, - { "title" : ")", "requires" : [ "shift" ] } - ], - "0" : [ - { "title" : "0", "requires" : [ ] }, - { "title" : "=", "requires" : [ "shift" ] } - ], - "'" : [ - { "title" : "'", "requires" : [ ] }, - { "title" : "?", "requires" : [ "shift" ] }, - { "title" : "`", "requires" : [ "alt-gr", "shift" ] } - ], - "ì" : [ - { "title" : "ì", "requires" : [ ] }, - { "title" : "^", "requires" : [ "shift" ] }, - { "title" : "~", "requires" : [ "alt-gr", "shift" ] } - ], - - "q" : [ - { "title" : "q", "requires" : [ ] }, - { "title" : "Q", "requires" : [ "caps" ] }, - { "title" : "Q", "requires" : [ "shift" ] }, - { "title" : "q", "requires" : [ "caps", "shift" ] } - ], - "w" : [ - { "title" : "w", "requires" : [ ] }, - { "title" : "W", "requires" : [ "caps" ] }, - { "title" : "W", "requires" : [ "shift" ] }, - { "title" : "w", "requires" : [ "caps", "shift" ] } - ], - "e" : [ - { "title" : "e", "requires" : [ ] }, - { "title" : "E", "requires" : [ "caps" ] }, - { "title" : "E", "requires" : [ "shift" ] }, - { "title" : "e", "requires" : [ "caps", "shift" ] }, - { "title" : "€", "requires" : [ "alt-gr" ] } - ], - "r" : [ - { "title" : "r", "requires" : [ ] }, - { "title" : "R", "requires" : [ "caps" ] }, - { "title" : "R", "requires" : [ "shift" ] }, - { "title" : "r", "requires" : [ "caps", "shift" ] } - ], - "t" : [ - { "title" : "t", "requires" : [ ] }, - { "title" : "T", "requires" : [ "caps" ] }, - { "title" : "T", "requires" : [ "shift" ] }, - { "title" : "t", "requires" : [ "caps", "shift" ] } - ], - "y" : [ - { "title" : "y", "requires" : [ ] }, - { "title" : "Y", "requires" : [ "caps" ] }, - { "title" : "Y", "requires" : [ "shift" ] }, - { "title" : "y", "requires" : [ "caps", "shift" ] } - ], - "u" : [ - { "title" : "u", "requires" : [ ] }, - { "title" : "U", "requires" : [ "caps" ] }, - { "title" : "U", "requires" : [ "shift" ] }, - { "title" : "u", "requires" : [ "caps", "shift" ] } - ], - "i" : [ - { "title" : "i", "requires" : [ ] }, - { "title" : "I", "requires" : [ "caps" ] }, - { "title" : "I", "requires" : [ "shift" ] }, - { "title" : "i", "requires" : [ "caps", "shift" ] } - ], - "o" : [ - { "title" : "o", "requires" : [ ] }, - { "title" : "O", "requires" : [ "caps" ] }, - { "title" : "O", "requires" : [ "shift" ] }, - { "title" : "o", "requires" : [ "caps", "shift" ] } - ], - "p" : [ - { "title" : "p", "requires" : [ ] }, - { "title" : "P", "requires" : [ "caps" ] }, - { "title" : "P", "requires" : [ "shift" ] }, - { "title" : "p", "requires" : [ "caps", "shift" ] } - ], - "è" : [ - { "title" : "è", "requires" : [ ] }, - { "title" : "è", "requires" : [ "caps" ] }, - { "title" : "é", "requires" : [ "shift" ] }, - { "title" : "é", "requires" : [ "caps", "shift" ] }, - { "title" : "[", "requires" : [ "alt-gr" ] }, - { "title" : "{", "requires" : [ "alt-gr", "shift" ] } - ], - "+" : [ - { "title" : "+", "requires" : [ ] }, - { "title" : "+", "requires" : [ "caps" ] }, - { "title" : "*", "requires" : [ "shift" ] }, - { "title" : "*", "requires" : [ "caps", "shift" ] }, - { "title" : "]", "requires" : [ "alt-gr" ] }, - { "title" : "}", "requires" : [ "alt-gr", "shift" ] } - ], - "a" : [ - { "title" : "a", "requires" : [ ] }, - { "title" : "A", "requires" : [ "caps" ] }, - { "title" : "A", "requires" : [ "shift" ] }, - { "title" : "a", "requires" : [ "caps", "shift" ] } - ], - "s" : [ - { "title" : "s", "requires" : [ ] }, - { "title" : "S", "requires" : [ "caps" ] }, - { "title" : "S", "requires" : [ "shift" ] }, - { "title" : "s", "requires" : [ "caps", "shift" ] } - ], - "d" : [ - { "title" : "d", "requires" : [ ] }, - { "title" : "D", "requires" : [ "caps" ] }, - { "title" : "D", "requires" : [ "shift" ] }, - { "title" : "d", "requires" : [ "caps", "shift" ] } - ], - "f" : [ - { "title" : "f", "requires" : [ ] }, - { "title" : "F", "requires" : [ "caps" ] }, - { "title" : "F", "requires" : [ "shift" ] }, - { "title" : "f", "requires" : [ "caps", "shift" ] } - ], - "g" : [ - { "title" : "g", "requires" : [ ] }, - { "title" : "G", "requires" : [ "caps" ] }, - { "title" : "G", "requires" : [ "shift" ] }, - { "title" : "g", "requires" : [ "caps", "shift" ] } - ], - "h" : [ - { "title" : "h", "requires" : [ ] }, - { "title" : "H", "requires" : [ "caps" ] }, - { "title" : "H", "requires" : [ "shift" ] }, - { "title" : "h", "requires" : [ "caps", "shift" ] } - ], - "j" : [ - { "title" : "j", "requires" : [ ] }, - { "title" : "J", "requires" : [ "caps" ] }, - { "title" : "J", "requires" : [ "shift" ] }, - { "title" : "j", "requires" : [ "caps", "shift" ] } - ], - "k" : [ - { "title" : "k", "requires" : [ ] }, - { "title" : "K", "requires" : [ "caps" ] }, - { "title" : "K", "requires" : [ "shift" ] }, - { "title" : "k", "requires" : [ "caps", "shift" ] } - ], - "l" : [ - { "title" : "l", "requires" : [ ] }, - { "title" : "L", "requires" : [ "caps" ] }, - { "title" : "L", "requires" : [ "shift" ] }, - { "title" : "l", "requires" : [ "caps", "shift" ] } - ], - "ò" : [ - { "title" : "ò", "requires" : [ ] }, - { "title" : "ò", "requires" : [ "caps" ] }, - { "title" : "ç", "requires" : [ "shift" ] }, - { "title" : "ç", "requires" : [ "caps", "shift" ] }, - { "title" : "@", "requires" : [ "alt-gr" ] } - ], - "à" : [ - { "title" : "à", "requires" : [ ] }, - { "title" : "à", "requires" : [ "caps" ] }, - { "title" : "°", "requires" : [ "shift" ] }, - { "title" : "°", "requires" : [ "caps", "shift" ] }, - { "title" : "#", "requires" : [ "alt-gr" ] } - ], - "ù" : [ - { "title" : "ù", "requires" : [ ] }, - { "title" : "ù", "requires" : [ "caps" ] }, - { "title" : "§", "requires" : [ "shift" ] }, - { "title" : "§", "requires" : [ "caps", "shift" ] } - ], - - "<" : [ - { "title" : "<", "requires" : [ ] }, - { "title" : ">", "requires" : [ "shift" ] } - ], - "z" : [ - { "title" : "z", "requires" : [ ] }, - { "title" : "Z", "requires" : [ "caps" ] }, - { "title" : "Z", "requires" : [ "shift" ] }, - { "title" : "z", "requires" : [ "caps", "shift" ] } - ], - "x" : [ - { "title" : "x", "requires" : [ ] }, - { "title" : "X", "requires" : [ "caps" ] }, - { "title" : "X", "requires" : [ "shift" ] }, - { "title" : "x", "requires" : [ "caps", "shift" ] } - ], - "c" : [ - { "title" : "c", "requires" : [ ] }, - { "title" : "C", "requires" : [ "caps" ] }, - { "title" : "C", "requires" : [ "shift" ] }, - { "title" : "c", "requires" : [ "caps", "shift" ] } - ], - "v" : [ - { "title" : "v", "requires" : [ ] }, - { "title" : "V", "requires" : [ "caps" ] }, - { "title" : "V", "requires" : [ "shift" ] }, - { "title" : "v", "requires" : [ "caps", "shift" ] } - ], - "b" : [ - { "title" : "b", "requires" : [ ] }, - { "title" : "B", "requires" : [ "caps" ] }, - { "title" : "B", "requires" : [ "shift" ] }, - { "title" : "b", "requires" : [ "caps", "shift" ] } - ], - "n" : [ - { "title" : "n", "requires" : [ ] }, - { "title" : "N", "requires" : [ "caps" ] }, - { "title" : "N", "requires" : [ "shift" ] }, - { "title" : "n", "requires" : [ "caps", "shift" ] } - ], - "m" : [ - { "title" : "m", "requires" : [ ] }, - { "title" : "M", "requires" : [ "caps" ] }, - { "title" : "M", "requires" : [ "shift" ] }, - { "title" : "m", "requires" : [ "caps", "shift" ] }, - { "title" : "µ", "requires" : [ "alt-gr" ] } - ], - "," : [ - { "title" : ",", "requires" : [ ] }, - { "title" : ";", "requires" : [ "shift" ] } - ], - "." : [ - { "title" : ".", "requires" : [ ] }, - { "title" : ":", "requires" : [ "shift" ] } - ], - "-" : [ - { "title" : "-", "requires" : [ ] }, - { "title" : "_", "requires" : [ "shift" ] } - ] - }, - - "layout" : [ - - [ "Esc", 0.8, "F1", "F2", "F3", "F4", - 0.8, "F5", "F6", "F7", "F8", - 0.8, "F9", "F10", "F11", "F12" ], - - [ 0.1 ], - - { - "main" : { - "alpha" : [ - - [ "\\", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "'", "ì", "Back" ], - [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "è", "+", 1, 0.6 ], - [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ò", "à", "ù", "Enter" ], - [ "LShift", "<", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], - [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] - - ], - - "movement" : [ - [ "Ins", "Home", "PgUp" ], - [ "Del", "End", "PgDn" ], - [ 1 ], - [ "Up" ], - [ "Left", "Down", "Right" ] - ] - } - } - - ], - - "keyWidths" : { - - "Back" : 2, - "Tab" : 1.75, - "\\" : 1.25, - "Caps" : 1.75, - "Enter" : 1.5, - "LShift" : 2.2, - "RShift" : 2.2, - - "LCtrl" : 1.6, - "Meta" : 1.6, - "LAlt" : 1.6, - "Space" : 6.4, - "AltGr" : 1.6, - "Menu" : 1.6, - "RCtrl" : 1.6, - - "Ins" : 1.6, - "Home" : 1.6, - "PgUp" : 1.6, - "Del" : 1.6, - "End" : 1.6, - "PgDn" : 1.6 - - } - -} diff --git a/guacamole/src/main/frontend/src/layouts/nl-nl-qwerty.json b/guacamole/src/main/frontend/src/layouts/nl-nl-qwerty.json deleted file mode 100644 index f1e8744776..0000000000 --- a/guacamole/src/main/frontend/src/layouts/nl-nl-qwerty.json +++ /dev/null @@ -1,464 +0,0 @@ -{ - - "language" : "nl_NL", - "type" : "qwerty", - "width" : 23, - - "keys" : { - - "Esc" : 65307, - "F1" : 65470, - "F2" : 65471, - "F3" : 65472, - "F4" : 65473, - "F5" : 65474, - "F6" : 65475, - "F7" : 65476, - "F8" : 65477, - "F9" : 65478, - "F10" : 65479, - "F11" : 65480, - "F12" : 65481, - - "Space" : " ", - - "Back" : [{ - "title" : "⟵", - "keysym" : 65288 - }], - "Tab" : [{ - "title" : "Tab ↹", - "keysym" : 65289 - }], - "Enter" : [{ - "title" : "↵", - "keysym" : 65293 - }], - "Home" : [{ - "title" : "Home", - "keysym" : 65360 - }], - "PgUp" : [{ - "title" : "PgUp ↑", - "keysym" : 65365 - }], - "PgDn" : [{ - "title" : "PgDn ↓", - "keysym" : 65366 - }], - "End" : [{ - "title" : "End", - "keysym" : 65367 - }], - "Ins" : [{ - "title" : "Ins", - "keysym" : 65379 - }], - "Del" : [{ - "title" : "Del", - "keysym" : 65535 - }], - - "Left" : [{ - "title" : "←", - "keysym" : 65361 - }], - "Up" : [{ - "title" : "↑", - "keysym" : 65362 - }], - "Right" : [{ - "title" : "→", - "keysym" : 65363 - }], - "Down" : [{ - "title" : "↓", - "keysym" : 65364 - }], - - "Menu" : [{ - "title" : "Menu", - "keysym" : 65383 - }], - "LShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65505 - }], - "RShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65506 - }], - "LCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65507 - }], - "RCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65508 - }], - "Caps" : [{ - "title" : "Caps", - "modifier" : "caps", - "keysym" : 65509 - }], - "LAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65513 - }], - "AltGr" : [{ - "title" : "AltGr", - "modifier" : "alt-gr", - "keysym" : 65027 - }], - "Meta" : [{ - "title" : "Meta", - "modifier" : "meta", - "keysym" : 65511 - }], - - "@" : [ - { "title" : "@", "requires" : [ ] }, - { "title" : "§", "requires" : [ "shift" ] }, - { "title" : "¬", "requires" : [ "alt-gr" ] } - ], - "1" : [ - { "title" : "1", "requires" : [ ] }, - { "title" : "!", "requires" : [ "shift" ] }, - { "title" : "¹", "requires" : [ "alt-gr" ] } - ], - "2" : [ - { "title" : "2", "requires" : [ ] }, - { "title" : "\"", "requires" : [ "shift" ] }, - { "title" : "²", "requires" : [ "alt-gr" ] } - ], - "3" : [ - { "title" : "3", "requires" : [ ] }, - { "title" : "#", "requires" : [ "shift" ] }, - { "title" : "³", "requires" : [ "alt-gr" ] } - ], - "4" : [ - { "title" : "4", "requires" : [ ] }, - { "title" : "$", "requires" : [ "shift" ] }, - { "title" : "¼", "requires" : [ "alt-gr" ] } - ], - "5" : [ - { "title" : "5", "requires" : [ ] }, - { "title" : "%", "requires" : [ "shift" ] }, - { "title" : "½", "requires" : [ "alt-gr" ] } - ], - "6" : [ - { "title" : "6", "requires" : [ ] }, - { "title" : "&", "requires" : [ "shift" ] }, - { "title" : "¾", "requires" : [ "alt-gr" ] } - ], - "7" : [ - { "title" : "7", "requires" : [ ] }, - { "title" : "_", "requires" : [ "shift" ] }, - { "title" : "£", "requires" : [ "alt-gr" ] } - ], - "8" : [ - { "title" : "8", "requires" : [ ] }, - { "title" : "(", "requires" : [ "shift" ] }, - { "title" : "{", "requires" : [ "alt-gr" ] } - ], - "9" : [ - { "title" : "9", "requires" : [ ] }, - { "title" : ")", "requires" : [ "shift" ] }, - { "title" : "}", "requires" : [ "alt-gr" ] } - ], - "0" : [ - { "title" : "0", "requires" : [ ] }, - { "title" : "'", "requires" : [ "shift" ] } - ], - "/" : [ - { "title" : "/", "requires" : [ ] }, - { "title" : "?", "requires" : [ "shift" ] }, - { "title" : "\\", "requires" : [ "alt-gr" ] } - ], - "°" : [ - { "title" : "°", "requires" : [ ] }, - { "title" : "~", "requires" : [ "shift" ] }, - { "title" : "¸", "requires" : [ "alt-gr" ] } - ], - - "q" : [ - { "title" : "q", "requires" : [ ] }, - { "title" : "Q", "requires" : [ "caps" ] }, - { "title" : "Q", "requires" : [ "shift" ] }, - { "title" : "q", "requires" : [ "caps", "shift" ] } - ], - "w" : [ - { "title" : "w", "requires" : [ ] }, - { "title" : "W", "requires" : [ "caps" ] }, - { "title" : "W", "requires" : [ "shift" ] }, - { "title" : "w", "requires" : [ "caps", "shift" ] } - ], - "e" : [ - { "title" : "e", "requires" : [ ] }, - { "title" : "E", "requires" : [ "caps" ] }, - { "title" : "E", "requires" : [ "shift" ] }, - { "title" : "e", "requires" : [ "caps", "shift" ] }, - { "title" : "€", "requires" : [ "alt-gr" ] } - ], - "r" : [ - { "title" : "r", "requires" : [ ] }, - { "title" : "R", "requires" : [ "caps" ] }, - { "title" : "R", "requires" : [ "shift" ] }, - { "title" : "r", "requires" : [ "caps", "shift" ] }, - { "title" : "¶", "requires" : [ "alt-gr" ] } - ], - "t" : [ - { "title" : "t", "requires" : [ ] }, - { "title" : "T", "requires" : [ "caps" ] }, - { "title" : "T", "requires" : [ "shift" ] }, - { "title" : "t", "requires" : [ "caps", "shift" ] } - ], - "y" : [ - { "title" : "y", "requires" : [ ] }, - { "title" : "Y", "requires" : [ "caps" ] }, - { "title" : "Y", "requires" : [ "shift" ] }, - { "title" : "y", "requires" : [ "caps", "shift" ] } - ], - "u" : [ - { "title" : "u", "requires" : [ ] }, - { "title" : "U", "requires" : [ "caps" ] }, - { "title" : "U", "requires" : [ "shift" ] }, - { "title" : "u", "requires" : [ "caps", "shift" ] } - ], - "i" : [ - { "title" : "i", "requires" : [ ] }, - { "title" : "I", "requires" : [ "caps" ] }, - { "title" : "I", "requires" : [ "shift" ] }, - { "title" : "i", "requires" : [ "caps", "shift" ] } - ], - "o" : [ - { "title" : "o", "requires" : [ ] }, - { "title" : "O", "requires" : [ "caps" ] }, - { "title" : "O", "requires" : [ "shift" ] }, - { "title" : "o", "requires" : [ "caps", "shift" ] } - ], - "p" : [ - { "title" : "p", "requires" : [ ] }, - { "title" : "P", "requires" : [ "caps" ] }, - { "title" : "P", "requires" : [ "shift" ] }, - { "title" : "p", "requires" : [ "caps", "shift" ] } - ], - "¨" : [ - { "title" : "¨", "requires" : [ ] }, - { "title" : "¨", "requires" : [ "caps" ] }, - { "title" : "^", "requires" : [ "shift" ] }, - { "title" : "^", "requires" : [ "caps", "shift" ] } - ], - "*" : [ - { "title" : "*", "requires" : [ ] }, - { "title" : "*", "requires" : [ "caps" ] }, - { "title" : "|", "requires" : [ "shift" ] }, - { "title" : "|", "requires" : [ "caps", "shift" ] } - ], - "a" : [ - { "title" : "a", "requires" : [ ] }, - { "title" : "A", "requires" : [ "caps" ] }, - { "title" : "A", "requires" : [ "shift" ] }, - { "title" : "a", "requires" : [ "caps", "shift" ] } - ], - "s" : [ - { "title" : "s", "requires" : [ ] }, - { "title" : "S", "requires" : [ "caps" ] }, - { "title" : "S", "requires" : [ "shift" ] }, - { "title" : "s", "requires" : [ "caps", "shift" ] }, - { "title" : "ß", "requires" : [ "alt-gr" ] } - ], - "d" : [ - { "title" : "d", "requires" : [ ] }, - { "title" : "D", "requires" : [ "caps" ] }, - { "title" : "D", "requires" : [ "shift" ] }, - { "title" : "d", "requires" : [ "caps", "shift" ] } - ], - "f" : [ - { "title" : "f", "requires" : [ ] }, - { "title" : "F", "requires" : [ "caps" ] }, - { "title" : "F", "requires" : [ "shift" ] }, - { "title" : "f", "requires" : [ "caps", "shift" ] } - ], - "g" : [ - { "title" : "g", "requires" : [ ] }, - { "title" : "G", "requires" : [ "caps" ] }, - { "title" : "G", "requires" : [ "shift" ] }, - { "title" : "g", "requires" : [ "caps", "shift" ] } - ], - "h" : [ - { "title" : "h", "requires" : [ ] }, - { "title" : "H", "requires" : [ "caps" ] }, - { "title" : "H", "requires" : [ "shift" ] }, - { "title" : "h", "requires" : [ "caps", "shift" ] } - ], - "j" : [ - { "title" : "j", "requires" : [ ] }, - { "title" : "J", "requires" : [ "caps" ] }, - { "title" : "J", "requires" : [ "shift" ] }, - { "title" : "j", "requires" : [ "caps", "shift" ] } - ], - "k" : [ - { "title" : "k", "requires" : [ ] }, - { "title" : "K", "requires" : [ "caps" ] }, - { "title" : "K", "requires" : [ "shift" ] }, - { "title" : "k", "requires" : [ "caps", "shift" ] } - ], - "l" : [ - { "title" : "l", "requires" : [ ] }, - { "title" : "L", "requires" : [ "caps" ] }, - { "title" : "L", "requires" : [ "shift" ] }, - { "title" : "l", "requires" : [ "caps", "shift" ] } - ], - "+" : [ - { "title" : "+", "requires" : [ ] }, - { "title" : "+", "requires" : [ "caps" ] }, - { "title" : "±", "requires" : [ "shift" ] }, - { "title" : "±", "requires" : [ "caps", "shift" ] } - ], - "´" : [ - { "title" : "´", "requires" : [ ] }, - { "title" : "´", "requires" : [ "caps" ] }, - { "title" : "`", "requires" : [ "shift" ] }, - { "title" : "`", "requires" : [ "caps", "shift" ] } - ], - "<" : [ - { "title" : "<", "requires" : [ ] }, - { "title" : "<", "requires" : [ "caps" ] }, - { "title" : ">", "requires" : [ "shift" ] }, - { "title" : ">", "requires" : [ "caps", "shift" ] } - ], - - "]" : [ - { "title" : "]", "requires" : [ ] }, - { "title" : "]", "requires" : [ "caps" ] }, - { "title" : "[", "requires" : [ "shift" ] }, - { "title" : "[", "requires" : [ "caps", "shift" ] }, - { "title" : "¦", "requires" : [ "alt-gr" ] } - ], - "z" : [ - { "title" : "z", "requires" : [ ] }, - { "title" : "Z", "requires" : [ "caps" ] }, - { "title" : "Z", "requires" : [ "shift" ] }, - { "title" : "z", "requires" : [ "caps", "shift" ] }, - { "title" : "«", "requires" : [ "alt-gr" ] } - ], - "x" : [ - { "title" : "x", "requires" : [ ] }, - { "title" : "X", "requires" : [ "caps" ] }, - { "title" : "X", "requires" : [ "shift" ] }, - { "title" : "x", "requires" : [ "caps", "shift" ] }, - { "title" : "»", "requires" : [ "alt-gr" ] } - ], - "c" : [ - { "title" : "c", "requires" : [ ] }, - { "title" : "C", "requires" : [ "caps" ] }, - { "title" : "C", "requires" : [ "shift" ] }, - { "title" : "c", "requires" : [ "caps", "shift" ] }, - { "title" : "¢", "requires" : [ "alt-gr" ] } - ], - "v" : [ - { "title" : "v", "requires" : [ ] }, - { "title" : "V", "requires" : [ "caps" ] }, - { "title" : "V", "requires" : [ "shift" ] }, - { "title" : "v", "requires" : [ "caps", "shift" ] } - ], - "b" : [ - { "title" : "b", "requires" : [ ] }, - { "title" : "B", "requires" : [ "caps" ] }, - { "title" : "B", "requires" : [ "shift" ] }, - { "title" : "b", "requires" : [ "caps", "shift" ] } - ], - "n" : [ - { "title" : "n", "requires" : [ ] }, - { "title" : "N", "requires" : [ "caps" ] }, - { "title" : "N", "requires" : [ "shift" ] }, - { "title" : "n", "requires" : [ "caps", "shift" ] } - ], - "m" : [ - { "title" : "m", "requires" : [ ] }, - { "title" : "M", "requires" : [ "caps" ] }, - { "title" : "M", "requires" : [ "shift" ] }, - { "title" : "m", "requires" : [ "caps", "shift" ] }, - { "title" : "µ", "requires" : [ "alt-gr" ] } - ], - "," : [ - { "title" : ",", "requires" : [ ] }, - { "title" : ";", "requires" : [ "shift" ] } - ], - "." : [ - { "title" : ".", "requires" : [ ] }, - { "title" : ":", "requires" : [ "shift" ] }, - { "title" : "·", "requires" : [ "alt-gr" ] } - ], - "-" : [ - { "title" : "-", "requires" : [ ] }, - { "title" : "=", "requires" : [ "shift" ] } - ] - }, - - "layout" : [ - - [ "Esc", 0.8, "F1", "F2", "F3", "F4", - 0.8, "F5", "F6", "F7", "F8", - 0.8, "F9", "F10", "F11", "F12" ], - - [ 0.1 ], - - { - "main" : { - "alpha" : [ - - [ "@", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "/", "°", "Back" ], - [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "¨", "*", 1, 0.6 ], - [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "+", "´", "<", "Enter" ], - [ "LShift", "]", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], - [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] - - ], - - "movement" : [ - [ "Ins", "Home", "PgUp" ], - [ "Del", "End", "PgDn" ], - [ 1 ], - [ "Up" ], - [ "Left", "Down", "Right" ] - ] - } - } - - ], - - "keyWidths" : { - - "Back" : 2.3, - "Tab" : 1.75, - "\\" : 1.25, - "Caps" : 1.75, - "Enter" : 1.5, - "LShift" : 2.2, - "RShift" : 2.2, - - "LCtrl" : 1.6, - "Meta" : 1.6, - "LAlt" : 1.6, - "Space" : 6.4, - "AltGr" : 1.6, - "Menu" : 1.6, - "RCtrl" : 1.6, - - "Ins" : 1.6, - "Home" : 1.6, - "PgUp" : 1.6, - "Del" : 1.6, - "End" : 1.6, - "PgDn" : 1.6 - - } - -} diff --git a/guacamole/src/main/frontend/src/layouts/ru-ru-qwerty.json b/guacamole/src/main/frontend/src/layouts/ru-ru-qwerty.json deleted file mode 100644 index 63fa1cfa4c..0000000000 --- a/guacamole/src/main/frontend/src/layouts/ru-ru-qwerty.json +++ /dev/null @@ -1,546 +0,0 @@ -{ - - "language" : "ru_RU", - "type" : "qwerty", - "width" : 22, - - "keys" : { - - "Back" : 65288, - "Tab" : 65289, - "Enter" : 65293, - "Esc" : 65307, - "Home" : 65360, - "PgUp" : 65365, - "PgDn" : 65366, - "End" : 65367, - "Ins" : 65379, - "F1" : 65470, - "F2" : 65471, - "F3" : 65472, - "F4" : 65473, - "F5" : 65474, - "F6" : 65475, - "F7" : 65476, - "F8" : 65477, - "F9" : 65478, - "F10" : 65479, - "F11" : 65480, - "F12" : 65481, - "Del" : 65535, - - "Space" : " ", - - "Left" : [{ - "title" : "←", - "keysym" : 65361 - }], - "Up" : [{ - "title" : "↑", - "keysym" : 65362 - }], - "Right" : [{ - "title" : "→", - "keysym" : 65363 - }], - "Down" : [{ - "title" : "↓", - "keysym" : 65364 - }], - - "Menu" : [{ - "title" : "Menu", - "keysym" : 65383 - }], - "LShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65505 - }], - "RShift" : [{ - "title" : "Shift", - "modifier" : "shift", - "keysym" : 65506 - }], - "LCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65507 - }], - "RCtrl" : [{ - "title" : "Ctrl", - "modifier" : "control", - "keysym" : 65508 - }], - "Caps" : [{ - "title" : "Caps", - "modifier" : "caps", - "keysym" : 65509 - }], - "LAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65513 - }], - "RAlt" : [{ - "title" : "Alt", - "modifier" : "alt", - "keysym" : 65514 - }], - "Meta" : [{ - "title" : "Meta", - "modifier" : "meta", - "keysym" : 65511 - }], - "Latin" : [{ - "title" : "Latin", - "modifier" : "lat" - }], - - "`" : [ - { "title" : "`", "requires" : [ ] }, - { "title" : "~", "requires" : [ "shift" ] } - ], - "1" : [ - { "title" : "1", "requires" : [ ] }, - { "title" : "!", "requires" : [ "shift" ] } - ], - "2" : [ - { "title" : "2", "requires" : [ ] }, - { "title" : "@", "requires" : [ "shift" ] } - ], - "3" : [ - { "title" : "3", "requires" : [ ] }, - { "title" : "#", "requires" : [ "shift" ] } - ], - "4" : [ - { "title" : "4", "requires" : [ ] }, - { "title" : "$", "requires" : [ "shift" ] } - ], - "5" : [ - { "title" : "5", "requires" : [ ] }, - { "title" : "%", "requires" : [ "shift" ] } - ], - "6" : [ - { "title" : "6", "requires" : [ ] }, - { "title" : "^", "requires" : [ "shift" ] } - ], - "7" : [ - { "title" : "7", "requires" : [ ] }, - { "title" : "&", "requires" : [ "shift" ] } - ], - "8" : [ - { "title" : "8", "requires" : [ ] }, - { "title" : "*", "requires" : [ "shift" ] } - ], - "9" : [ - { "title" : "9", "requires" : [ ] }, - { "title" : "(", "requires" : [ "shift" ] } - ], - "0" : [ - { "title" : "0", "requires" : [ ] }, - { "title" : ")", "requires" : [ "shift" ] } - ], - "-" : [ - { "title" : "-", "requires" : [ ] }, - { "title" : "_", "requires" : [ "shift" ] } - ], - "=" : [ - { "title" : "=", "requires" : [ ] }, - { "title" : "+", "requires" : [ "shift" ] } - ], - "б" : [ - { "title" : "б", "requires" : [ ] }, - { "title" : "Б", "requires" : [ "caps" ] }, - { "title" : "Б", "requires" : [ "shift" ] }, - { "title" : "б", "requires" : [ "caps", "shift" ] }, - { "title" : ",", "requires" : [ "lat" ] }, - { "title" : "<", "requires" : [ "lat", "shift" ] } - ], - "ю" : [ - { "title" : "ю", "requires" : [ ] }, - { "title" : "Ю", "requires" : [ "caps" ] }, - { "title" : "Ю", "requires" : [ "shift" ] }, - { "title" : "ю", "requires" : [ "caps", "shift" ] }, - { "title" : ".", "requires" : [ "lat" ] }, - { "title" : ">", "requires" : [ "lat", "shift" ] } - ], - "/" : [ - { "title" : "/", "requires" : [ ] }, - { "title" : "?", "requires" : [ "shift" ] } - ], - "х" : [ - { "title" : "х", "requires" : [ ] }, - { "title" : "Х", "requires" : [ "caps" ] }, - { "title" : "Х", "requires" : [ "shift" ] }, - { "title" : "х", "requires" : [ "caps", "shift" ] }, - { "title" : "[", "requires" : [ "lat" ] }, - { "title" : "{", "requires" : [ "lat", "shift" ] } - ], - "ъ" : [ - { "title" : "ъ", "requires" : [ ] }, - { "title" : "Ъ", "requires" : [ "caps" ] }, - { "title" : "Ъ", "requires" : [ "shift" ] }, - { "title" : "ъ", "requires" : [ "caps", "shift" ] }, - { "title" : "]", "requires" : [ "lat" ] }, - { "title" : "}", "requires" : [ "lat", "shift" ] } - ], - "\\" : [ - { "title" : "\\", "requires" : [ ] }, - { "title" : "|", "requires" : [ "shift" ] } - ], - "ж" : [ - { "title" : "ж", "requires" : [ ] }, - { "title" : "Ж", "requires" : [ "caps" ] }, - { "title" : "Ж", "requires" : [ "shift" ] }, - { "title" : "ж", "requires" : [ "caps", "shift" ] }, - { "title" : ";", "requires" : [ "lat" ] }, - { "title" : ":", "requires" : [ "lat", "shift" ] } - ], - "э" : [ - { "title" : "э", "requires" : [ ] }, - { "title" : "Э", "requires" : [ "caps" ] }, - { "title" : "Э", "requires" : [ "shift" ] }, - { "title" : "э", "requires" : [ "caps", "shift" ] }, - { "title" : "'", "requires" : [ "lat" ] }, - { "title" : "\"", "requires" : [ "lat", "shift" ] } - ], - - "й" : [ - { "title" : "й", "requires" : [ ] }, - { "title" : "Й", "requires" : [ "caps" ] }, - { "title" : "Й", "requires" : [ "shift" ] }, - { "title" : "й", "requires" : [ "caps", "shift" ] }, - { "title" : "q", "requires" : [ "lat" ] }, - { "title" : "Q", "requires" : [ "lat", "caps" ] }, - { "title" : "Q", "requires" : [ "lat", "shift" ] }, - { "title" : "q", "requires" : [ "lat", "caps", "shift" ] } - ], - "ц" : [ - { "title" : "ц", "requires" : [ ] }, - { "title" : "Ц", "requires" : [ "caps" ] }, - { "title" : "Ц", "requires" : [ "shift" ] }, - { "title" : "ц", "requires" : [ "caps", "shift" ] }, - { "title" : "w", "requires" : [ "lat" ] }, - { "title" : "W", "requires" : [ "lat", "caps" ] }, - { "title" : "W", "requires" : [ "lat", "shift" ] }, - { "title" : "w", "requires" : [ "lat", "caps", "shift" ] } - ], - "у" : [ - { "title" : "у", "requires" : [ ] }, - { "title" : "У", "requires" : [ "caps" ] }, - { "title" : "У", "requires" : [ "shift" ] }, - { "title" : "у", "requires" : [ "caps", "shift" ] }, - { "title" : "e", "requires" : [ "lat" ] }, - { "title" : "E", "requires" : [ "lat", "caps" ] }, - { "title" : "E", "requires" : [ "lat", "shift" ] }, - { "title" : "e", "requires" : [ "lat", "caps", "shift" ] } - ], - "к" : [ - { "title" : "к", "requires" : [ ] }, - { "title" : "К", "requires" : [ "caps" ] }, - { "title" : "К", "requires" : [ "shift" ] }, - { "title" : "к", "requires" : [ "caps", "shift" ] }, - { "title" : "r", "requires" : [ "lat" ] }, - { "title" : "R", "requires" : [ "lat", "caps" ] }, - { "title" : "R", "requires" : [ "lat", "shift" ] }, - { "title" : "r", "requires" : [ "lat", "caps", "shift" ] } - ], - "е" : [ - { "title" : "е", "requires" : [ ] }, - { "title" : "Е", "requires" : [ "caps" ] }, - { "title" : "Е", "requires" : [ "shift" ] }, - { "title" : "е", "requires" : [ "caps", "shift" ] }, - { "title" : "t", "requires" : [ "lat" ] }, - { "title" : "T", "requires" : [ "lat", "caps" ] }, - { "title" : "T", "requires" : [ "lat", "shift" ] }, - { "title" : "t", "requires" : [ "lat", "caps", "shift" ] } - ], - "н" : [ - { "title" : "н", "requires" : [ ] }, - { "title" : "Н", "requires" : [ "caps" ] }, - { "title" : "Н", "requires" : [ "shift" ] }, - { "title" : "н", "requires" : [ "caps", "shift" ] }, - { "title" : "y", "requires" : [ "lat" ] }, - { "title" : "Y", "requires" : [ "lat", "caps" ] }, - { "title" : "Y", "requires" : [ "lat", "shift" ] }, - { "title" : "y", "requires" : [ "lat", "caps", "shift" ] } - ], - "г" : [ - { "title" : "г", "requires" : [ ] }, - { "title" : "Г", "requires" : [ "caps" ] }, - { "title" : "Г", "requires" : [ "shift" ] }, - { "title" : "г", "requires" : [ "caps", "shift" ] }, - { "title" : "u", "requires" : [ "lat" ] }, - { "title" : "U", "requires" : [ "lat", "caps" ] }, - { "title" : "U", "requires" : [ "lat", "shift" ] }, - { "title" : "u", "requires" : [ "lat", "caps", "shift" ] } - ], - "ш" : [ - { "title" : "ш", "requires" : [ ] }, - { "title" : "Ш", "requires" : [ "caps" ] }, - { "title" : "Ш", "requires" : [ "shift" ] }, - { "title" : "ш", "requires" : [ "caps", "shift" ] }, - { "title" : "i", "requires" : [ "lat" ] }, - { "title" : "I", "requires" : [ "lat", "caps" ] }, - { "title" : "I", "requires" : [ "lat", "shift" ] }, - { "title" : "i", "requires" : [ "lat", "caps", "shift" ] } - ], - "щ" : [ - { "title" : "щ", "requires" : [ ] }, - { "title" : "Щ", "requires" : [ "caps" ] }, - { "title" : "Щ", "requires" : [ "shift" ] }, - { "title" : "щ", "requires" : [ "caps", "shift" ] }, - { "title" : "o", "requires" : [ "lat" ] }, - { "title" : "O", "requires" : [ "lat", "caps" ] }, - { "title" : "O", "requires" : [ "lat", "shift" ] }, - { "title" : "o", "requires" : [ "lat", "caps", "shift" ] } - ], - "з" : [ - { "title" : "з", "requires" : [ ] }, - { "title" : "З", "requires" : [ "caps" ] }, - { "title" : "З", "requires" : [ "shift" ] }, - { "title" : "з", "requires" : [ "caps", "shift" ] }, - { "title" : "p", "requires" : [ "lat" ] }, - { "title" : "P", "requires" : [ "lat", "caps" ] }, - { "title" : "P", "requires" : [ "lat", "shift" ] }, - { "title" : "p", "requires" : [ "lat", "caps", "shift" ] } - ], - "ф" : [ - { "title" : "ф", "requires" : [ ] }, - { "title" : "Ф", "requires" : [ "caps" ] }, - { "title" : "Ф", "requires" : [ "shift" ] }, - { "title" : "ф", "requires" : [ "caps", "shift" ] }, - { "title" : "a", "requires" : [ "lat" ] }, - { "title" : "A", "requires" : [ "lat", "caps" ] }, - { "title" : "A", "requires" : [ "lat", "shift" ] }, - { "title" : "a", "requires" : [ "lat", "caps", "shift" ] } - ], - "ы" : [ - { "title" : "ы", "requires" : [ ] }, - { "title" : "Ы", "requires" : [ "caps" ] }, - { "title" : "Ы", "requires" : [ "shift" ] }, - { "title" : "ы", "requires" : [ "caps", "shift" ] }, - { "title" : "s", "requires" : [ "lat" ] }, - { "title" : "S", "requires" : [ "lat", "caps" ] }, - { "title" : "S", "requires" : [ "lat", "shift" ] }, - { "title" : "s", "requires" : [ "lat", "caps", "shift" ] } - ], - "в" : [ - { "title" : "в", "requires" : [ ] }, - { "title" : "В", "requires" : [ "caps" ] }, - { "title" : "В", "requires" : [ "shift" ] }, - { "title" : "в", "requires" : [ "caps", "shift" ] }, - { "title" : "d", "requires" : [ "lat" ] }, - { "title" : "D", "requires" : [ "lat", "caps" ] }, - { "title" : "D", "requires" : [ "lat", "shift" ] }, - { "title" : "d", "requires" : [ "lat", "caps", "shift" ] } - ], - "а" : [ - { "title" : "а", "requires" : [ ] }, - { "title" : "А", "requires" : [ "caps" ] }, - { "title" : "А", "requires" : [ "shift" ] }, - { "title" : "а", "requires" : [ "caps", "shift" ] }, - { "title" : "f", "requires" : [ "lat" ] }, - { "title" : "F", "requires" : [ "lat", "caps" ] }, - { "title" : "F", "requires" : [ "lat", "shift" ] }, - { "title" : "f", "requires" : [ "lat", "caps", "shift" ] } - ], - "п" : [ - { "title" : "п", "requires" : [ ] }, - { "title" : "П", "requires" : [ "caps" ] }, - { "title" : "П", "requires" : [ "shift" ] }, - { "title" : "п", "requires" : [ "caps", "shift" ] }, - { "title" : "g", "requires" : [ "lat" ] }, - { "title" : "G", "requires" : [ "lat", "caps" ] }, - { "title" : "G", "requires" : [ "lat", "shift" ] }, - { "title" : "g", "requires" : [ "lat", "caps", "shift" ] } - ], - "р" : [ - { "title" : "р", "requires" : [ ] }, - { "title" : "Р", "requires" : [ "caps" ] }, - { "title" : "Р", "requires" : [ "shift" ] }, - { "title" : "р", "requires" : [ "caps", "shift" ] }, - { "title" : "h", "requires" : [ "lat" ] }, - { "title" : "H", "requires" : [ "lat", "caps" ] }, - { "title" : "H", "requires" : [ "lat", "shift" ] }, - { "title" : "h", "requires" : [ "lat", "caps", "shift" ] } - ], - "о" : [ - { "title" : "о", "requires" : [ ] }, - { "title" : "О", "requires" : [ "caps" ] }, - { "title" : "О", "requires" : [ "shift" ] }, - { "title" : "о", "requires" : [ "caps", "shift" ] }, - { "title" : "j", "requires" : [ "lat" ] }, - { "title" : "J", "requires" : [ "lat", "caps" ] }, - { "title" : "J", "requires" : [ "lat", "shift" ] }, - { "title" : "j", "requires" : [ "lat", "caps", "shift" ] } - ], - "л" : [ - { "title" : "л", "requires" : [ ] }, - { "title" : "Л", "requires" : [ "caps" ] }, - { "title" : "Л", "requires" : [ "shift" ] }, - { "title" : "л", "requires" : [ "caps", "shift" ] }, - { "title" : "k", "requires" : [ "lat" ] }, - { "title" : "K", "requires" : [ "lat", "caps" ] }, - { "title" : "K", "requires" : [ "lat", "shift" ] }, - { "title" : "k", "requires" : [ "lat", "caps", "shift" ] } - ], - "д" : [ - { "title" : "д", "requires" : [ ] }, - { "title" : "Д", "requires" : [ "caps" ] }, - { "title" : "Д", "requires" : [ "shift" ] }, - { "title" : "д", "requires" : [ "caps", "shift" ] }, - { "title" : "l", "requires" : [ "lat" ] }, - { "title" : "L", "requires" : [ "lat", "caps" ] }, - { "title" : "L", "requires" : [ "lat", "shift" ] }, - { "title" : "l", "requires" : [ "lat", "caps", "shift" ] } - ], - "я" : [ - { "title" : "я", "requires" : [ ] }, - { "title" : "Я", "requires" : [ "caps" ] }, - { "title" : "Я", "requires" : [ "shift" ] }, - { "title" : "я", "requires" : [ "caps", "shift" ] }, - { "title" : "z", "requires" : [ "lat" ] }, - { "title" : "Z", "requires" : [ "lat", "caps" ] }, - { "title" : "Z", "requires" : [ "lat", "shift" ] }, - { "title" : "z", "requires" : [ "lat", "caps", "shift" ] } - ], - "ч" : [ - { "title" : "ч", "requires" : [ ] }, - { "title" : "Ч", "requires" : [ "caps" ] }, - { "title" : "Ч", "requires" : [ "shift" ] }, - { "title" : "ч", "requires" : [ "caps", "shift" ] }, - { "title" : "x", "requires" : [ "lat" ] }, - { "title" : "X", "requires" : [ "lat", "caps" ] }, - { "title" : "X", "requires" : [ "lat", "shift" ] }, - { "title" : "x", "requires" : [ "lat", "caps", "shift" ] } - ], - "с" : [ - { "title" : "с", "requires" : [ ] }, - { "title" : "С", "requires" : [ "caps" ] }, - { "title" : "С", "requires" : [ "shift" ] }, - { "title" : "с", "requires" : [ "caps", "shift" ] }, - { "title" : "c", "requires" : [ "lat" ] }, - { "title" : "C", "requires" : [ "lat", "caps" ] }, - { "title" : "C", "requires" : [ "lat", "shift" ] }, - { "title" : "c", "requires" : [ "lat", "caps", "shift" ] } - ], - "м" : [ - { "title" : "м", "requires" : [ ] }, - { "title" : "М", "requires" : [ "caps" ] }, - { "title" : "М", "requires" : [ "shift" ] }, - { "title" : "м", "requires" : [ "caps", "shift" ] }, - { "title" : "v", "requires" : [ "lat" ] }, - { "title" : "V", "requires" : [ "lat", "caps" ] }, - { "title" : "V", "requires" : [ "lat", "shift" ] }, - { "title" : "v", "requires" : [ "lat", "caps", "shift" ] } - ], - "и" : [ - { "title" : "и", "requires" : [ ] }, - { "title" : "И", "requires" : [ "caps" ] }, - { "title" : "И", "requires" : [ "shift" ] }, - { "title" : "и", "requires" : [ "caps", "shift" ] }, - { "title" : "b", "requires" : [ "lat" ] }, - { "title" : "B", "requires" : [ "lat", "caps" ] }, - { "title" : "B", "requires" : [ "lat", "shift" ] }, - { "title" : "b", "requires" : [ "lat", "caps", "shift" ] } - ], - "т" : [ - { "title" : "т", "requires" : [ ] }, - { "title" : "Т", "requires" : [ "caps" ] }, - { "title" : "Т", "requires" : [ "shift" ] }, - { "title" : "т", "requires" : [ "caps", "shift" ] }, - { "title" : "n", "requires" : [ "lat" ] }, - { "title" : "N", "requires" : [ "lat", "caps" ] }, - { "title" : "N", "requires" : [ "lat", "shift" ] }, - { "title" : "n", "requires" : [ "lat", "caps", "shift" ] } - ], - "ь" : [ - { "title" : "ь", "requires" : [ ] }, - { "title" : "Ь", "requires" : [ "caps" ] }, - { "title" : "Ь", "requires" : [ "shift" ] }, - { "title" : "ь", "requires" : [ "caps", "shift" ] }, - { "title" : "m", "requires" : [ "lat" ] }, - { "title" : "M", "requires" : [ "lat", "caps" ] }, - { "title" : "M", "requires" : [ "lat", "shift" ] }, - { "title" : "m", "requires" : [ "lat", "caps", "shift" ] } - ] - - }, - - "layout" : [ - - { - "top" : { - "function": [ - - [ "Esc", 0.7, "F1", "F2", "F3", "F4", - 0.7, "F5", "F6", "F7", "F8", - 0.7, "F9", "F10", "F11", "F12" ] - - ], - - "virtual": [ - - [ "Latin" ] - - ] - } - }, - - [ 0.1 ], - - { - "main" : { - "alpha" : [ - - [ "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "Back" ], - [ "Tab", "й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "\\" ], - [ "Caps", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "Enter" ], - [ "LShift", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю", "/", "RShift" ], - [ "LCtrl", "Meta", "LAlt", "Space", "RAlt", "Menu", "RCtrl" ] - - ], - - "movement" : [ - [ "Ins", "Home", "PgUp" ], - [ "Del", "End", "PgDn" ], - [ 1.1 ], - [ "Up" ], - [ "Left", "Down", "Right" ] - ] - } - } - - ], - - "keyWidths" : { - - "Back" : 2, - "Tab" : 1.5, - "\\" : 1.5, - "Caps" : 1.85, - "Enter" : 2.25, - "LShift" : 2.1, - "RShift" : 3.1, - - "LCtrl" : 1.6, - "Meta" : 1.6, - "LAlt" : 1.6, - "Space" : 6.1, - "RAlt" : 1.6, - "Menu" : 1.6, - "RCtrl" : 1.6, - - "Latin": 1.6, - "Ins" : 1.6, - "Home" : 1.6, - "PgUp" : 1.6, - "Del" : 1.6, - "End" : 1.6, - "PgDn" : 1.6 - - } - -} diff --git a/guacamole/src/main/frontend/src/relocateParameters.js b/guacamole/src/main/frontend/src/relocateParameters.js deleted file mode 100644 index f3d0e00a2b..0000000000 --- a/guacamole/src/main/frontend/src/relocateParameters.js +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Reformats the URL of the current page such that normal query parameters will - * be received by AngularJS. If possible, this reformatting operation will be - * performed using the HTML5 History API, thus avoiding reloading the page. - * - * For example, if a user visits the following URL: - * - * http://example.org/some/application/?foo=bar - * - * this script will reformat the URL as: - * - * http://example.org/some/application/#/?foo=bar - * - * If the URL does not contain query parameters, or the query parameters are - * already in a format which AngularJS can read, then the URL is left - * untouched. - * - * If query parameters are present both in the normal non-Angular format AND - * within the URL fragment identifier, the query parameters are merged such - * that AngularJS can read all parameters. - * - * @private - * @param {Location} location - * The Location object representing the URL of the current page. - */ -(function relocateParameters(location){ - - /** - * The default path, including leading '#' character, which should be used - * if the URL of the current page has no fragment identifier. - * - * @constant - * @type String - */ - var DEFAULT_ANGULAR_PATH = '#/'; - - /** - * The query parameters within the URL of the current page, including the - * leading '?' character. - * - * @type String - */ - var parameters = location.search; - - /** - * The base URL of the current page, containing only the protocol, hostname, - * and path. Query parameters and the fragment, if any, are excluded. - * - * @type String - */ - var baseUrl = location.origin + location.pathname; - - /** - * The Angular-specific path within the fragment identifier of the URL of - * the current page, including the leading '#' character of the fragment - * identifier. If no fragment identifier is present, the deafult path will - * be used. - * - * @type String - */ - var angularUrl = location.hash || DEFAULT_ANGULAR_PATH; - - /** - * Appends the given parameter string to the given URL. The URL may already - * contain parameters. - * - * @param {String} url - * The URL that the given parameters should be appended to, which may - * already contain parameters. - * - * @param {String} parameters - * The parameters which should be appended to the given URL, including - * leading '?' character. - * - * @returns {String} - * A properly-formatted URL consisting of the given URL and additional - * parameters. - */ - var appendParameters = function appendParameters(url, parameters) { - - // If URL already contains parameters, replace the leading '?' with an - // '&' prior to appending more parameters - if (url.indexOf('?') !== -1) - return url + '&' + parameters.substring(1); - - // Otherwise, the provided parameters already contains the necessary - // '?' character - just append - return url + parameters; - - }; - - // If non-Angular query parameters are present, reformat the URL such that - // they are after the path and thus visible to Angular - if (parameters) { - - // Reformat the URL such that query parameters are after Angular's path - var reformattedUrl = appendParameters(baseUrl + angularUrl, parameters); - - // Simply rewrite the visible URL if the HTML5 History API is supported - if (window.history && history.replaceState) - history.replaceState(null, document.title, reformattedUrl); - - // Otherwise, redirect to the reformatted URL - else - location.href = reformattedUrl; - - } - -})(window.location); diff --git a/guacamole/src/main/frontend/src/translations/ca.json b/guacamole/src/main/frontend/src/translations/ca.json deleted file mode 100644 index 224702e63e..0000000000 --- a/guacamole/src/main/frontend/src/translations/ca.json +++ /dev/null @@ -1,989 +0,0 @@ -{ - - "NAME" : "Catalan", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "D'acord", - "ACTION_CANCEL" : "Cancel·la", - "ACTION_CLEAR" : "Neteja", - "ACTION_CLONE" : "Clona", - "ACTION_CONTINUE" : "Continua", - "ACTION_DELETE" : "Suprimeix", - "ACTION_DELETE_SESSIONS" : "Mata Sessions", - "ACTION_DOWNLOAD" : "Descarrega", - "ACTION_IMPORT" : "Importa", - "ACTION_LOGIN" : "Inicia sessió", - "ACTION_LOGIN_AGAIN" : "Torna a iniciar", - "ACTION_LOGOUT" : "Tanca la sessió", - "ACTION_MANAGE_CONNECTIONS" : "Connexions", - "ACTION_MANAGE_PREFERENCES" : "Preferències", - "ACTION_MANAGE_SETTINGS" : "Configuració", - "ACTION_MANAGE_SESSIONS" : "Sessions actives", - "ACTION_MANAGE_USERS" : "Usuaris", - "ACTION_MANAGE_USER_GROUPS" : "Grups", - "ACTION_NAVIGATE_BACK" : "Enrera", - "ACTION_NAVIGATE_HOME" : "Inici", - "ACTION_PAUSE" : "Pausa", - "ACTION_PLAY" : "Reprodueix", - "ACTION_SAVE" : "Desa", - "ACTION_SEARCH" : "Cerca", - "ACTION_SHARE" : "Comparteix", - "ACTION_UPDATE_PASSWORD" : "Actualitza la contrasenya", - "ACTION_VIEW_HISTORY" : "Historial", - "ACTION_VIEW_RECORDING" : "Veure", - - "DIALOG_HEADER_ERROR" : "Error", - - "ERROR_PAGE_UNAVAILABLE" : "S'ha produït un error i aquesta acció no es pot completar. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del vostre sistema.", - "ERROR_PASSWORD_BLANK" : "La vostra contrasenya no pot estar en blanc.", - "ERROR_PASSWORD_MISMATCH" : "Les contrasenyes proporcionades no coincideixen.", - "ERROR_SINGLE_FILE_ONLY" : "Penjeu un sol fitxer cada vegada.", - - "FIELD_HEADER_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Torneu a escriure la contrasenya:", - - "FIELD_PLACEHOLDER_FILTER" : "Filtre", - - "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Actualment en ús per {USERS} {USERS, plural, one{usuari} other{usrris}}.", - "INFO_LOGGED_OUT" : "Us heu desconnectat.", - - "TEXT_ANONYMOUS_USER" : "Anònim", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{segon} other{segons}}} minute{{VALUE, plural, one{minut} other{minuts}}} hour{{VALUE, plural, one{hora} other{hores}}} day{{VALUE, plural, one{dia} other{dies}}} other{}}" - - }, - - "CLIENT" : { - - "ACTION_DISCONNECT" : "Desconnecta", - "ACTION_RECONNECT" : "Torneu a connectar", - "ACTION_SHOW_CLIPBOARD" : "Feu clic per veure les dades del porta-retalls.", - "ACTION_UPLOAD_FILES" : "Carregueu fitxers", - - "DIALOG_HEADER_CONNECTING" : "Connectant", - "DIALOG_HEADER_CONNECTION_ERROR" : "Error de connexió", - "DIALOG_HEADER_DISCONNECTED" : "Desconnectat", - - "ERROR_CLIENT_201" : "Aquesta connexió s'ha tancat perquè el servidor està ocupat. Espereu uns minuts i torna-ho a provar.", - "ERROR_CLIENT_202" : "El servidor Guacamole ha tancat la connexió perquè l'escriptori remot triga massa temps a respondre. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", - "ERROR_CLIENT_203" : "El servidor d'escriptori remot ha trobat un error i ha tancat la connexió. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", - "ERROR_CLIENT_207" : "El servidor d'escriptori remot actualment no es pot aconseguir. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", - "ERROR_CLIENT_208" : "Actualment el servidor d'escriptori remot no està disponible. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del vostre sistema.", - "ERROR_CLIENT_209" : "El servidor d'escriptori remot ha tancat la connexió perquè entra en conflicte amb una altra connexió. Torneu-ho a provar més endavant.", - "ERROR_CLIENT_20A" : "El servidor d'escriptori remot ha tancat la connexió perquè sembla que no està activat. Si no és desitjat o inesperat, aviseu l'administrador del sistema o comproveu la configuració del vostre sistema.", - "ERROR_CLIENT_20B" : "El servidor d'escriptori remot ha tancat força la connexió. Si aquesta no és desitjada o inesperada, notifiqueu l'administrador del sistema o comproveu els registres del sistema.", - "ERROR_CLIENT_301" : "Ha fallat la sessió. Torneu-vos a connectar i torneu-ho a provar.", - "ERROR_CLIENT_303" : "El servidor d'escriptori remot ha denegat l'accés a aquesta connexió. Si necessiteu accés, sol·liciteu a l'administrador del sistema que li concedeixi accés o verifiqueu la configuració del sistema.", - "ERROR_CLIENT_308" : "El servidor de Guacamole ha tancat la connexió perquè no hi ha resposta del navegador durant el temps suficient perquè sembli que es trobava desconnectat. Això és generalment causat per problemes de xarxa, com ara un senyal sense fils o simplement una velocitat de xarxa molt lenta. a la xarxa i torneu-ho a provar. ", - "ERROR_CLIENT_31D" : "El servidor Guacamole denega l'accés a aquesta connexió perquè heu exhaurit el límit per a l'ús de la connexió simultània per part d'un usuari individual. Tanqueu una o més connexions i torneu-ho a provar.", - "ERROR_CLIENT_DEFAULT" : "S'ha produït un error intern al servidor Guacamole i s'ha acabat la connexió. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", - - "ERROR_TUNNEL_201" : "El servidor Guacamole ha rebutjat aquest intent de connexió perquè hi ha massa connexions actives. Espereu uns minuts i torna-ho a provar.", - "ERROR_TUNNEL_202" : "La connexió s'ha tancat perquè el servidor triga massa temps a respondre. Això sol ser causat per problemes de xarxa, com ara un senyal sense fils o una velocitat de xarxa lenta. Comproveu la connexió de xarxa i intenteu de nou o poseu-vos en contacte amb l'administrador del sistema. ", - "ERROR_TUNNEL_203" : "El servidor ha trobat un error i ha tancat la connexió. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", - "ERROR_TUNNEL_204" : "La connexió sol·licitada no existeix. Comproveu el nom de la connexió i proveu-ho de nou.", - "ERROR_TUNNEL_205" : "Actualment aquesta connexió està en ús i no es permet l'accés simultani a aquesta connexió. Torneu-ho a provar més endavant.", - "ERROR_TUNNEL_207" : "El servidor Guacamole no es pot accedir actualment. Comproveu la vostra xarxa i torneu-ho a provar.", - "ERROR_TUNNEL_208" : "El servidor Guacamole no accepta connexions. Comproveu la vostra xarxa i proveu-la de nou.", - "ERROR_TUNNEL_301" : "No teniu permís per accedir a aquesta connexió perquè no esteu registrat. Inicieu la sessió i torneu-ho a provar.", - "ERROR_TUNNEL_303" : "No teniu permís per accedir a aquesta connexió. Si necessiteu accés, sol·liciteu a l'administrador del sistema que us inclogui la llista d'usuaris permesos o comproveu la vostra configuració del sistema.", - "ERROR_TUNNEL_308" : "El servidor de Guacamole ha tancat la connexió perquè no hi ha hagut resposta del seu navegador durant el temps suficient com perquè sembli estar desconnectat. Això generalment és causat per problemes de xarxa, com un senyal sense fils irregular o simplement velocitats de xarxa molt lentes. comprovi la seva xarxa i intenti novament .", - "ERROR_TUNNEL_31D" : "El servidor Guacamole denega l'accés a aquesta connexió perquè heu exhaurit el límit per a l'ús de la connexió simultània per part d'un usuari individual. Tanqueu una o més connexions i torneu-ho a provar.", - "ERROR_TUNNEL_DEFAULT" : "S'ha produït un error intern al servidor Guacamole i s'ha acabat la connexió. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", - - "ERROR_UPLOAD_100" : "La transferència de fitxers no és compatible o no està habilitada. Poseu-vos en contacte amb l'administrador del sistema o comproveu els registres del vostre sistema.", - "ERROR_UPLOAD_201" : "Actualment s'estan transferint massa fitxers. Espereu que es completin les transferències existents i, després, torneu-ho a provar.", - "ERROR_UPLOAD_202" : "No es pot transferir el fitxer perquè el servidor d'escriptori remot triga massa temps a respondre. Torneu-ho a provar o poseu-vos en contacte amb l'administrador del vostre sistema.", - "ERROR_UPLOAD_203" : "El servidor d'escriptori remot ha trobat un error durant la transferència. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", - "ERROR_UPLOAD_204" : "La destinació per a la transferència de fitxers no existeix. Comproveu que la destinació existeix i torneu-ho a provar.", - "ERROR_UPLOAD_205" : "La destinació per a la transferència de fitxers està bloquejada. Espereu qualsevol finalització de les tasques en curs i torneu-ho a provar.", - "ERROR_UPLOAD_301" : "No teniu permís per carregar aquest fitxer perquè no esteu registrat. Inicieu la sessió i torneu-ho a provar.", - "ERROR_UPLOAD_303" : "No teniu permís per carregar aquest fitxer. Si necessiteu accés, consulteu la configuració del sistema o consulteu-lo amb l'administrador del vostre sistema.", - "ERROR_UPLOAD_308" : "La transferència de fitxers s'ha aturat. Això és habitualment causat per problemes de xarxa, com ara un senyal sense fils o una velocitat de xarxa molt lenta.", - "ERROR_UPLOAD_31D" : "Actualment s'estan transferint massa fitxers. Espereu que es completin les transferències existents i, després, torneu-ho a provar.", - "ERROR_UPLOAD_DEFAULT" : "S'ha produït un error intern al servidor Guacamole i s'ha acabat la connexió. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", - - "HELP_CLIPBOARD" : "Aquí apareixerà un text copiat/tallat dins de Guacamole. Els canvis al text següent afectaran el porta-retalls remot.", - "HELP_INPUT_METHOD_NONE" : "No s'utilitza cap mètode d'entrada. S'accepta l'entrada de teclat des d'un teclat físic connectat.", - "HELP_INPUT_METHOD_OSK" : "Mostra i accepta l'entrada del teclat integrat de Guacamole a la pantalla. El teclat a la pantalla permet escriure combinacions de tecles que, d'una altra manera, poden ser impossibles (com ara Ctrl-Alt-Del).", - "HELP_INPUT_METHOD_TEXT" : "Permet escriure text i emula esdeveniments del teclat en funció del text mecanografiat. Això és necessari per a dispositius com ara telèfons mòbils que no tinguin un teclat físic.", - "HELP_MOUSE_MODE" : "Determina el comportament del ratolí remot respecte als tocs.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Toqueu per fer clic. El clic es produeix a la ubicació del toc.", - "HELP_MOUSE_MODE_RELATIVE" : "Arrossegueu per moure el punter del ratolí i toqueu per fer clic. El clic es produeix a la ubicació del punter.", - "HELP_SHARE_LINK" : "La connexió actual s'està compartint i qualsevol usuari pot accedir amb els següents {LINKS, plural, one{enllaç} other{enllaços}}:", - - "INFO_ANONYMOUS_USER_COUNT" : "Anònim{COUNT, plural, one{} other{s (#)}}", - "INFO_CONNECTION_SHARED" : "Aquesta connexió es comparteix ara.", - "INFO_NO_FILE_TRANSFERS" : "No hi ha transferències de fitxers.", - "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", - - "NAME_INPUT_METHOD_NONE" : "Cap", - "NAME_INPUT_METHOD_OSK" : "Teclat a la pantalla", - "NAME_INPUT_METHOD_TEXT" : "Entrada de text", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Pantalla tàctil", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIENT_MESSAGES" : "Missatges", - "SECTION_HEADER_CLIPBOARD" : "Porta-retalls", - "SECTION_HEADER_DEVICES" : "Dispositius", - "SECTION_HEADER_DISPLAY" : "Pantalla", - "SECTION_HEADER_FILE_TRANSFERS" : "Transferències de fitxers", - "SECTION_HEADER_INPUT_METHOD" : "Mètode d'entrada", - "SECTION_HEADER_MOUSE_MODE" : "Mode d'emulació del ratolí", - - "TEXT_ANONYMOUS_USER_JOINED" : "Un usuari anònim s'ha afegit a la connexió.", - "TEXT_ANONYMOUS_USER_LEFT" : "Un usuari anònim ha sortit de la connexió.", - "TEXT_CLIENT_STATUS_IDLE" : "Ociós.", - "TEXT_CLIENT_STATUS_CONNECTING" : "S'està connectant a Guacamole ...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Heu estat desconnectats.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "La connexió de xarxa al servidor Guacamole sembla inestable.", - "TEXT_CLIENT_STATUS_WAITING" : "Connectat a Guacamole. Esperant resposta ...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - "TEXT_RECONNECT_COUNTDOWN" : "Re-conectant en {REMAINING} {REMAINING, plural, one{segon} other{segons}}...", - "TEXT_USER_JOINED" : "{USERNAME} s'ha afegit a la connexió.", - "TEXT_USER_LEFT" : "{USERNAME} ha sortit de la connexió.", - "TEXT_ZOOM_AUTO_FIT" : "S'adapta automàticament a la finestra del navegador", - - "URL_OSK_LAYOUT" : "layouts/es-es-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_HIDE_DETAILS" : "Amaga", - "ACTION_SHOW_DETAILS" : "Mostra", - - "FIELD_HEADER_BACKGROUND" : "Background", - "FIELD_HEADER_FOREGROUND" : "Foreground", - - "FIELD_OPTION_CUSTOM" : "Personalitzat ...", - - "SECTION_HEADER_DETAILS" : "Detalls:" - - }, - - "IMPORT": { - - "ACTION_BROWSE" : "Navega pels fitxers", - "ACTION_VIEW_FORMAT_HELP" : "Veure l'ajuda de format", - "ACTION_IMPORT_CONNECTIONS" : "Importa connexions", - - "DIALOG_HEADER_SUCCESS" : "Fet", - - "ERROR_AMBIGUOUS_CSV_HEADER" : "La capçalera \"{HEADER}\" del CSV és ambigua, pot ser o bé un atribut de connexió o un paràmetre", - "ERROR_AMBIGUOUS_PARENT_GROUP" : "No es pot especificar el grup i el parentIdentifier alhora", - "ERROR_ARRAY_REQUIRED" : "El fitxer ha de contenir un llistat de connexions", - "ERROR_DETECTED_INVALID_TYPE" : "Tipus de fitxer no suportat. Assegureu-vos que és un fitxer CSV, JSON o YAML vàlid.", - "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "Nom de connexió \"{NAME}\" duplicat a \"{PATH}\" al fitxer d'importació", - "ERROR_DUPLICATE_CSV_HEADER" : "Capçalera duplicada al CSV: {HEADER}", - "ERROR_EMPTY_FILE" : "El fitxer està buit", - "ERROR_INVALID_CSV_HEADER" : "La capçalera \"{HEADER}\" del CSV no és vàlida, no és ni un atribut ni un paràmetre", - "ERROR_INVALID_MIME_TYPE" : "Tipus de fitxer no suportat: \"{TYPE}\"", - "ERROR_INVALID_GROUP" : "No s'ha trobat cap grup que coincideixi amb \"{GROUP}\"", - "ERROR_INVALID_GROUP_IDENTIFIER" : "No s'ha trobat cap grup de connexió amb l'identificador \"{IDENTIFIER}\"", - "ERROR_INVALID_GROUP_TYPE" : "El grup no és vàlid - ha de ser una cadena de text.", - "ERROR_INVALID_PROTOCOL" : "El protocol no és vàlid \"{PROTOCOL}\"", - "ERROR_INVALID_USER_GROUPS_TYPE" : "El grup d'usuari no és vàlid - ha de ser un array d'identificadors de grup d'usuari.", - "ERROR_INVALID_USERS_TYPE" : "Usuaris no vàlids - ha de ser un array d'identificadors d'usuari.", - "ERROR_NO_FILE_SUPPLIED" : "Seleccioneu un fitxer per importar", - "ERROR_PARSE_FAILURE_CSV" : "Assegureu-vos que heu pujat un fitxer CSV vàlid. L'anàlisi ha fallat amb el següent error \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_JSON" : "Assegureu-vos que heu pujat un fitxer JSON vàlid. L'anàlisi ha fallat amb el següent error \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_YAML" : "Assegureu-vos que heu pujat un fitxer YAML vàlid. L'anàlisi ha fallat amb el següent error \"{ERROR}\". ", - "ERROR_REJECT_UPDATE_CONNECTION" : "La connexió \"{NAME}\" ja existeix a \"{PATH}\"", - "ERROR_REQUIRED_NAME_CONNECTION" : "El nom de connexió és obligatori", - "ERROR_REQUIRED_PROTOCOL_CONNECTION" : "El protocol de connexió és obligatori", - "ERROR_REQUIRED_NAME_FILE" : "No s'ha trobat el nom de la connexió al fitxer", - "ERROR_REQUIRED_PROTOCOL_FILE" : "No s'ha trobat el protocol de connexió al fitxer", - - "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "Substituir/Actualitzar les connexions existents", - "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "Reinicia els permisos", - - "HELP_CSV_DESCRIPTION" : "Un fitxer CSV d'importació de connexions ha de tenir un registre de connexió per línia. Cada columna especificarà un camp de la connexió. Com a mínim cal especificar el nom de la connexió i el protocol.", - "HELP_CSV_EXAMPLE" : "name,protocol,username,password,hostname,group,users,groups,guacd-encryption (attribute)\nconn1,vnc,alice,pass1,conn1.web.com,ROOT,guac user 1;guac user 2,Connection 1 Users,none\nconn2,rdp,bob,pass2,conn2.web.com,ROOT/Parent Group,guac user 1,,ssl\nconn3,ssh,carol,pass3,conn3.web.com,ROOT/Parent Group/Child Group,guac user 2;guac user 3,,\nconn4,kubernetes,,,,,,,", - "HELP_CSV_MORE_DETAILS" : "La capçalera per cada fila especifica el camp de connexió. L'ID del grup de connexió on la connexió s'ha d'importar pot ser especificada directament amb \"parentIdentifier\", o el camí al grup pare es pot especificar utilitzant \"group\" tal com es mostra més avall. En la majoria de casos, no hi ha d'haver conflicte entre els camps, però si cal, un sufixe \" (attribute)\" o \" (parameter)\" es pot afegir per desambiguar. Les llistes d'usuaris o identificadors de grup d'usuaris s'ha de separar amb punt i comes.¹", - "HELP_FILE_TYPE_HEADER" : "Tipus de fitxers", - "HELP_JSON_DESCRIPTION" : "Un fitxer JSON d'importació de connexions conté una llista d'objectes de connexió. Com a mínim cal especificar el nom de la connexió i el protocol en cada objecte de connexió.", - "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"conn1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"username\": \"alice\", \"password\": \"pass1\", \"hostname\": \"conn1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac user 1\", \"guac user 2\" ],\n \"groups\": [ \"Connection 1 Users\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"username\": \"bob\", \"password\": \"pass2\", \"hostname\": \"conn2.web.com\" \\},\n \"group\": \"ROOT/Parent Group\",\n \"users\": [ \"guac user 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"username\": \"carol\", \"password\": \"pass3\", \"hostname\": \"conn3.web.com\" \\},\n \"group\": \"ROOT/Parent Group/Child Group\",\n \"users\": [ \"guac user 2\", \"guac user 3\" ]\n \\},\n \\{\n \"name\": \"conn4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", - "HELP_SEMICOLON_FOOTNOTE" : "Si cal, els punt i coma es poden escapar utilitzant una contrabarra, per exemple. \"first\\\\;last\"", - "HELP_UPLOAD_DROP_TITLE" : "Arrossegueu un fitxer aquí", - "HELP_UPLOAD_FILE_TYPES" : "CSV, JSON, o YAML", - "HELP_YAML_DESCRIPTION" : "Un fitxer YAML d'importació de connexions és una llista d'objectes de connexió amb exactament la mateixa estructura que el format JSON.", - "HELP_YAML_EXAMPLE" : "---\n - name: conn1\n protocol: vnc\n parameters:\n username: alice\n password: pass1\n hostname: conn1.web.com\n group: ROOT\n users:\n - guac user 1\n - guac user 2\n groups:\n - Connection 1 Users\n attributes:\n guacd-encryption: none\n - name: conn2\n protocol: rdp\n parameters:\n username: bob\n password: pass2\n hostname: conn2.web.com\n group: ROOT/Parent Group\n users:\n - guac user 1\n attributes:\n guacd-encryption: none\n - name: conn3\n protocol: ssh\n parameters:\n username: carol\n password: pass3\n hostname: conn3.web.com\n group: ROOT/Parent Group/Child Group\n users:\n - guac user 2\n - guac user 3\n - name: conn4\n protocol: kubernetes", - - "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} {NUMBER, plural, one{connexió importada} other{connexions importades}} correctament.", - - "SECTION_HEADER_CONNECTION_IMPORT" : "Importa una connexió", - "SECTION_HEADER_CSV" : "Format CSV", - "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "Format de fitxer d'importació de connexions", - "SECTION_HEADER_JSON" : "Format JSON", - "SECTION_HEADER_YAML" : "Format YAML", - - "TABLE_HEADER_ERRORS" : "Errors", - "TABLE_HEADER_GROUP" : "Grup", - "TABLE_HEADER_NAME" : "Nom", - "TABLE_HEADER_PROTOCOL" : "Protocol", - "TABLE_HEADER_ROW_NUMBER" : "Fila #" - }, - - "DATA_SOURCE_DEFAULT" : { - - "NAME" : "Default (XML)" - - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Feu clic per mostrar la contrasenya", - "HELP_HIDE_PASSWORD" : "Feu clic per amagar la contrasenya" - - }, - - "HOME" : { - - "INFO_NO_RECENT_CONNECTIONS" : "No hi ha connexions recents.", - - "PASSWORD_CHANGED" : "S'ha canviat la contrasenya.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Totes les connexions", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Connexions recents" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "Anònim" - - }, - - "LOGIN": { - - "ERROR_INVALID_LOGIN" : "Accés incorrecte", - - "FIELD_HEADER_USERNAME" : "Nom d'usuari", - "FIELD_HEADER_PASSWORD" : "Contrasenya" - - }, - - "MANAGE_CONNECTION" : { - - - "DIALOG_HEADER_CONFIRM_DELETE" : "Suprimir la connexió", - - "FIELD_HEADER_LOCATION" : "Ubicació:", - "FIELD_HEADER_NAME" : "Nom:", - "FIELD_HEADER_PROTOCOL" : "Protocol:", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Actiu ara", - "INFO_CONNECTION_NOT_USED" : "Aquesta connexió encara no s'ha utilitzat.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Edició de connexió", - "SECTION_HEADER_HISTORY" : "Historial d'ús", - "SECTION_HEADER_PARAMETERS" : "Paràmetres", - - "TABLE_HEADER_HISTORY_USERNAME" : "Nom d'usuari", - "TABLE_HEADER_HISTORY_START" : "L'hora d'inici", - "TABLE_HEADER_HISTORY_DURATION" : "Durada", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Servidor Remot", - - "TEXT_CONFIRM_DELETE" : "No es poden restaurar les connexions un cop s'hagin suprimit. Esteu segur que voleu suprimir aquesta connexió?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "DIALOG_HEADER_CONFIRM_DELETE" : "Suprimeix el grup de connexió", - - "FIELD_HEADER_LOCATION" : "Ubicació:", - "FIELD_HEADER_NAME" : "Nom:", - "FIELD_HEADER_TYPE" : "Tipus:", - - "NAME_TYPE_BALANCING" : "Balanceig", - "NAME_TYPE_ORGANIZATIONAL" : "Organitzatiu", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Edita el grup de connexió", - - "TEXT_CONFIRM_DELETE" : "No es poden restaurar els grups de connexió un cop suprimits. Esteu segur que voleu suprimir aquest grup de connexió?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar el perfil compartit", - - "FIELD_HEADER_NAME" : "Nom:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Connexió primària:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Edita el perfil de compartir", - "SECTION_HEADER_PARAMETERS" : "Paràmetres", - - "TEXT_CONFIRM_DELETE" : "Els perfils per compartir no es poden restaurar un cop s'hagin suprimit. Esteu segur que voleu suprimir aquest perfil compartit?" - - }, - - "MANAGE_USER" : { - - - "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar l'usuari", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrar el sistema:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Canviar la pròpia contrasenya:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Crear usuaris nous:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Crear grups d'usuaris nous:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Crear noves connexions:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Crear grups de connexió nous:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Crear nous perfils per compartir:", - "FIELD_HEADER_USER_DISABLED" : "Inici de sessió desactivat:", - "FIELD_HEADER_USERNAME" : "Nom d'usuari:", - - "HELP_NO_USER_GROUPS" : "Actualment, aquest usuari no pertany a cap grup. Amplieu aquesta secció per afegir-lo a grups.", - - "INFO_READ_ONLY" : "Ho sentim, però aquest compte d'usuari no es pot modificar.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "No hi ha grups disponibles.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Totes les connexions", - "SECTION_HEADER_CONNECTIONS" : "Connexions", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Connexions actuals", - "SECTION_HEADER_EDIT_USER" : "Edició d'usuari", - "SECTION_HEADER_PERMISSIONS" : "Permisos", - "SECTION_HEADER_USER_GROUPS" : "Grups", - - "TEXT_CONFIRM_DELETE" : "Els usuaris no es poden restaurar un cop se'ls ha suprimit. Segur que voleu suprimir aquest usuari?" - - }, - - "MANAGE_USER_GROUP" : { - - - "DIALOG_HEADER_CONFIRM_DELETE" : "Suprimeix el grup", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "Desactivat:", - "FIELD_HEADER_USER_GROUP_NAME" : "Nom del grup:", - - "HELP_NO_USER_GROUPS" : "Actualment aquest grup no pertany a cap grup. Amplieu aquesta secció per afegir grups.", - "HELP_NO_MEMBER_USER_GROUPS" : "Actualment aquest grup no conté cap grup. Amplieu aquesta secció per afegir grups.", - "HELP_NO_MEMBER_USERS" : "Actualment aquest grup no conté cap usuari. Amplieu aquesta secció per afegir-ne usuaris.", - - "INFO_READ_ONLY" : "Ho sentim, però no es pot editar aquest grup.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "No hi ha usuaris disponibles.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Edició de grup", - "SECTION_HEADER_MEMBER_USERS" : "Usuaris membres", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Grups membres", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Grups pare", - - "TEXT_CONFIRM_DELETE" : "No es poden restaurar els grups després que se'ls hagi suprimit. Esteu segur que voleu suprimir aquest grup?" - - }, - - "PLAYER" : { - - "ACTION_SHOW_KEY_LOG" : "Registre de tecleig", - - "INFO_LOADING_RECORDING" : "L'enregistrament s'està carregant. Espereu...", - "INFO_NO_KEY_LOG" : "Registre de tecleig no disponible", - "INFO_NUMBER_OF_RESULTS" : "{RESULTS} {RESULTS, plural, one{coincidència} other{coincidències}}", - "INFO_SEEK_IN_PROGRESS" : "Saltant a la posició demanada. Espereu...", - - "FIELD_PLACEHOLDER_TEXT_BATCH_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "La tecla de retrocés envia:", - "FIELD_HEADER_CA_CERT" : "Certificat d'autoritat de certificació:", - "FIELD_HEADER_CLIENT_CERT" : "Certificat de client:", - "FIELD_HEADER_CLIENT_KEY" : "Clau del client:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de colors:", - "FIELD_HEADER_CONTAINER" : "Nom del contenidor:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crea automàticament la ruta de typescript:", - "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des del terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l'enganxament del client:", - "FIELD_HEADER_EXEC_COMMAND" : "Comanda (exec):", - "FIELD_HEADER_FONT_NAME" : "Nom del tipus de lletra:", - "FIELD_HEADER_FONT_SIZE" : "Mida de la lletra:", - "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_IGNORE_CERT" : "Ignora el certificat del servidor:", - "FIELD_HEADER_NAMESPACE" : "Espai de noms:", - "FIELD_HEADER_POD" : "Nom del pod:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Només Lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", - "FIELD_HEADER_SCROLLBACK" : "Mida màxima de desplaçament:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta Typescript :", - "FIELD_HEADER_USE_SSL" : "Usa SSL/TLS", - - "FIELD_OPTION_BACKSPACE_8" : "Espai enrere (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Eliminar (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negre sobre blanc", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negre", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verd sobre negre", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sobre negre", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticació", - "SECTION_HEADER_BEHAVIOR" : "Comportament del terminal", - "SECTION_HEADER_CLIPBOARD" : "Porta-retalls", - "SECTION_HEADER_CONTAINER" : "Contenidor", - "SECTION_HEADER_DISPLAY" : "Pantalla", - "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (registre de sessió de text)", - "SECTION_HEADER_NETWORK" : "Xarxa" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Nom del client:", - "FIELD_HEADER_COLOR_DEPTH" : "Profunditat del color:", - "FIELD_HEADER_CONSOLE" : "Administrador de la consola:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Suport de l'àudio a la consola:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Crea automàticament la unitat:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", - "FIELD_HEADER_DISABLE_AUDIO" : "Desactiva l'àudio:", - "FIELD_HEADER_DISABLE_AUTH" : "Desactiva l'autenticació:", - "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des de l'escriptori remot:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l’enganxament del client:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", - "FIELD_HEADER_DOMAIN" : "Domini:", - "FIELD_HEADER_DPI" : "Resolució (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Nom de la unitat:", - "FIELD_HEADER_DRIVE_PATH" : "Ruta de la unitat:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Habilita l'entrada d'àudio (micròfon):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Habilita la composició d'escriptori (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Habilita la unitat:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Habilita el suavització de tipus de lletra (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Habilita l'arrossegament de la finestra completa:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Habilita animacions de menús:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Desactiva la memòria cau de mapa de bits:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Desactiva la memòria cau fora de pantalla:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Desactiva la memòria cau del glif:", - "FIELD_HEADER_DISABLE_GFX" : "Desactiva l'extensió Graphics Pipeline:", - "FIELD_HEADER_ENABLE_PRINTING" : "Habilita la impressió:", - "FIELD_HEADER_ENABLE_SFTP" : "Activa SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Activa els temes:", - "FIELD_HEADER_ENABLE_TOUCH" : "Activa el multi-touch:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Habilita el fons de pantalla:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Force lossless compression:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Domini:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_GATEWAY_PORT" : "Port:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Nom d'usuari:", - "FIELD_HEADER_HEIGHT" : "Alçada:", - "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_IGNORE_CERT" : "Ignora el certificat del servidor:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Programa inicial:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Informació del balanç de càrrega/cookie:", - "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Finals de línia:", - "FIELD_HEADER_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRINTER_NAME" : "Nom de la impressora redirigit:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "BLOB de preconnexió BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "Identificador de font RDP: ", - "FIELD_HEADER_READ_ONLY" : "Només Lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Exclou els esdeveniments tàctils:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", - "FIELD_HEADER_RESIZE_METHOD" : "Mètode de redimensionament:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Paràmetres:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Directori de treball:", - "FIELD_HEADER_REMOTE_APP" : "Programa:", - "FIELD_HEADER_SECURITY" : "Mode de seguretat:", - "FIELD_HEADER_SERVER_LAYOUT" : "Disposició del teclat:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Directori de càrrega per defecte:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Clau d'amfitrió pública (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval de manteniment SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase d'accés:", - "FIELD_HEADER_SFTP_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clau privada:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directori arrel del navegador de fitxers:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", - "FIELD_HEADER_SFTP_USERNAME" : "Nom d'usuari:", - "FIELD_HEADER_STATIC_CHANNELS" : "Noms de canals estàtics:", - "FIELD_HEADER_TIMEZONE" : "Fus horari:", - "FIELD_HEADER_USERNAME" : "Nom d'usuari:", - "FIELD_HEADER_WIDTH" : "Amplada:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP pel paquet WoL: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", - - "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Deixa-ho tal com és", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Color baix (16 bits)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Veritable color (24 bits)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Veritable color (32 bits)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 colors", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Actualizació de pantalla\" canal virtual (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Torna a connectar", - - "FIELD_OPTION_SECURITY_ANY" : "Qualsevol", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", - "FIELD_OPTION_SECURITY_RDP" : "RDP encryption", - "FIELD_OPTION_SECURITY_TLS" : "TLS encryption", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Txec (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danès (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Suís alemany (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Alemany (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Anglès del Regne Unit (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Anglès dels Estats Units (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Espanyol (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latino Americano (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Francès de Bèlgica (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Francès del Canadà (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Francès de Suïssa (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francès (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italià (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonès (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Noruec (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polonès (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguès brasiler (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguès (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Romanès (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Suec (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Q-Turc (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticació", - "SECTION_HEADER_BASIC_PARAMETERS" : "Configuració bàsica", - "SECTION_HEADER_CLIPBOARD" : "Porta-retalls", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirecció del dispositiu", - "SECTION_HEADER_DISPLAY" : "Pantalla", - "SECTION_HEADER_GATEWAY" : "Passarel·la d'escriptori remota", - "SECTION_HEADER_LOAD_BALANCING" : "Balanceig de càrrega", - "SECTION_HEADER_NETWORK" : "Xarxa", - "SECTION_HEADER_PERFORMANCE" : "Rendiment", - "SECTION_HEADER_PRECONNECTION_PDU" : "Pre connexió PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", - "SECTION_HEADER_REMOTEAPP" : "RemoteApp", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "La tecla de retrocés envia:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de colors:", - "FIELD_HEADER_COMMAND" : "Executa l'ordre:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Creeu automàticament la ruta de mecanografia:", - "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des del terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l'enganxament del client:", - "FIELD_HEADER_FONT_NAME" : "Nom del tipus de lletra:", - "FIELD_HEADER_FONT_SIZE" : "Mida de la lletra:", - "FIELD_HEADER_ENABLE_SFTP" : "Activa SFTP:", - "FIELD_HEADER_HOST_KEY" : "Clau d'amfitrió pública (Base64):", - "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_LOCALE" : "Language/Locale ($LANG):", - "FIELD_HEADER_USERNAME" : "Nom d'usuari:", - "FIELD_HEADER_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_PASSPHRASE" : "Frase d'accés:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRIVATE_KEY" : "Clau privada:", - "FIELD_HEADER_SCROLLBACK" : "Mida màxima de desplaçament:", - "FIELD_HEADER_READ_ONLY" : "Només lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Interval de 'keepalive' del servidor:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directori arrel del navegador de fitxers:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", - "FIELD_HEADER_TERMINAL_TYPE" : "Tipus de terminal:", - "FIELD_HEADER_TIMEZONE" : "Zona horària ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta Typescript:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", - - - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negre sobre blanc", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negre", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verd sobre negre", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sobre negre", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticació", - "SECTION_HEADER_BEHAVIOR" : "Comportament del terminal", - "SECTION_HEADER_CLIPBOARD" : "Porta-retalls", - "SECTION_HEADER_DISPLAY" : "Pantalla", - "SECTION_HEADER_NETWORK" : "Xarxa", - "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", - "SECTION_HEADER_SESSION" : "Sessió / Entorn", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Gravació de sessió de text)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Backspace envia tecles:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de colors:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crea automàticament la ruta del typescript:", - "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des del terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l'enganxament del client:", - "FIELD_HEADER_FONT_NAME" : "Nom del tipus de lletra:", - "FIELD_HEADER_FONT_SIZE" : "Mida de la lletra:", - "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expressió regular de fallida d'inici de sessió:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expressió regular d'exit d'inici de sessió:", - "FIELD_HEADER_USERNAME" : "Nom d'usuari:", - "FIELD_HEADER_USERNAME_REGEX" : "Expressió regular del nom d'usuari:", - "FIELD_HEADER_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_PASSWORD_REGEX" : "Expressió regular de contrasenya:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Només lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", - "FIELD_HEADER_SCROLLBACK" : "Mida màxima de desplaçament:", - "FIELD_HEADER_TERMINAL_TYPE" : "Tipus de terminal:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom de Typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta de Typescript:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", - - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negre sobre blanc", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negre", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verd sobre negre", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sobre negre", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticació", - "SECTION_HEADER_BEHAVIOR" : "Comportament del terminal", - "SECTION_HEADER_CLIPBOARD" : "Porta-retalls", - "SECTION_HEADER_DISPLAY" : "Pantalla", - "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Gravació de sessió de text)", - "SECTION_HEADER_NETWORK" : "Xarxa", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Nom del servidor d'àudio:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codificació:", - "FIELD_HEADER_COLOR_DEPTH" : "Profunditat del color:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", - "FIELD_HEADER_CURSOR" : "Cursor:", - "FIELD_HEADER_DEST_HOST" : "Amfitrió de destinació:", - "FIELD_HEADER_DEST_PORT" : "Port de destinació:", - "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des de l'escriptori remot:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l'enganxament del client:", - "FIELD_HEADER_ENABLE_AUDIO" : "Habilita l'àudio:", - "FIELD_HEADER_ENABLE_SFTP" : "Activa SFTP:", - "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_USERNAME" : "Nom d'usuari:", - "FIELD_HEADER_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Només lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Directori de càrrega per defecte:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Clau d'amfitrió pública (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nom de l'amfitrió:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval de keepalive SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase d'accés:", - "FIELD_HEADER_SFTP_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clau privada:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directori arrel del navegador de fitxers:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", - "FIELD_HEADER_SFTP_USERNAME" : "Nom d'usuari:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Canvia components vermells/blaus:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 colors", - "FIELD_OPTION_COLOR_DEPTH_16" : "Color baix (16 bits)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Veritable color (24 bits)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Veritable color (32 bits)", - - "FIELD_OPTION_CURSOR_LOCAL" : "Local", - "FIELD_OPTION_CURSOR_REMOTE" : "Remot", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Àudio", - "SECTION_HEADER_AUTHENTICATION" : "Autenticació", - "SECTION_HEADER_CLIPBOARD" : "Porta-retalls", - "SECTION_HEADER_DISPLAY" : "Pantalla", - "SECTION_HEADER_NETWORK" : "Xarxa", - "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", - "SECTION_HEADER_REPEATER" : "Repetidor VNC", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Configuració" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "FILENAME_HISTORY_CSV" : "history.csv", - - "HELP_CONNECTION_HISTORY" : "Aquí es llisten els registres d'historial de connexions anteriors i es poden ordenar fent clic a les capçaleres de columna. Per cercar registres específics, introduïu una cadena de filtre i feu clic a \"Cerca\". Només s'enumeraran els registres que coincideixin amb la cadena de filtre proporcionada.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "No hi ha registres coincidents", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de la connexió", - "TABLE_HEADER_SESSION_DURATION" : "Durada", - "TABLE_HEADER_SESSION_LOGS" : "Registres", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Amfitrió remot", - "TABLE_HEADER_SESSION_STARTDATE" : "Hora d'inici", - "TABLE_HEADER_SESSION_USERNAME" : "Nom d'usuari", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_NEW_CONNECTION" : "Nova connexió", - "ACTION_NEW_CONNECTION_GROUP" : "Nou grup", - "ACTION_NEW_SHARING_PROFILE" : "Nou perfil per compartir", - - "HELP_CONNECTIONS" : "Feu clic o toqueu una connexió per gestionar aquesta connexió. Segons el vostre nivell d'accés, es poden afegir i suprimir connexions i es poden canviar les seves propietats (protocol, nom d'amfitrió, port, etc.).", - - "SECTION_HEADER_CONNECTIONS" : "Connexions" - - }, - - "SETTINGS_PREFERENCES" : { - - "FIELD_HEADER_LANGUAGE" : "Llenguatge de visualització:", - "FIELD_HEADER_PASSWORD" : "Contrasenya:", - "FIELD_HEADER_PASSWORD_OLD" : "Contrasenya actual:", - "FIELD_HEADER_PASSWORD_NEW" : "Nova contrasenya:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirmar nova contrasenya:", - "FIELD_HEADER_TIMEZONE" : "Fus horari:", - "FIELD_HEADER_USERNAME" : "Nom d'usuari:", - - "HELP_DEFAULT_INPUT_METHOD" : "El mètode d'introducció predeterminat determina com Guacamole rep els esdeveniments del teclat. Canviar aquesta configuració pot ser necessària quan s'utilitza un dispositiu mòbil o quan s'escriu a través d'un IME. Aquesta configuració es pot substituir de manera per connexió dins del menú Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "El mode d'emulació predeterminat del ratolí determina com es comportarà el ratolí remot en les noves connexions pel que fa als tocs. Aquesta configuració es pot substituir de manera per connexió al menú Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Les opcions que apareixen a continuació estan relacionades amb la configuració regional de l'usuari i tindran un impacte sobre la visualització de diverses parts de la interfície.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Si voleu canviar la vostra contrasenya, introduïu la vostra contrasenya actual i la contrasenya desitjada a continuació, i feu clic a \"Actualitza la contrasenya\". El canvi entrarà en vigor immediatament.", - - "INFO_PASSWORD_CHANGED" : "S'ha canviat la contrasenya.", - "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "S'han guardat els canvis a la configuració.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Mètode d'introducció per defecte", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Mode d'emulació del ratolí predeterminat", - "SECTION_HEADER_UPDATE_PASSWORD" : "Canvi de contrasenya" - - }, - - "SETTINGS_USERS" : { - - "ACTION_NEW_USER" : "Nou usuari", - - "HELP_USERS" : "Feu clic o toqueu un usuari per gestionar aquest usuari. En funció del vostre nivell d'accés, es poden afegir i eliminar els usuaris i es poden canviar les seves contrasenyes.", - - "SECTION_HEADER_USERS" : "Usuaris", - - "TABLE_HEADER_FULL_NAME" : "Nom complet", - "TABLE_HEADER_LAST_ACTIVE" : "Darrer actiu", - "TABLE_HEADER_ORGANIZATION" : "Organització", - "TABLE_HEADER_USERNAME" : "Nom d'usuari" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_NEW_USER_GROUP" : "Grup nou", - - "HELP_USER_GROUPS" : "Feu clic o toqueu un grup següent per gestionar aquest grup. En funció del vostre nivell d'accés, es poden afegir i suprimir grups i es poden canviar els usuaris i grups.", - - "SECTION_HEADER_USER_GROUPS" : "Grups", - - "TABLE_HEADER_USER_GROUP_NAME" : "Nom del grup" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_DELETE" : "Tanca sessions", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Tancar sessions", - - "HELP_SESSIONS" : "Aquesta pàgina s'omple amb les connexions actualment actives. Les connexions enumerades i la possibilitat de tancar-les depèn del nivell d'accés. Si voleu tancar una o més sessions, marqueu la casella que hi ha al costat de les sessions i feu clic a \"Tanca sessions\". Tancant una sessió es desconnectarà immediatament l'usuari de la connexió associada.", - - "INFO_NO_SESSIONS" : "No hi ha sessions actives", - - "SECTION_HEADER_SESSIONS" : "Sessions actives", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de la connexió", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Amfitrió remot", - "TABLE_HEADER_SESSION_STARTDATE" : "Actiu des de", - "TABLE_HEADER_SESSION_USERNAME" : "Nom d'usuari", - - "TEXT_CONFIRM_DELETE" : "Esteu segur que voleu matar totes les sessions seleccionades? Els usuaris que utilitzin aquestes sessions seran desconnectats immediatament." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Correu electrònic:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Nom complet:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organització:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Rol:" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/cs.json b/guacamole/src/main/frontend/src/translations/cs.json deleted file mode 100644 index a465f71b51..0000000000 --- a/guacamole/src/main/frontend/src/translations/cs.json +++ /dev/null @@ -1,1142 +0,0 @@ -{ - - "NAME" : "Čeština", - - "APP" : { - - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Zrušit", - "ACTION_CLEAR" : "Vyčistit", - "ACTION_CLONE" : "Klonovat", - "ACTION_CONTINUE" : "Pokračovat", - "ACTION_DELETE" : "Smazat", - "ACTION_DELETE_SESSIONS" : "Ukončit sezení", - "ACTION_DOWNLOAD" : "Stáhnout", - "ACTION_IMPORT" : "Importovat", - "ACTION_LOGIN" : "Přihlásit", - "ACTION_LOGIN_AGAIN" : "Znovu přihlásit", - "ACTION_LOGOUT" : "Odhlásit", - "ACTION_MANAGE_CONNECTIONS" : "Připojení", - "ACTION_MANAGE_PREFERENCES" : "Vlastnosti", - "ACTION_MANAGE_SETTINGS" : "Nastavení", - "ACTION_MANAGE_SESSIONS" : "Aktivní sezení", - "ACTION_MANAGE_USERS" : "Uživatelé", - "ACTION_MANAGE_USER_GROUPS" : "Skupiny", - "ACTION_NAVIGATE_BACK" : "Zpět", - "ACTION_NAVIGATE_HOME" : "Domů", - "ACTION_PAUSE" : "Pozastavit", - "ACTION_PLAY" : "Přehrát", - "ACTION_SAVE" : "Uložit", - "ACTION_SEARCH" : "Hledat", - "ACTION_SHARE" : "Sdílet", - "ACTION_UPDATE_PASSWORD" : "Změnit heslo", - "ACTION_VIEW_HISTORY" : "Historie", - "ACTION_VIEW_RECORDING" : "Zobrazit", - - "DIALOG_HEADER_ERROR" : "Chyba", - - "ERROR_PAGE_UNAVAILABLE" : "Došlo k chybě a tuto akci nelze dokončit. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", - "ERROR_PASSWORD_BLANK" : "Heslo nesmí být prázdné.", - "ERROR_PASSWORD_MISMATCH" : "Hesla nesouhlasí.", - "ERROR_SINGLE_FILE_ONLY" : "Nahrajte prosím vždy pouze jeden soubor", - - "FIELD_HEADER_PASSWORD" : "Heslo:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Heslo znovu:", - - "FIELD_PLACEHOLDER_FILTER" : "Filtr", - - "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "V současné době používá {USERS} {USERS, plural, one{uživatel} other{uživatelů}}.", - "INFO_LOGGED_OUT" : "Byli jste odhlášeni.", - - "TEXT_ANONYMOUS_USER" : "Anonymní uživatel", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{sekundu} other{sekund}}} minute{{VALUE, plural, one{minutu} other{minut}}} hour{{VALUE, plural, one{hodinu} other{hodin}}} day{{VALUE, plural, one{den} other{dnů}}} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_CLIENT_MESSAGES" : "Vyčistit", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Vyčistit", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "Odpojit", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Znovu připojit", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_SHOW_CLIPBOARD" : "Kliknutím zobrazíte obsah schránky.", - "ACTION_UPLOAD_FILES" : "Nahrát soubory", - - "DIALOG_HEADER_CONNECTING" : "Připojování", - "DIALOG_HEADER_CONNECTION_ERROR" : "Chyba připojení", - "DIALOG_HEADER_DISCONNECTED" : "Odpojeno", - - "ERROR_CLIENT_201" : "Synchronizační server je zaneprázdněn, zkuste to prosím znovu později.", - "ERROR_CLIENT_202" : "Guacamole server zavřel spojení protože vzdálený počítač příliš dlouho neodpovídal. Zkuste to prosím později, nebo kontaktujte správce.", - "ERROR_CLIENT_203" : "Chyba vzdáleného serveru, spojení bylo uzavřeno. Zkuste to prosím později, nebo kontaktujte správce.", - "ERROR_CLIENT_207" : "Server vzdálené plochy je aktuálně nedostupný. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", - "ERROR_CLIENT_208" : "Server vzdálené plochy není aktuálně k dispozici. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", - "ERROR_CLIENT_209" : "Server vzdálené plochy ukončil připojení, protože je v konfliktu s jiným připojením. Prosím zkuste to znovu později.", - "ERROR_CLIENT_20A" : "Server vzdálené plochy ukončil připojení, protože se zdálo být neaktivní. Pokud je to nežádoucí nebo neočekávané, informujte prosím správce systému nebo zkontrolujte nastavení systému.", - "ERROR_CLIENT_20B" : "Server vzdálené plochy násilně uzavřel připojení. Pokud je to nežádoucí nebo neočekávané, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", - "ERROR_CLIENT_301" : "Přihlášení selhalo. Připojte se a zkuste to znovu.", - "ERROR_CLIENT_303" : "Server vzdálené plochy odepřel přístup k tomuto připojení. Pokud potřebujete přístup, požádejte správce systému, aby vám umožnil přístup, nebo zkontrolujte nastavení systému.", - "ERROR_CLIENT_308" : "Server Guacamole ukončil spojení, protože z vašeho prohlížeče nebyla dostatečně dlouhá odezva, aby se zdálo, že je stále připojen. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál, nebo jednoduše velmi pomalá síťová rychlost. Zkontrolujte síť a zkuste to znovu.", - "ERROR_CLIENT_31D" : "Server Guacamole odepřel přístup k tomuto připojení, protože jste vyčerpali limit pro vícenásobné připojení tímto uživatelem. Zavřete jedno nebo více připojení a zkuste to znovu.", - "ERROR_CLIENT_DEFAULT" : "V rámci serveru Guacamole došlo k interní chybě a připojení bylo ukončeno. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", - - "ERROR_TUNNEL_201" : "Server Guacamole odmítl tento pokus o připojení, protože existuje příliš mnoho aktivních připojení. Počkejte prosím několik minut a zkuste to znovu.", - "ERROR_TUNNEL_202" : "Připojení bylo uzavřeno, protože serveru trvalo příliš dlouho, než odpověděl. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál nebo pomalé připojení k síti. Zkontrolujte síťové připojení a zkuste to znovu nebo se obraťte na správce systému.", - "ERROR_TUNNEL_203" : "Server zjistil chybu a připojení ukončil. Zkuste to prosím znovu nebo se obraťte na správce systému.", - "ERROR_TUNNEL_204" : "Požadované připojení neexistuje. Zkontrolujte název připojení a zkuste to znovu.", - "ERROR_TUNNEL_205" : "Toto připojení je právě používáno a vícenásobný přístup k tomuto připojení není povolen. Prosím zkuste to znovu později.", - "ERROR_TUNNEL_207" : "Server Guacamole není v současné době dostupný. Zkontrolujte síť a zkuste to znovu", - "ERROR_TUNNEL_208" : "Server Guacamole nepřijímá připojení. Zkontrolujte síť a zkuste to znovu.", - "ERROR_TUNNEL_301" : "Nemáte oprávnění k přístupu k tomuto připojení, protože nejste přihlášeni. Přihlaste se a zkuste to znovu.", - "ERROR_TUNNEL_303" : "Nemáte oprávnění k přístupu k tomuto připojení. Pokud potřebujete přístup, požádejte správce systému, aby vás přidal do seznamu povolených uživatelů nebo zkontrolujte nastavení systému.", - "ERROR_TUNNEL_308" : "Server Guacamole ukončil spojení, protože z vašeho prohlížeče nebyla dostatečně dlouhá odezva, aby se zdálo, že je stále připojen. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál, nebo jednoduše velmi pomalá síťová rychlost. Zkontrolujte síť a zkuste to znovu.", - "ERROR_TUNNEL_31D" : "Server Guacamole odepřel přístup k tomuto připojení, protože jste vyčerpali limit pro vícenásobné připojení tímto uživatelem. Zavřete jedno nebo více připojení a zkuste to znovu.", - "ERROR_TUNNEL_DEFAULT" : "V rámci serveru Guacamole došlo k interní chybě a připojení bylo ukončeno. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", - - "ERROR_UPLOAD_100" : "Přenos souborů není podporován nebo není povolen. Obraťte se na správce systému nebo zkontrolujte systémové protokoly.", - "ERROR_UPLOAD_201" : "V současné době se přenáší příliš mnoho souborů. Počkejte prosím na dokončení probíhajících přenosů a akci opakujte.", - "ERROR_UPLOAD_202" : "Soubor nelze přenést, protože serveru vzdálené plochy trvá příliš dlouho, než odpoví. Zkuste to prosím znovu nebo se obraťte na správce systému.", - "ERROR_UPLOAD_203" : "Server vzdálené plochy zaznamenal chybu během přenosu. Zkuste to prosím znovu nebo se obraťte na správce systému.", - "ERROR_UPLOAD_204" : "Cíl pro přenos souborů neexistuje. Zkontrolujte, zda cíl existuje a zkuste to znovu.", - "ERROR_UPLOAD_205" : "Cíl přenosu souborů je aktuálně uzamčen. Počkejte prosím na dokončení probíhajících úkolů a zkuste to znovu.", - "ERROR_UPLOAD_301" : "Nemáte oprávnění nahrát tento soubor, protože nejste přihlášeni. Přihlaste se a zkuste to znovu.", - "ERROR_UPLOAD_303" : "Nemáte oprávnění k nahrání tohoto souboru. Pokud potřebujete přístup, zkontrolujte nastavení systému nebo se obraťte na správce systému.", - "ERROR_UPLOAD_308" : "Přenos souboru se zastavil. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál, nebo jednoduše velmi pomalé připojení k síťi. Zkontrolujte síť a zkuste to znovu.", - "ERROR_UPLOAD_31D" : "V současné době se přenáší příliš mnoho souborů. Počkejte prosím na dokončení probíhajících přenosů a akci opakujte.", - "ERROR_UPLOAD_DEFAULT" : "V rámci serveru Guacamole došlo k interní chybě a připojení bylo ukončeno. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Zde se zobrazí text zkopírovaný / oříznutý v Guacamole. Změny níže uvedeného textu ovlivní vzdálenou schránku.", - "HELP_INPUT_METHOD_NONE" : "Není použita žádná metoda vstupu. Vstup z klávesnice je přijímán z připojené fyzické klávesnice.", - "HELP_INPUT_METHOD_OSK" : "Zobrazte a přijměte vstup z vestavěné klávesnice Guacamole na obrazovce. Klávesnice na obrazovce umožňuje zadávat kombinace kláves, které jinak mohou být nemožné (například Ctrl-Alt-Del).", - "HELP_INPUT_METHOD_TEXT" : "Povolit psaní textu a emulovat události klávesnice na základě zadaného textu. To je nezbytné pro zařízení, jako jsou mobilní telefony, které nemají fyzickou klávesnici.", - "HELP_MOUSE_MODE" : "Určuje, jak se bude vzdálená myš chovat s ohledem na dotyky.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Tap to click. Kliknutí nastane v místě dotyku.", - "HELP_MOUSE_MODE_RELATIVE" : "Přetažením myši posuňte ukazatel myši a klepněte na tlačítko. Kliknutí nastane v místě ukazatele.", - "HELP_SHARE_LINK" : "Aktuální připojení je sdíleno a může k němu přistupovat kdokoli s následujícím {LINKS, plural, one{odkazem} other{odkazy}}:", - - "INFO_ANONYMOUS_USER_COUNT" : "Anonymní{COUNT, plural, one{} other{ (#)}}", - "INFO_CONNECTION_SHARED" : "Toto připojení je nyní sdíleno.", - "INFO_NO_FILE_TRANSFERS" : "Žádné přenosy souborů.", - "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", - - "NAME_INPUT_METHOD_NONE" : "Žádné", - "NAME_INPUT_METHOD_OSK" : "Klávesnice na obrazovce", - "NAME_INPUT_METHOD_TEXT" : "Textový vstup", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Dotyková obrazovka", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIENT_MESSAGES" : "Zprávy", - "SECTION_HEADER_CLIPBOARD" : "Schránka", - "SECTION_HEADER_DEVICES" : "Zařízení", - "SECTION_HEADER_DISPLAY" : "Zobrazení", - "SECTION_HEADER_FILE_TRANSFERS" : "Přenos souborů", - "SECTION_HEADER_INPUT_METHOD" : "Metoda vstupu", - - "SECTION_HEADER_MOUSE_MODE" : "Mód emulace myši", - - "TEXT_ANONYMOUS_USER_JOINED" : "K připojení se připojil anonymní uživatel.", - "TEXT_ANONYMOUS_USER_LEFT" : "Anonymní uživatel opustil připojení.", - "TEXT_ZOOM_AUTO_FIT" : "Automaticky přizpůsobit prohlížeč oknu", - "TEXT_CLIENT_STATUS_IDLE" : "Nečinný", - "TEXT_CLIENT_STATUS_CONNECTING" : "Připojuji ke Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Byl jste odpojen.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "Síťové spojení ke Guacamole serveru se zdá nestabilní.", - "TEXT_CLIENT_STATUS_WAITING" : "Připojen ke Guacamole. Čekání na odpověď...", - "TEXT_USER_JOINED" : "{USERNAME} se připojil ke spojení.", - "TEXT_USER_LEFT" : "{USERNAME} opustil spojení.", - "TEXT_RECONNECT_COUNTDOWN" : "Znovu připojuji {REMAINING} {REMAINING, plural, one{sekundu} other{sekund}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Skrýt", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Zobrazit", - - "FIELD_HEADER_BACKGROUND" : "Pozadí", - "FIELD_HEADER_FOREGROUND" : "Popředí", - - "FIELD_OPTION_CUSTOM" : "Vlastní...", - - "SECTION_HEADER_DETAILS" : "Detaily:" - - }, - - "IMPORT": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_BROWSE" : "Vyhledejte soubor", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", - "ACTION_VIEW_FORMAT_HELP" : "Zobrazit tipy formátů", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_IMPORT_CONNECTIONS" : "Importovat připojení", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - "DIALOG_HEADER_SUCCESS" : "Úspěch", - - "ERROR_AMBIGUOUS_CSV_HEADER" : "Nejednoznačné záhlaví CSV \"{HEADER}\", může být buď atribut nebo parametr připojení", - "ERROR_AMBIGUOUS_PARENT_GROUP" : "Skupina a parentIdentifier nesmí být zadány současně", - "ERROR_ARRAY_REQUIRED" : "Zadaný soubor musí obsahovat seznam připojení", - "ERROR_DETECTED_INVALID_TYPE" : "Nepodporovaný typ souboru. Ujistěte se, že je soubor platný CSV, JSON nebo YAML.", - "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "Duplicitní připojení \"{NAME}\" v \"{PATH}\" v souboru importu", - "ERROR_DUPLICATE_CSV_HEADER" : "Duplicitní záhlaví CSV: {HEADER}", - "ERROR_EMPTY_FILE" : "Zadaný soubor je prázdný", - "ERROR_INVALID_CSV_HEADER" : "Neplatné záhlaví CSV \"{HEADER}\" není atribut ani parametr", - "ERROR_INVALID_MIME_TYPE" : "Nepodporovaný typ souboru: \"{TYPE}\"", - "ERROR_INVALID_GROUP" : "Nebyla nalezena žádná skupina odpovídající \"{GROUP}\"", - "ERROR_INVALID_GROUP_IDENTIFIER" : "Nebyla nalezena žádná skupina připojení s identifikátorem \"{IDENTIFIER}\"", - "ERROR_INVALID_GROUP_TYPE" : "Neplatná skupina – musí být zadán řetězec.", - "ERROR_INVALID_PROTOCOL" : "Neplatný protokol \"{PROTOCOL}\"", - "ERROR_INVALID_USER_GROUPS_TYPE" : "Neplatné skupiny uživatelů – musí se jednat o pole identifikátorů skupiny uživatelů.", - "ERROR_INVALID_USERS_TYPE" : "Neplatní uživatelé – musí se jednat o pole identifikátorů uživatelů.", - "ERROR_NO_FILE_SUPPLIED" : "Vyberte soubor k importu", - "ERROR_PARSE_FAILURE_CSV" : "Ujistěte se, že je váš soubor platný CSV. Analýza se nezdařila s chybou \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_JSON" : "Ujistěte se, že váš soubor je platný JSON. Analýza se nezdařila s chybou \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_YAML" : "Ujistěte se, že váš soubor je platný YAML. Analýza se nezdařila s chybou \"{ERROR}\". ", - "ERROR_REJECT_UPDATE_CONNECTION" : "Připojení \"{NAME}\" již existuje v \"{PATH}\"", - "ERROR_REQUIRED_NAME_CONNECTION" : "Název připojení je povinný parametr", - "ERROR_REQUIRED_PROTOCOL_CONNECTION" : "Protokol připojení je povinný parametr", - "ERROR_REQUIRED_NAME_FILE" : "V zadaném souboru nebyl nalezen žádný název připojení", - "ERROR_REQUIRED_PROTOCOL_FILE" : "V zadaném souboru nebyl nalezen žádný protokol připojení", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "Nahradit/aktualizovat stávající připojení", - "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "Obnovit oprávnění", - - "HELP_CSV_DESCRIPTION" : "Soubor CSV pro import připojení má jeden záznam připojení na řádek. Každý sloupec bude specifikovat pole připojení. Minimálně musí být specifikován název připojení a protokol.", - "HELP_CSV_EXAMPLE" : "name,protocol,username,password,hostname,group,users,groups,guacd-encryption (attribute)\nprip1,vnc,alice,heslo1,prip1.web.com,ROOT,guac uživatel 1;guac uživatel 2,Uživatelé Připojení 1,none\nprip2,rdp,bob,heslo2,prip2.web.com,ROOT/Nadřazená skupina,guac uživatel 1,,ssl\nprip3,ssh,karolina,heslo3,prip3.web.com,ROOT/Nadřazená skupina/Podřízená skupina,guac uživatel 2;guac uživatel 3,,\nprip4,kubernetes,,,,,,,", - "HELP_CSV_MORE_DETAILS" : "V záhlaví CSV každého řádku je uvedeno pole připojení. ID skupiny připojení, do které má být připojení importováno, lze přímo zadat pomocí parametru \"parentIdentifier\" nebo lze cestu k nadřazené skupině zadat pomocí parametru \"group\", jak je uvedeno níže. Ve většině případů by mezi poli neměl být žádný konflikt, ale v případě potřeby lze pro jednoznačnost přidat příponu \" (attribute)\" nebo \" (parameter)\". Seznamy identifikátorů uživatelů nebo skupin uživatelů musí být odděleny středníkem.¹", - "HELP_FILE_TYPE_DESCRIPTION" : "Pro import připojení jsou podporovány tři typy souborů: CSV, JSON a YAML. Pro každý typ souboru mohou být zadána stejná data. Musí obsahovat název připojení a protokol. Volitelně lze také zadat umístění skupiny připojení, seznam uživatelů a/nebo skupiny uživatelů pro udělení přístupu, parametry připojení nebo protokoly připojení. Všichni uživatelé nebo skupiny uživatelů, kteří v aktuálním zdroji dat neexistují, budou automaticky vytvořeni. Upozorňujeme, že žádná existující oprávnění připojení nebudou odebrána pro aktualizovaná připojení, pokud není zaškrtnuto políčko \"Obnovit oprávnění\".", - "HELP_FILE_TYPE_HEADER" : "Typy souborů", - "HELP_JSON_DESCRIPTION" : "Soubor JSON pro import připojení je seznam objektů připojení. V každém objektu připojení musí být uvedeno minimálně jméno připojení a protokol.", - "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"prip1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"username\": \"alice\", \"password\": \"heslo1\", \"hostname\": \"prip1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac uživatel 1\", \"guac uživatel 2\" ],\n \"groups\": [ \"Uživatelé Připojení 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"prip2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"username\": \"bob\", \"password\": \"heslo2\", \"hostname\": \"prip2.web.com\" \\},\n \"group\": \"ROOT/Nadřazená skupina\",\n \"users\": [ \"guac uživatel 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"prip3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"username\": \"karolina\", \"password\": \"heslo3\", \"hostname\": \"prip3.web.com\" \\},\n \"group\": \"ROOT/Nadřazená skupina/Podřízená skupina\",\n \"users\": [ \"guac uživatel 2\", \"guac uživatel 3\" ]\n \\},\n \\{\n \"name\": \"prip4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", - "HELP_JSON_MORE_DETAILS" : "ID skupiny připojení, do které má být připojení importováno, lze přímo zadat pomocí pole \"parentIdentifier\" nebo lze cestu k nadřazené skupině zadat pomocí pole \"group\", jak je uvedeno níže. Pro každé připojení lze zadat pole identifikátorů uživatelů a skupin uživatelů, kterým chcete udělit přístup.", - "HELP_EXISTING_CONNECTION_MODE" : "Zcela nahradit/aktualizovat existující připojení, pokud jejich názvy a nadřazené skupiny připojení odpovídají hodnotám v poskytnutém souboru. Pokud není zaškrtnuto, pokus o import připojení se stejným názvem a nadřazenou skupinou připojení jako existující připojení bude považován za chybu.", - "HELP_EXISTING_PERMISSION_MODE" : "Úplně resetujte oprávnění udělená pro všechna připojení v poskytnutém souboru za oprávnění určená v tomto souboru. Pokud nejsou zadána žádná oprávnění, všechna příslušná oprávnění k připojení budou odvolána. Pokud není zaškrtnuto, stávající oprávnění zůstanou zachována a všechna oprávnění uvedená v souboru budou přidána.", - "HELP_SEMICOLON_FOOTNOTE" : "Pokud jsou přítomny středníky, mohou být escapovány zpětným lomítkem, např. \"první\\\\;poslední\"", - "HELP_UPLOAD_DROP_TITLE" : "Sem přetáhněte soubor", - "HELP_UPLOAD_FILE_TYPES" : "CSV, JSON, nebo YAML", - "HELP_YAML_DESCRIPTION" : "Soubor YAML pro import připojení je seznam objektů připojení se zcela stejnou strukturou jako formát JSON.", - "HELP_YAML_EXAMPLE" : "---\n - name: prip1\n protocol: vnc\n parameters:\n username: alice\n password: heslo1\n hostname: prip1.web.com\n group: ROOT\n users:\n - guac uživatel 1\n - guac uživatel 2\n groups:\n - Uživatelé Připojení 1\n attributes:\n guacd-encryption: none\n - name: prip2\n protocol: rdp\n parameters:\n username: bob\n password: heslo2\n hostname: prip2.web.com\n group: ROOT/Nadřazená skupina\n users:\n - guac uživatel 1\n attributes:\n guacd-encryption: none\n - name: prip3\n protocol: ssh\n parameters:\n username: karolina\n password: heslo3\n hostname: prip3.web.com\n group: ROOT/Nadřazená skupina/Podřízená skupina\n users:\n - guac uživatel 2\n - guac uživatel 3\n - name: prip4\n protocol: kubernetes", - - "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} {NUMBER, plural, one{připojení} other{připojení}} úspěšně importováno.", - - "SECTION_HEADER_CONNECTION_IMPORT" : "Import připojení", - "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "Formát souboru importu připojení", - "SECTION_HEADER_CSV" : "Formát CSV", - "SECTION_HEADER_JSON" : "Formát JSON", - "SECTION_HEADER_YAML" : "Formát YAML", - - "TABLE_HEADER_ERRORS" : "Chyby", - "TABLE_HEADER_GROUP" : "Skupina", - "TABLE_HEADER_NAME" : "Jméno", - "TABLE_HEADER_PROTOCOL" : "Protokol", - "TABLE_HEADER_ROW_NUMBER" : "Řádek #" - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Výchozí (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Klikněte pro zobrazní hesla", - "HELP_HIDE_PASSWORD" : "Klikněte pro skrytí hesla" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Žádná nedávná spojení.", - - "PASSWORD_CHANGED" : "Heslo bylo změněno.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Všechna spojení", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Nedávná spojení" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "Anonymní uživatel" - - }, - - "LOGIN" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Neplatné přihlašovací jméno", - - "FIELD_HEADER_USERNAME" : "Uživatelské jméno", - "FIELD_HEADER_PASSWORD" : "Heslo" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat spojení", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Oblast:", - "FIELD_HEADER_NAME" : "Jméno:", - "FIELD_HEADER_PROTOCOL" : "Protokol:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Nyní aktivní", - "INFO_CONNECTION_NOT_USED" : "Toto spojení ještě nebylo použito.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Upravit spojení", - "SECTION_HEADER_HISTORY" : "Historie využítí", - "SECTION_HEADER_PARAMETERS" : "Parametry", - - "TABLE_HEADER_HISTORY_USERNAME" : "Uživatelské jméno", - "TABLE_HEADER_HISTORY_START" : "Počáteční čas", - "TABLE_HEADER_HISTORY_DURATION" : "Doba", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Vzdálený host", - - "TEXT_CONFIRM_DELETE" : "Spojení nemůže být obnoveno poté, co je smazáno. Opravdu chcete smazat toto spojení?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat skupinu spojení", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Lokace:", - "FIELD_HEADER_NAME" : "Jméno:", - "FIELD_HEADER_TYPE" : "Typ:", - - "NAME_TYPE_BALANCING" : "Vyvažování", - "NAME_TYPE_ORGANIZATIONAL" : "Organizační", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Upravit skupinu spojení", - - "TEXT_CONFIRM_DELETE" : "Skupiny spojení nelze obnovit po jejich odstranění. Opravdu chcete odstranit tuto skupinu připojení?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Odstranit profil sdílení", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Jméno:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Primární spojení:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Upravit sdílený profil", - "SECTION_HEADER_PARAMETERS" : "Parametry", - - "TEXT_CONFIRM_DELETE" : "Po smazání nelze obnovit profily sdílení. Opravdu chcete smazat tento profil sdílení?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat uživatele", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Spravovat systém:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Změnit vlastní heslo:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Vytvořit nové uživatele:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Vytvořit novou uživatelskou skupinu:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Vytvořit nové spojení:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Vytvořit nové skupiny připojení:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Vytvořit nový sdílený profil:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Tento uživatel momentálně nepatří do žádné skupiny. Rozbalte tuto sekci, abyste mohli přidát skupiny.", - - "INFO_READ_ONLY" : "Omlouváme se, ale tento uživatelský účet nelze upravovat.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "Nejsou k dispozici žádné skupiny.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Všechna připojení", - "SECTION_HEADER_CONNECTIONS" : "Připojení", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Aktuální připojení", - "SECTION_HEADER_EDIT_USER" : "Upravit uživatele", - "SECTION_HEADER_PERMISSIONS" : "Oprávnění", - "SECTION_HEADER_USER_GROUPS" : "Skupiny", - - "TEXT_CONFIRM_DELETE" : "Po odstranění nelze uživatele obnovit. Opravdu chcete tohoto uživatele smazat?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat skupinu", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_NAME" : "Jméno skupiny:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Tato skupina momentálně nepatří do žádné skupiny. Rozbalením této sekce ji přidáte do skupiny.", - "HELP_NO_MEMBER_USER_GROUPS" : "Tato skupina v současné době neobsahuje žádné skupiny. Rozbalením této sekce ji přidáte do skupiny.", - "HELP_NO_MEMBER_USERS" : "Tato skupina v současné době neobsahuje žádné uživatele. Rozbalením této sekce přidáte uživatele.", - - "INFO_READ_ONLY" : "Je nám líto, ale tuto skupinu nelze upravovat.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "Žádní uživatelé nejsou k dispozici.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Upravit skupinu", - "SECTION_HEADER_MEMBER_USERS" : "Členský uživatel", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Členské skupiny", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Rodičovské skupiny", - - "TEXT_CONFIRM_DELETE" : "Skupiny nelze po jejich odstranění obnovit. Chcete opravdu smazat tuto skupinu?" - - }, - - "PLAYER" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", - "ACTION_PLAY" : "@:APP.ACTION_PLAY", - - "INFO_LOADING_RECORDING" : "Vaše nahrávka se nyní načítá. Čekejte prosím...", - "INFO_SEEK_IN_PROGRESS" : "Hledání požadované pozice. Čekejte prosím..." - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Klávesa Zpět odešle:", - "FIELD_HEADER_CA_CERT" : "Certifikát certifikační autority:", - "FIELD_HEADER_CLIENT_CERT" : "Klientský certifikát:", - "FIELD_HEADER_CLIENT_KEY" : "Klientský klíč:", - "FIELD_HEADER_COLOR_SCHEME" : "Barevné schéma:", - "FIELD_HEADER_CONTAINER" : "Jméno kontejneru:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu k záznamu:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automaticky vytvořit cestu ke strojopisu:", - "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování ze vzdáleného terminálu:", - "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", - "FIELD_HEADER_EXEC_COMMAND" : "Příkaz (exec):", - "FIELD_HEADER_FONT_NAME" : "Jméno fontu:", - "FIELD_HEADER_FONT_SIZE" : "Velikost fontu:", - "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorovat serverový certifikát:", - "FIELD_HEADER_NAMESPACE" : "Obor názvů:", - "FIELD_HEADER_POD" : "Jméno podu:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vyloučit myš:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vyloučit grafiku/streamování:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout události kláves:", - "FIELD_HEADER_RECORDING_NAME" : "Jméno záznamu:", - "FIELD_HEADER_RECORDING_PATH" : "Cesta k záznamu:", - "FIELD_HEADER_SCROLLBACK" : "Maximální délka historie:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Jméno strojopisu:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Cesta ke strojopisu:", - "FIELD_HEADER_USE_SSL" : "Použít SSL/TLS", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Zpět (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Smazat (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Černá na bílé", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Šedá na černé", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zelená na černé", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Bílá na černé", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Ověřování", - "SECTION_HEADER_BEHAVIOR" : "Chování terminálu", - "SECTION_HEADER_CLIPBOARD" : "Schránka", - "SECTION_HEADER_CONTAINER" : "Kontejner", - "SECTION_HEADER_DISPLAY" : "Zobrazení", - "SECTION_HEADER_RECORDING" : "Záznam obrazovky", - "SECTION_HEADER_TYPESCRIPT" : "Strojopis (textový záznam sezení)", - "SECTION_HEADER_NETWORK" : "Síť" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Jméno klienta:", - "FIELD_HEADER_COLOR_DEPTH" : "Barevná hloubka:", - "FIELD_HEADER_CONSOLE" : "Konzola pro správu:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Podpora zvuku v konzole:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automaticky vytvořit disk:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu k záznamu:", - "FIELD_HEADER_DISABLE_AUDIO" : "Zakázat zvuk:", - "FIELD_HEADER_DISABLE_AUTH" : "Zakázat ověřování:", - "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování ze vzdálené plochy:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", - "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", - "FIELD_HEADER_DOMAIN" : "Doména:", - "FIELD_HEADER_DPI" : "Rozlišení (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Název jednotky:", - "FIELD_HEADER_DRIVE_PATH" : "Cesta na disku:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Povolit zvukový vstup (mikrofon):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Povolit kompozici pracovní plochy (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Povolit jednotku:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Povolit vyhlazení písma (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Povolit přetažení celého okna:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Povolit animace nabídky:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Zakázat ukládání do mezipaměti bitmap:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Zakázat ukládání do mezipaměti mimo obrazovku:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Zakázat ukládání do mezipaměti glyfů:", - "FIELD_HEADER_DISABLE_GFX" : "Zakázat rozšíření Graphics Pipeline:", - "FIELD_HEADER_ENABLE_PRINTING" : "Povolit tisk:", - "FIELD_HEADER_ENABLE_SFTP" : "Povolit SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Povolit motivy:", - "FIELD_HEADER_ENABLE_TOUCH" : "Povolit vícedotykové ovládání:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Povolit tapetu:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Vynutit bezeztrátovou kompresi:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Doména:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Heslo:", - "FIELD_HEADER_GATEWAY_PORT" : "Port:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Uživatelské jméno:", - "FIELD_HEADER_HEIGHT" : "Výška:", - "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorovat serverový certifikát:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Úvodní program:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Vyvážení zátěže info/cookie:", - "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Konce řádků:", - "FIELD_HEADER_PASSWORD" : "Heslo:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRINTER_NAME" : "Název přesměrované tiskárny:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "Zdrojové ID RDP:", - "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vyloučit myš:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vyloučit grafiku/strímování:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Vyloučit dotykové události:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout klíčové události:", - "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", - "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", - "FIELD_HEADER_RESIZE_METHOD" : "Metoda změny velikosti:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parametry:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Pracovní adresář:", - "FIELD_HEADER_REMOTE_APP" : "Program:", - "FIELD_HEADER_SECURITY" : "Bezpečnostní mód:", - "FIELD_HEADER_SERVER_LAYOUT" : "Rozložení klávesnice:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Výchozí složka pro uložení záznamu:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Veřejný klíč hosta (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval udržování SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Přístupová fráze:", - "FIELD_HEADER_SFTP_PASSWORD" : "Heslo:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privátní klíč:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Souborový prohlížeč kořenové složky:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", - "FIELD_HEADER_SFTP_USERNAME" : "Uživatelské jméno:", - "FIELD_HEADER_STATIC_CHANNELS" : "Názvy statických kanálů:", - "FIELD_HEADER_TIMEZONE" : "Časová zóna:", - "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", - "FIELD_HEADER_WIDTH" : "Šířka:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", - - "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Zachovat tak, jak je", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Nízké barvy (16-bitů)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Opravdové barvy (24-bitů)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Opravdové barvy (32-bitů)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 barev", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Aktualizace zobrazení\" virtuální kanál (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Znovu připojit", - - "FIELD_OPTION_SECURITY_ANY" : "Jakýkoliv", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Ověřování na úrovni sítě)", - "FIELD_OPTION_SECURITY_RDP" : "Šifrování RDP", - "FIELD_OPTION_SECURITY_TLS" : "Šifrování TLS", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Čeština (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Dánština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Švícarská Němčina (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Němčina (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK Angličtina (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US Angličtina (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Španělština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Standardní Angličtina (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgická Francouzština (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Kanadská francouzština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Švícarská Francouzština (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francouzština (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Maďarština (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugalská Brazilština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugalština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Rumunština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Švédština (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turečtina (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Ověřování", - "SECTION_HEADER_BASIC_PARAMETERS" : "Základní nastavení", - "SECTION_HEADER_CLIPBOARD" : "Schránka", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Přesměrování zařízení", - "SECTION_HEADER_DISPLAY" : "Zobrazení", - "SECTION_HEADER_GATEWAY" : "Brána vzdálené plochy", - "SECTION_HEADER_LOAD_BALANCING" : "Rozložení zátěže", - "SECTION_HEADER_NETWORK" : "Síť", - "SECTION_HEADER_PERFORMANCE" : "Výkon", - "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Záznam obrazovky", - "SECTION_HEADER_REMOTEAPP" : "RemoteApp", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Klávesa Zpět odešle:", - "FIELD_HEADER_COLOR_SCHEME" : "Barva:", - "FIELD_HEADER_COMMAND" : "Provést příkaz:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu pro uložení záznamu:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automaticky vytvořit cestu ke strojopisu:", - "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování ze vzdáleného terminálu:", - "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", - "FIELD_HEADER_FONT_NAME" : "Typ fontu:", - "FIELD_HEADER_FONT_SIZE" : "Velikost písma:", - "FIELD_HEADER_ENABLE_SFTP" : "Povolit SFTP:", - "FIELD_HEADER_HOST_KEY" : "Veřejný klíč hosta (Base64):", - "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_LOCALE" : "Jazyk/Lokalizace ($LANG):", - "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", - "FIELD_HEADER_PASSWORD" : "Heslo:", - "FIELD_HEADER_PASSPHRASE" : "Přístupová fráze:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRIVATE_KEY" : "Privátní klíč:", - "FIELD_HEADER_SCROLLBACK" : "Maximální délka historie:", - "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vynechat myš:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vynechat grafiku/streamování:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout události kláves:", - "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", - "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Serverový keepalive interval:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Souborový prohlížeč kořenové složky:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", - "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminálu:", - "FIELD_HEADER_TIMEZONE" : "Časová zóna ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Jméno strojopisu:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Cesta ke strojopisu:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Zpět (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Smazat (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Černá na bílé", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Šedá na černé", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zelená na černé", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Bílá na černé", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Ověřování", - "SECTION_HEADER_BEHAVIOR" : "Chování terminálu", - "SECTION_HEADER_CLIPBOARD" : "Schránka", - "SECTION_HEADER_DISPLAY" : "Zobrazení", - "SECTION_HEADER_NETWORK" : "Síť", - "SECTION_HEADER_RECORDING" : "Záznam obrazovky", - "SECTION_HEADER_SESSION" : "Sezení / prostředí", - "SECTION_HEADER_TYPESCRIPT" : "Strojopis (textový záznam sezení)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Klávesa Zpět odešle:", - "FIELD_HEADER_COLOR_SCHEME" : "Barevné schéma:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu pro uložení záznamu:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automaticky vytvořit cestu ke strojopisu:", - "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování z terminálu:", - "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", - "FIELD_HEADER_FONT_NAME" : "Jméno fontu:", - "FIELD_HEADER_FONT_SIZE" : "Velikost fontu:", - "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Přihlášení se nezdařilo regulární výraz:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Přihlášení bylo úspěšné regulární výraz:", - "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", - "FIELD_HEADER_USERNAME_REGEX" : "Uživatelské jméno regulární výraz:", - "FIELD_HEADER_PASSWORD" : "Heslo:", - "FIELD_HEADER_PASSWORD_REGEX" : "Heslo regulární výraz:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vyloučit myš:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vyloučit grafiku/streamování:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout klíčové události:", - "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", - "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", - "FIELD_HEADER_SCROLLBACK" : "Maximální délka historie:", - "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminálu:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Jméno strojopisu:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Cesta ke strojopisu:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Zpět (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Smazat (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Černá na bílé", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Šedá na černé", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zelená na černé", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Bílá na černé", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Ověřování", - "SECTION_HEADER_BEHAVIOR" : "Chování terminálu", - "SECTION_HEADER_CLIPBOARD" : "Schránka", - "SECTION_HEADER_DISPLAY" : "Zobrazení", - "SECTION_HEADER_RECORDING" : "Záznam obrazovky", - "SECTION_HEADER_TYPESCRIPT" : "Strojopis (textový záznam sezení)", - "SECTION_HEADER_NETWORK" : "Síť", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Název zvukového serveru:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Kódovávání:", - "FIELD_HEADER_COLOR_DEPTH" : "Hloubka barev:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu pro uložení záznamu:", - "FIELD_HEADER_CURSOR" : "Kurzor:", - "FIELD_HEADER_DEST_HOST" : "Cílový host:", - "FIELD_HEADER_DEST_PORT" : "Vzdálený port:", - "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování ze vzdálené plochy:", - "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", - "FIELD_HEADER_ENABLE_AUDIO" : "Zapnout audio:", - "FIELD_HEADER_ENABLE_SFTP" : "Povolit SFTP:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Vynutit bezeztrátovou kompresi:", - "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", - "FIELD_HEADER_PASSWORD" : "Heslo:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Pouze čtení:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vynechat myš:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vynechat grafiku/stremování:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout události kláves:", - "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", - "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Výchozí složka pro uložení záznamu:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Veřejný klíč hosta (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Jméno hostitele:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval udržování SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Přístupová fráze:", - "FIELD_HEADER_SFTP_PASSWORD" : "Heslo:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privátní klíč:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Souborový prohlížeč kořenové složky:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", - "FIELD_HEADER_SFTP_USERNAME" : "Uživatelské jméno:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Přehodit červené/modré komponenty:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 barev", - "FIELD_OPTION_COLOR_DEPTH_16" : "Nízké barvy (16-bitů)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Opravdové barvy (24-bitů)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Opravdové barvy (32-bitů)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Místní", - "FIELD_OPTION_CURSOR_REMOTE" : "Vzdálený", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Zvuk", - "SECTION_HEADER_AUTHENTICATION" : "Ověřování", - "SECTION_HEADER_CLIPBOARD" : "Schránka", - "SECTION_HEADER_DISPLAY" : "Zobrazení", - "SECTION_HEADER_NETWORK" : "Síť", - "SECTION_HEADER_RECORDING" : "Záznam obrazovky", - "SECTION_HEADER_REPEATER" : "VNC opakovač", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Nastavení" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "Zde jsou uvedeny záznamy o historii připojení a lze je třídit kliknutím na záhlaví sloupců. Chcete-li vyhledat konkrétní záznamy, zadejte řetězec filtrů a klikněte na tlačítko Hledat. Zobrazí se pouze záznamy, které odpovídají zadanému řetězci filtrů.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Žádné shodné záznamy", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Název připojení", - "TABLE_HEADER_SESSION_DURATION" : "Doba trvání", - "TABLE_HEADER_SESSION_LOGS" : "Protokoly", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Vzdálený host", - "TABLE_HEADER_SESSION_STARTDATE" : "Doba spuštění", - "TABLE_HEADER_SESSION_USERNAME" : "Uživatelské jméno", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_NEW_CONNECTION" : "Nové připojení", - "ACTION_NEW_CONNECTION_GROUP" : "Nový skupina", - "ACTION_NEW_SHARING_PROFILE" : "Nový sdílený profil", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Toto připojení můžete spravovat klepnutím nebo klepnutím na níže uvedené připojení. V závislosti na vaší úrovni přístupu lze přidávat a mazat připojení a měnit jejich vlastnosti (protokol, název hostitele, port atd.).", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Připojení" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Jazyk zobrazení:", - "FIELD_HEADER_PASSWORD" : "Heslo:", - "FIELD_HEADER_PASSWORD_OLD" : "Aktuální heslo:", - "FIELD_HEADER_PASSWORD_NEW" : "Nové heslo:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Potvrďte nové heslo:", - "FIELD_HEADER_TIMEZONE" : "Časové pásmo:", - "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", - - "HELP_DEFAULT_INPUT_METHOD" : "Výchozí metoda vstupu určuje, jak Guacamole přijímá události klávesnice. Změna tohoto nastavení může být nezbytná při používání mobilního zařízení nebo při psaní přes IME. Toto nastavení může být přepsáno na základě připojení v rámci nabídky Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "Výchozí režim emulace myši určuje, jak se bude vzdálená myš chovat v nových spojeních s ohledem na dotyky. Toto nastavení může být přepsáno na základě připojení v rámci nabídky Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Níže uvedené možnosti se vztahují k místu uživatele a ovlivní způsob zobrazení různých částí rozhraní.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Pokud chcete změnit heslo, zadejte své aktuální heslo a níže požadované nové heslo a klikněte na tlačítko „Aktualizovat heslo“. Změna se projeví okamžitě.", - - "INFO_PASSWORD_CHANGED" : "Heslo bylo změněno.", - "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "Uživatelská nastavení uložena.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Výchozí metoda vstupu", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Výchozí mód emulace myši", - "SECTION_HEADER_UPDATE_PASSWORD" : "Změnit heslo" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Nový uživatel", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Chcete-li spravovat daného uživatele, klepněte na něj nebo klepněte na něj. V závislosti na úrovni přístupu mohou být uživatelé přidáváni a mazáni a jejich hesla mohou být změněna.", - - "SECTION_HEADER_USERS" : "Uživatel", - - "TABLE_HEADER_FULL_NAME" : "Celé jméno", - "TABLE_HEADER_LAST_ACTIVE" : "Naposledy aktivní", - "TABLE_HEADER_ORGANIZATION" : "Organizace", - "TABLE_HEADER_USERNAME" : "Uživatelské jméno" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "Nová skupina", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Chcete-li tuto skupinu spravovat, klepněte na ni nebo klepněte na ni. V závislosti na úrovni přístupu lze skupiny přidávat a mazat a jejich členské uživatele a skupiny lze měnit.", - - "SECTION_HEADER_USER_GROUPS" : "Skupiny", - - "TABLE_HEADER_USER_GROUP_NAME" : "Jméno skupiny" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Ukončit sezení", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Ukončit sezení", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Tato stránka bude naplněna aktuálně aktivními připojeními. Uvedená připojení a schopnost zabít tato připojení závisí na úrovni přístupu. Pokud chcete zabít jednu nebo více relací, zaškrtněte políčko vedle těchto relací a klepněte na tlačítko \"Zabít relace\". Zabití relace okamžitě odpojí uživatele od přidruženého připojení.", - - "INFO_NO_SESSIONS" : "Žádné aktivní sezení", - - "SECTION_HEADER_SESSIONS" : "Aktivní sezení", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Název připojení", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Vzdálený host", - "TABLE_HEADER_SESSION_STARTDATE" : "Aktivní od", - "TABLE_HEADER_SESSION_USERNAME" : "Uživatelské jméno", - - "TEXT_CONFIRM_DELETE" : "Jste si jisti, že chcete ukončit vybrané připojení? Uživatelé využívající toto připojení budou okamžitě odpojeni." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Emailová adresa:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Celé jméno:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organizace:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Role:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/de.json b/guacamole/src/main/frontend/src/translations/de.json deleted file mode 100644 index 2047bb7aa1..0000000000 --- a/guacamole/src/main/frontend/src/translations/de.json +++ /dev/null @@ -1,1133 +0,0 @@ -{ - - "NAME" : "Deutsch", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Abbruch", - "ACTION_CLEAR" : "Bereinigen", - "ACTION_CLONE" : "Kopieren", - "ACTION_CONTINUE" : "Weiter", - "ACTION_DELETE" : "Löschen", - "ACTION_DELETE_SESSIONS" : "Sitzung beenden", - "ACTION_DOWNLOAD" : "Download", - "ACTION_IMPORT" : "Import", - "ACTION_LOGIN" : "Anmelden", - "ACTION_LOGIN_AGAIN" : "Neuanmelden", - "ACTION_LOGOUT" : "Abmelden", - "ACTION_MANAGE_CONNECTIONS" : "Verbindungen", - "ACTION_MANAGE_PREFERENCES" : "Einstellungen", - "ACTION_MANAGE_SETTINGS" : "Einstellungen", - "ACTION_MANAGE_SESSIONS" : "Aktive Sitzungen", - "ACTION_MANAGE_USERS" : "Benutzer", - "ACTION_MANAGE_USER_GROUPS" : "Gruppen", - "ACTION_NAVIGATE_BACK" : "Zurück", - "ACTION_NAVIGATE_HOME" : "Startseite", - "ACTION_PAUSE" : "Pause", - "ACTION_PLAY" : "Abspielen", - "ACTION_SAVE" : "Speichern", - "ACTION_SEARCH" : "Suche", - "ACTION_SHARE" : "Teilen", - "ACTION_UPDATE_PASSWORD" : "Passwort aktualisieren", - "ACTION_VIEW_HISTORY" : "Verlauf", - "ACTION_VIEW_RECORDING" : "Ansicht", - - "DIALOG_HEADER_ERROR" : "Fehler", - - "ERROR_PAGE_UNAVAILABLE" : "Ein Fehler ist aufgetreten und die gewünschte Aktion kann nicht fortgesetzt werden. Bitte informieren Sie ihren Systemadministrator oder prüfen Sie die Logdateien, falls das Problem bestehen bleiben sollte.", - "ERROR_PASSWORD_BLANK" : "Das Passwort darf nicht leer sein.", - "ERROR_PASSWORD_MISMATCH" : "Die Passwörter stimmen nicht überein.", - "ERROR_SINGLE_FILE_ONLY" : "Bitte nur eine Datei zeitgleich hochladen", - - "FIELD_HEADER_PASSWORD" : "Passwort:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Wiederhole Passwort:", - - "FIELD_PLACEHOLDER_FILTER" : "Filter", - - "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "In Benutzung durch {USERS} Benutzer.", - "INFO_LOGGED_OUT" : "Sie wurden ausgeloggt.", - - "TEXT_ANONYMOUS_USER" : "Anonymer Benutzer", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{Sekunde} other{Sekunden}}} minute{{VALUE, plural, one{Minute} other{Minuten}}} hour{{VALUE, plural, one{Stunde} other{Stunden}}} day{{VALUE, plural, one{Tag} other{Tage}}} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_CLIENT_MESSAGES" : "@:APP.ACTION_CLEAR", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Entferne abgeschlossene Übertragungen", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "Trennen", - "ACTION_FULLSCREEN" : "Vollbild", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Neu verbinden", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_SHOW_CLIPBOARD" : "Klicken um Zwischenablage anzuzeigen.", - "ACTION_UPLOAD_FILES" : "Dateien hochladen", - - "DIALOG_HEADER_CONNECTING" : "Verbinden", - "DIALOG_HEADER_CONNECTION_ERROR" : "Verbindungsfehler", - "DIALOG_HEADER_DISCONNECTED" : "Verbindung getrennt", - - "ERROR_CLIENT_201" : "Aufgrund hoher Serverauslastung wurde diese Verbindung zurückgesetzt. Versuchen Sie es in wenigen Minuten erneut.", - "ERROR_CLIENT_202" : "Der Verbindungsaufbau wurde durch den Guacamole Server abgebrochen da der entfernte Computer nicht reagiert. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_CLIENT_203" : "Der entfernte Computer hat einen Fehler hervorgerufen und die Verbindung geschlossen. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_CLIENT_207" : "Der entfernte Computer ist gegenwärtig nicht erreichbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_CLIENT_208" : "Der entfernte Computer ist gegenwärtig nicht verfügbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_CLIENT_209" : "Der entfernte Computer hat die Verbindung geschlossen, da sie mit einer anderen Verbindung in Konflikt steht. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_CLIENT_20A" : "Der entfernte Computer hat die Verbindung geschlossen, da sie als inaktiv erkannt wurde. Bitte kontaktieren Sie Ihren Systemadministrator oder prüfen Sie Ihre Verbindungseinstellungen.", - "ERROR_CLIENT_20B" : "Der entfernte Computer hat die Verbindung geschlossen. Bitte kontaktieren Sie Ihren Systemadministrator oder prüfen Sie die Systemlogs falls dieses Verhalten unerwünscht oder unerwartet sein sollte.", - "ERROR_CLIENT_301" : "Anmeldung Fehlgeschlagen. Bitte versuchen Sie es erneut.", - "ERROR_CLIENT_303" : "Sie haben keine Berechtigung auf diese Verbindung zuzugreifen. Wenn Sie diese Berechtigung benötigen, bitten Sie den Systemadministrator diese Berechtigung hinzuzufügen oder prüfen Sie Ihre Systemeinstellungen.", - "ERROR_CLIENT_308" : "Die Verbindung wurde durch den Guacamole Server geschlossen da keine aktive Interkommunikation mit dem Browser besteht. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut..", - "ERROR_CLIENT_31D" : "Der Zugang zu dieser Verbindung wurde durch den Guacamole Server verweigert, da die maximale Anzahl der gleichzeitigen Zugriffe für diese Verbindung für einen einzelnen Benutzer erreicht wurde.", - "ERROR_CLIENT_DEFAULT" : "Die Verbindung wurde aufgrund eines internen Fehlers im Guacamole Server beendet. Sollte dieses Problem weiterhin bestehen informieren Sie den Systemadministrator oder überprüfen Sie die Protokolle.", - - "ERROR_TUNNEL_201" : "Der Verbindungsversuch wurde aufgrund zu vieler bestehender Verbindungen durch den Guacamole Server zurückgewiesen. Versuchen Sie es in wenigen Minuten erneut.", - "ERROR_TUNNEL_202" : "Die Verbindung zum Server wurde aufgrund hoher Latenz geschlossen. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", - "ERROR_TUNNEL_203" : "Die Verbindung wurde aufgrund eines internen Fehlers beendet. Versuche Sie es noch einmal oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_TUNNEL_204" : "Die angeforderte Verbindung existiert nicht. Bitte überprüfen Sie den Verbindungsnamen und versuchen Sie es erneut.", - "ERROR_TUNNEL_205" : "Diese Verbindung ist in Verwendung, ein konkurrierender Zugriff ist nicht gestattet. Versuche Sie es bitte später erneut.", - "ERROR_TUNNEL_207" : "Der Guacamole Server ist gegenwärtig nicht erreichbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_TUNNEL_208" : "Der Guacamole Server ist gegenwärtig nicht verfügbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_TUNNEL_301" : "Sie haben keine Zugriffsberechtigung für diese Verbindung. Bitte melden Sie sich an und versuchen es erneut.", - "ERROR_TUNNEL_303" : "Sie haben keine Zugriffsberechtigung für diese Verbindung. Wenn Sie diese Berechtigung benötigen, bitten Sie den Systemadministrator diese Berechtigung hinzuzufügen oder prüfen Sie Ihre Systemeinstellungen.", - "ERROR_TUNNEL_308" : "Die Verbindung wurde durch den Guacamole Server geschlossen da keine aktive Interkommunikation mit dem Browser besteht. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", - "ERROR_TUNNEL_31D" : "Der Zugang zu dieser Verbindung wurde durch den Guacamole Server verweigert, da die maximale Anzahl der gleichzeitigen Zugriffe für einen einzelnen Benutzer erreicht wurde. Bitte schliessen Sie eine oder mehrere Verbindungen und versuchen Sie es erneut.", - "ERROR_TUNNEL_DEFAULT" : "Die Verbindung wurde aufgrund eines internen Fehlers im Guacamole Server beendet. Sollte dieses Problem weiterhin bestehen informieren Sie Ihren Systemadministrator oder überprüfen Sie die Protokolle.", - - "ERROR_UPLOAD_100" : "Dateiübertragungen werden entweder nicht unterstützt oder sind nicht aktiviert. Bitte kontaktieren Sie Ihren Systemadministrator oder überprüfen die Protokolle.", - "ERROR_UPLOAD_201" : "Die maximale Anzahl gleichzeitiger Dateiübertragungen ist erreicht. Bitte warten Sie bis laufende Dateiübertragungen abgeschlossen sind und versuchen Sie es dann erneut.", - "ERROR_UPLOAD_202" : "Die Dateiübertragung konnte nicht gestartet werden da der entfernte Computer nicht reagiert. Bitte versuchen Sie es erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_UPLOAD_203" : "Der entfernte Computer hat bei der Übertragungen einen Fehler verursacht. Bitte versuchen Sie es erneut oder kontaktieren Ihren Systemadministrator.", - "ERROR_UPLOAD_204" : "Das Übertragungsziel existiert nicht. Bitte überprüfen Sie ob der Zielort wirklich existiert und versuchen Sie es dann erneut oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_UPLOAD_205" : "Das Übertragungsziel ist zur Zeit gesperrt. Bitte warten Sie bis alle laufenden Prozesse beendet wurden und versuchen Sie es dann erneut.", - "ERROR_UPLOAD_301" : "Es besteht ohne Anmeldung keine Berechtigung zur Dateiübertragung. Bitte melden Sie sich an und versuchen Sie es erneut.", - "ERROR_UPLOAD_303" : "Es besteht keine Berechtigung zur Dateiübertragung. Wenn Sie diese Berechtigung benötigen überprüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Systemadministrator.", - "ERROR_UPLOAD_308" : "Die Dateiübertragung weist keinen Fortschritt auf. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", - "ERROR_UPLOAD_31D" : "Die maximale Anzahl gleichzeitiger Dateiübertragungen erreicht. Bitte warten Sie bis eine oder mehrere laufende Dateiübertragungen abgeschlossen sind und versuche Sie es dann erneut.", - "ERROR_UPLOAD_DEFAULT" : "Die Verbindung wurde aufgrund eines internen Fehlers im Guacamole Server beendet. Sollte dieses Problem weiterhin bestehen informieren Sie Ihren Systemadministrator oder überprüfen Sie die Protokolle.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Kopierter oder ausgeschnittener Text aus Guacamole wird hier angezeigt. Änderungen am Text werden direkt auf die entfernte Zwischenablage angewandt.", - "HELP_INPUT_METHOD_NONE" : "Keine Eingabemethode in Verwendung. Tastatureingaben werden von der Hardwaretastatur akzeptiert.", - "HELP_INPUT_METHOD_OSK" : "Bildschirmeingaben und die eingebettete Guacamole Bildschirmtastatur werden akzeptiert. Die Bildschirmtastatur gestattet Tastenkombinationen die ansonsten unmöglich sind (z.B.: Strg-Alt-Del).", - "HELP_INPUT_METHOD_TEXT" : "Gestattet Eingaben von Text und emuliert Tastaturkombinationen basierend auf den eingegebenen Text. Dies wird benötigt für Geräte ohne Hardwaretastatur.", - "HELP_MOUSE_MODE" : "Beeinflusst, wie sich die entfernte Maus bei Touchpadberührungen verhält.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Tippen Sie auf die Zielposition, der Klick erfolgt am Ort der Berührung des Touchscreen's.", - "HELP_MOUSE_MODE_RELATIVE" : "Den Mauszeiger zur Zielposition bewegen und klicken. Der Klick erfolgt an der Position des Mauszeigers.", - "HELP_SHARE_LINK" : "Die aktuelle Verbindung wird gegenwärtig geteilt und kann von jeder Person über den folgenden Link erreicht werden:", - - "INFO_ANONYMOUS_USER_COUNT" : "Anonym{COUNT, plural, one{} other{ (#)}}", - "INFO_CONNECTION_SHARED" : "Diese Verbindung wird nun geteilt.", - "INFO_NO_FILE_TRANSFERS" : "Keine Dateiübertragungen.", - "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", - - "NAME_INPUT_METHOD_NONE" : "Keine", - "NAME_INPUT_METHOD_OSK" : "Bildschirmtastatur", - "NAME_INPUT_METHOD_TEXT" : "Texteingabe", - "NAME_KEY_CTRL" : "Strg", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Touchscreen", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIENT_MESSAGES" : "Nachrichten", - "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", - "SECTION_HEADER_DEVICES" : "Geräte", - "SECTION_HEADER_DISPLAY" : "Anzeige", - "SECTION_HEADER_FILE_TRANSFERS" : "Dateiübertragung", - "SECTION_HEADER_INPUT_METHOD" : "Eingabemethode", - - "SECTION_HEADER_MOUSE_MODE" : "Mausemulationsmodus", - - "TEXT_ANONYMOUS_USER_JOINED" : "Ein unbekannter Benutzer ist der Verbindung beigetreten.", - "TEXT_ANONYMOUS_USER_LEFT" : "Ein unbekannter Benutzer hat die Verbindung verlassen.", - "TEXT_ZOOM_AUTO_FIT" : "Autoanpassung Fenstergröße", - "TEXT_CLIENT_STATUS_IDLE" : "Inaktiv.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Verbindungsaufbau zu Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Verbindung wurde getrennt.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "Die Verbindung zum Guacamole-Server ist nicht stabil.", - "TEXT_CLIENT_STATUS_WAITING" : "Verbindungsaufbau zu Guacamole. Bitte warten...", - "TEXT_USER_JOINED" : "{USERNAME} ist der Verbindung beigetreten.", - "TEXT_USER_LEFT" : "{USERNAME} hat die Verbindung verlassen.", - "TEXT_RECONNECT_COUNTDOWN" : "Neuverbindung in {REMAINING} {REMAINING, plural, one{Sekunde} other{Sekunden}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/de-de-qwertz.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Ausblenden", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Anzeigen", - - "FIELD_HEADER_BACKGROUND" : "Hintergrund", - "FIELD_HEADER_FOREGROUND" : "Vordergrund", - - "FIELD_OPTION_CUSTOM" : "Benutzerdefiniert...", - - "SECTION_HEADER_DETAILS" : "Details:" - - }, - - "IMPORT": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_BROWSE" : "Datei auswählen", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", - "ACTION_VIEW_FORMAT_HELP" : "Formatierungshinweise anzeigen", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_IMPORT_CONNECTIONS" : "Verbindungen importieren", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - "DIALOG_HEADER_SUCCESS" : "Erfolgreich", - - "ERROR_AMBIGUOUS_CSV_HEADER" : "Mehrdeutige CSV Kopfzeile \"{HEADER}\" könnte ein Verbindungsattribute oder Parameter sein", - "ERROR_AMBIGUOUS_PARENT_GROUP" : "group und parentIdentifier können nicht zeitgleich verwendet werden", - "ERROR_ARRAY_REQUIRED" : "Die verwendete Datei muss eine Liste an Verbindungen beinhalten", - "ERROR_DETECTED_INVALID_TYPE" : "Nicht unterstüzter Dateityp. Die Datei muss CSV, JSON, oder YAML sein.", - "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "Doppelte Verbindung \"{NAME}\" bei \"{PATH}\" in der Import Datei", - "ERROR_DUPLICATE_CSV_HEADER" : "Doppelte CSV Kopfzeile: {HEADER}", - "ERROR_EMPTY_FILE" : "Die verwendete Datei ist leer", - "ERROR_INVALID_CSV_HEADER" : "Ungültige CSV Kopfzeile \"{HEADER}\" ist weder ein Attribute noch ein Parameter", - "ERROR_INVALID_MIME_TYPE" : "Nicht unterstüzter Dateityp: \"{TYPE}\"", - "ERROR_INVALID_GROUP" : "Keine passende Gruppe \"{GROUP}\" gefunden", - "ERROR_INVALID_GROUP_IDENTIFIER" : "Keine passende Verbindungsgruppe \"{IDENTIFIER}\" gefunden", - "ERROR_INVALID_GROUP_TYPE" : "Ungültige Gruppe - Muss string sein.", - "ERROR_INVALID_PROTOCOL" : "Ungültiges Protokoll \"{PROTOCOL}\"", - "ERROR_INVALID_USER_GROUPS_TYPE" : "Ungültige Benutzergruppen - muss eine Liste mit Gruppen-IDs sein.", - "ERROR_INVALID_USERS_TYPE" : "Ungültige Benutzer - muss eine Liste mit Benutzer-IDs sein.", - "ERROR_NO_FILE_SUPPLIED" : "Bitte eine Datei zum importieren auswählen", - "ERROR_PARSE_FAILURE_CSV" : "Bitte prüfen, ob die Datei eine gültige CSV ist. Folgender Verarbeitungfehler ist aufgetreten \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_JSON" : "Bitte prüfen, ob die Datei eine gültige JSON ist. Folgender Verarbeitungfehler ist aufgetreten \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_YAML" : "Bitte prüfen, ob die Datei eine gültige YML ist. Folgender Verarbeitungfehler ist aufgetreten \"{ERROR}\". ", - "ERROR_REJECT_UPDATE_CONNECTION" : "Verbindung \"{NAME}\" bereits vorhanden bei \"{PATH}\"", - "ERROR_REQUIRED_NAME_CONNECTION" : "Der Verbindungsname wird benötigt", - "ERROR_REQUIRED_PROTOCOL_CONNECTION" : "Das Verbindungsprotokoll wird benötigt", - "ERROR_REQUIRED_NAME_FILE" : "Kein Verbindungsnamen gefunden in der verwendeten Datei", - "ERROR_REQUIRED_PROTOCOL_FILE" : "Kein Verbindungsprotokoll gefunden in der verwendeten Datei", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "Vorhandene Verbindungen ersetzen/aktualisieren", - "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "Berechtigungen zurücksetzen", - - "HELP_CSV_DESCRIPTION" : "Eine CSV-Verbindungsimportdatei verfügt über einen Verbindungsdatensatz pro Zeile. Jede Spalte gibt ein Verbindungsfeld an. Es müssen mindestens der Verbindungsname und das Protokoll angegeben werden.", - "HELP_CSV_EXAMPLE" : "name,protocol,username,password,hostname,group,users,groups,guacd-encryption (attribute)\nconn1,vnc,alice,pass1,conn1.web.com,ROOT,guac user 1;guac user 2,Connection 1 Users,none\nconn2,rdp,bob,pass2,conn2.web.com,ROOT/Parent Group,guac user 1,,ssl\nconn3,ssh,carol,pass3,conn3.web.com,ROOT/Parent Group/Child Group,guac user 2;guac user 3,,\nconn4,kubernetes,,,,,,,", - "HELP_CSV_MORE_DETAILS" : "Die CSV Kopfzeile gibt das Verbindungsfeld für jede Zeile an. Die Verbindungsgruppen-ID, in welche die Verbindung importiert werden soll, kann direkt mit „parentIdentifier“ angegeben werden oder der Pfad zur übergeordneten Gruppe kann mit „group“ angegeben werden, wie unten gezeigt. In den meisten Fällen sollte es keinen Konflikt zwischen Feldern geben, aber bei Bedarf kann zur eindeutigen Unterscheidung das Suffix „(Attribut)“ oder „(Parameter)“ hinzugefügt werden. Listen mit Benutzer- oder Benutzergruppen-IDs müssen durch Semikolons getrennt sein.¹", - "HELP_FILE_TYPE_DESCRIPTION" : "Für den Verbindungsimport werden drei Dateitypen unterstützt: CSV, JSON und YAML. Für jeden Dateityp können die gleichen Daten angegeben werden. Dies muss den Verbindungsnamen und das Protokoll enthalten. Optional können auch ein Verbindungsgruppenstandort, eine Liste von Benutzern und/oder Benutzergruppen, denen Zugriff gewährt werden soll, Verbindungsparameter oder Verbindungsprotokolle angegeben werden. Alle Benutzer oder Benutzergruppen, die in der aktuellen Datenquelle nicht vorhanden sind, werden automatisch erstellt. Beachten Sie, dass vorhandene Verbindungsberechtigungen für aktualisierte Verbindungen nicht entfernt werden, es sei denn, „Berechtigungen zurücksetzen“ ist aktiviert.", - "HELP_FILE_TYPE_HEADER" : "Dateitypen", - "HELP_JSON_DESCRIPTION" : "Eine JSON-Verbindungsimportdatei ist eine Liste von Verbindungsobjekten. In jedem Verbindungsobjekt müssen mindestens der Verbindungsname und das Protokoll angegeben werden.", - "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"conn1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"username\": \"alice\", \"password\": \"pass1\", \"hostname\": \"conn1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac user 1\", \"guac user 2\" ],\n \"groups\": [ \"Connection 1 Users\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"username\": \"bob\", \"password\": \"pass2\", \"hostname\": \"conn2.web.com\" \\},\n \"group\": \"ROOT/Parent Group\",\n \"users\": [ \"guac user 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"username\": \"carol\", \"password\": \"pass3\", \"hostname\": \"conn3.web.com\" \\},\n \"group\": \"ROOT/Parent Group/Child Group\",\n \"users\": [ \"guac user 2\", \"guac user 3\" ]\n \\},\n \\{\n \"name\": \"conn4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", - "HELP_JSON_MORE_DETAILS" : "Die Verbindungsgruppen-ID, in welche die Verbindung importiert werden soll, kann direkt mit einem Feld „parentIdentifier“ angegeben werden oder der Pfad zur übergeordneten Gruppe kann wie unten gezeigt mit einem Feld „group“ angegeben werden. Pro Verbindung kann ein Array von Benutzer- und Benutzergruppen-IDs angegeben werden, denen Zugriff gewährt werden soll.", - "HELP_EXISTING_CONNECTION_MODE" : "Vorhandene Verbindungen vollständig ersetzen/aktualisieren, wenn ihre Namen und übergeordneten Verbindungsgruppen mit den Werten in der bereitgestellten Datei übereinstimmen. Wenn diese Option deaktiviert ist, wird der Versuch, eine Verbindung mit demselben Namen und derselben übergeordneten Verbindungsgruppe wie eine vorhandene Verbindung zu importieren, als Fehler gewertet.", - "HELP_EXISTING_PERMISSION_MODE" : "Setzen Sie die für alle Verbindungen in der bereitgestellten Datei gewährten Berechtigungen vollständig auf die in dieser Datei angegebenen Berechtigungen zurück. Wenn keine Berechtigungen angegeben werden, werden alle relevanten Verbindungsberechtigungen widerrufen. Wenn diese Option deaktiviert ist, bleiben vorhandene Berechtigungen erhalten und alle in der Datei angegebenen Berechtigungen werden hinzugefügt.", - "HELP_SEMICOLON_FOOTNOTE" : "Falls vorhanden, können Semikolons mit einem Backslash maskiert werden, z.B. \"first\\\\;last\"", - "HELP_UPLOAD_DROP_TITLE" : "Datei hier hinziehen", - "HELP_UPLOAD_FILE_TYPES" : "CSV, JSON, oder YAML", - "HELP_YAML_DESCRIPTION" : "Eine YAML-Verbindungsimportdatei ist eine Liste von Verbindungsobjekten mit genau der gleichen Struktur wie das JSON-Format.", - "HELP_YAML_EXAMPLE" : "---\n - name: conn1\n protocol: vnc\n parameters:\n username: alice\n password: pass1\n hostname: conn1.web.com\n group: ROOT\n users:\n - guac user 1\n - guac user 2\n groups:\n - Connection 1 Users\n attributes:\n guacd-encryption: none\n - name: conn2\n protocol: rdp\n parameters:\n username: bob\n password: pass2\n hostname: conn2.web.com\n group: ROOT/Parent Group\n users:\n - guac user 1\n attributes:\n guacd-encryption: none\n - name: conn3\n protocol: ssh\n parameters:\n username: carol\n password: pass3\n hostname: conn3.web.com\n group: ROOT/Parent Group/Child Group\n users:\n - guac user 2\n - guac user 3\n - name: conn4\n protocol: kubernetes", - - "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} {NUMBER, plural, one{connection} other{connections}} erfolgreich importiert.", - - "SECTION_HEADER_CONNECTION_IMPORT" : "Verbindungsimport", - "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "Dateiformat für Verbindungsimport", - "SECTION_HEADER_CSV" : "CSV Format", - "SECTION_HEADER_JSON" : "JSON Format", - "SECTION_HEADER_YAML" : "YAML Format", - - "TABLE_HEADER_ERRORS" : "Fehler", - "TABLE_HEADER_GROUP" : "Gruppe", - "TABLE_HEADER_NAME" : "Name", - "TABLE_HEADER_PROTOCOL" : "Protokol", - "TABLE_HEADER_ROW_NUMBER" : "Zeile #" - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Standard (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Passwort anzeigen", - "HELP_HIDE_PASSWORD" : "Passwort ausblenden" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Keine aktiven Verbindungen.", - - "PASSWORD_CHANGED" : "Passwort geändert.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Alle Verbindungen", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Letzte Verbindungen" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "Anonymer Benutzer" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Anmeldungefehler", - - "FIELD_HEADER_USERNAME" : "Benutzername", - "FIELD_HEADER_PASSWORD" : "Passwort" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Verbindung löschen", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Standort:", - "FIELD_HEADER_NAME" : "Name:", - "FIELD_HEADER_PROTOCOL" : "Protokoll:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Aktivieren", - "INFO_CONNECTION_NOT_USED" : "Diese Verbindung wurde bisher nicht verwendet.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Bearbeite Verbindung", - "SECTION_HEADER_HISTORY" : "Verlauf", - "SECTION_HEADER_PARAMETERS" : "Parameter", - - "TABLE_HEADER_HISTORY_USERNAME" : "Benutzername", - "TABLE_HEADER_HISTORY_START" : "Beginn", - "TABLE_HEADER_HISTORY_DURATION" : "Dauer", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Entfernter Host", - - "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Soll diese Verbindung wirklich gelöscht werden?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Lösche Verbindungsgruppe", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Standort:", - "FIELD_HEADER_NAME" : "Name:", - "FIELD_HEADER_TYPE" : "Typ:", - - "NAME_TYPE_BALANCING" : "Balancing", - "NAME_TYPE_ORGANIZATIONAL" : "Organisation", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Ändere Verbindungsgruppe", - - "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie diese Verbindungsgruppe wirklich löschen?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Verteil-Profil löschen", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Name:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Primäre Verbindung:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Verteil-Profil ändern", - "SECTION_HEADER_PARAMETERS" : "Parameter", - - "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie dieses Verteil-Profil wirklich löschen?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Lösche Benutzer", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administration:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Eigenes Passwort ändern:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Neuen Benutzer erstellen:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Neue Benutzergruppe erstellen:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Neue Verbindung erstellen:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Neue Verbindungsgruppe erstellen:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Neues Verteil-Profil erstellen:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "Login deaktiviert:", - "FIELD_HEADER_USERNAME" : "Benutzername:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Dieser Benutzer gehört aktuell keiner Benutzergruppe an. Erweitern Sie diesen Abschnitt, um eine neue Benutzergruppe zu erstellen.", - - "INFO_READ_ONLY" : "Dieser Benutzer kann nicht bearbeitet werden.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "Keine Benutzergruppen verfügbar.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Alle Verbindungen", - "SECTION_HEADER_CONNECTIONS" : "Verbindungen", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Aktuelle Verbindungen", - "SECTION_HEADER_EDIT_USER" : "Benutzer bearbeiten", - "SECTION_HEADER_PERMISSIONS" : "Berechtigungen", - "SECTION_HEADER_USER_GROUPS" : "Benutzergruppen", - - "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie diesen Benutzer wirklich löschen?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Benutzergrupperuppe löschen", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "Deaktiviert:", - "FIELD_HEADER_USER_GROUP_NAME" : "Name der Benutzergruppe:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Diese Benutzergruppe gehört keiner Benutzergruppe an. Erweitern Sie diesen Abschnitt um eine neue Benutzergruppe hinzuzufügen.", - "HELP_NO_MEMBER_USER_GROUPS" : "Dieser Benutzergruppe gehört keine Benutzergruppe an. Erweitern Sie diesen Abschnitt um eine neue Benutzergruppe hinzuzufügen.", - "HELP_NO_MEMBER_USERS" : "Dieser Benutzergruppe gehört kein Benutzer an. Erweitern Sie diesen Abschnitt um einen neuen Benutzer hinzuzufügen.", - - "INFO_READ_ONLY" : "Diese Benutzergruppe kann nicht bearbeitet werden.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "Keine Benutzer verfügbar.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Gruppe bearbeiten", - "SECTION_HEADER_MEMBER_USERS" : "Mitglieder einer Benutzergruppe", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Benutzergruppen", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Übergeordnete Benutzergruppen", - - "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie diese Benutzergruppe wirklich löschen?" - - }, - - "PLAYER" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", - "ACTION_PLAY" : "@:APP.ACTION_PLAY", - "ACTION_SHOW_KEY_LOG" : "Tastenanschlag-Protokoll", - - "INFO_LOADING_RECORDING" : "Aufnahme wird geladen. Bitte warten...", - "INFO_NO_KEY_LOG" : "Tastenanschlag-Protokoll nicht vorhanden", - "INFO_NUMBER_OF_RESULTS" : "{RESULTS} {RESULTS, plural, one{Match} other{Matches}}", - "INFO_SEEK_IN_PROGRESS" : "Spule zu gewünschten Stelle. Bitte warten...", - - "FIELD_PLACEHOLDER_TEXT_BATCH_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Rücktaste sendet:", - "FIELD_HEADER_CA_CERT" : "Zertifikate der Zertifizierungsstelle:", - "FIELD_HEADER_CLIENT_CERT" : "Client Zertifikat:", - "FIELD_HEADER_CLIENT_KEY" : "Client Schlüssel:", - "FIELD_HEADER_COLOR_SCHEME" : "Farbschema:", - "FIELD_HEADER_CONTAINER" : "Container Name:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Aufname-Pfad automatisch erstellen:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Typescript-Pfad automatisch erstellen:", - "FIELD_HEADER_DISABLE_COPY" : "Kopieren deaktivieren:", - "FIELD_HEADER_DISABLE_PASTE" : "Einfügen deaktivieren:", - "FIELD_HEADER_EXEC_COMMAND" : "Befehl ausführen (exec):", - "FIELD_HEADER_FONT_NAME" : "Schriftname:", - "FIELD_HEADER_FONT_SIZE" : "Schriftgröße:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_IGNORE_CERT" : "Server-Zertifikate ignorieren:", - "FIELD_HEADER_NAMESPACE" : "Namespace:", - "FIELD_HEADER_POD" : "Pod Name:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Schreibgeschützt:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Maus auschließen:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Grafik/Streams ausschließen:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tasten-Ereignisse einschließen:", - "FIELD_HEADER_RECORDING_NAME" : "Aufnahme-Name:", - "FIELD_HEADER_RECORDING_PATH" : "Aufnahme-Pfad:", - "FIELD_HEADER_SCROLLBACK" : "Maximale Scrollback Größe:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript Name:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript Pfad:", - "FIELD_HEADER_USE_SSL" : "SSL/TLS verwenden", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Rücktaste (Strg-H)", - "FIELD_OPTION_BACKSPACE_127" : "Löschen (Strg-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Schwarz auf Weiß", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grau auf Schwarz", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grün auf Schwarz", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Weiß auf Schwarz", - - "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", - "SECTION_HEADER_BEHAVIOR" : "Konsolenverhalten", - "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", - "SECTION_HEADER_CONTAINER" : "Container", - "SECTION_HEADER_DISPLAY" : "Bildschirm", - "SECTION_HEADER_RECORDING" : "Monitor-Aufnahme", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Aufnahme)", - "SECTION_HEADER_NETWORK" : "Netzwerk" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CERT_TOFU" : "Vertraue Host Zertifikat bei erster Verwendung:", - "FIELD_HEADER_CERT_FINGERPRINTS" : "Fingerprints bekannter Host Zertifikate:", - "FIELD_HEADER_CLIENT_NAME" : "Client name:", - "FIELD_HEADER_COLOR_DEPTH" : "Farbtiefe:", - "FIELD_HEADER_CONSOLE" : "Mit Konsole verbinden (Windows 2003 / 2003 R2):", - "FIELD_HEADER_CONSOLE_AUDIO" : "Audiounterstützung Konsole:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Austauschlaufwerk automatisch erstellen:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Aufzeichnungspfad automatisch erstellen:", - "FIELD_HEADER_DISABLE_AUDIO" : "Audio deaktivieren:", - "FIELD_HEADER_DISABLE_AUTH" : "Authentifizierung deaktivieren:", - "FIELD_HEADER_DISABLE_COPY" : "Kopieren deaktivieren:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Dateidownload deaktivieren:", - "FIELD_HEADER_DISABLE_PASTE" : "Einfügen deaktivieren:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Dateiupload deaktivieren:", - "FIELD_HEADER_DOMAIN" : "Domäne:", - "FIELD_HEADER_DPI" : "Auflösung (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Laufwerksname:", - "FIELD_HEADER_DRIVE_PATH" : "Laufwerkspfad:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Audioeingänge (Mikrofon) aktivieren:", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Desktop Gestaltung (Aero) aktivieren:", - "FIELD_HEADER_ENABLE_DRIVE" : "Austauschlaufwerk aktivieren:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Schriftartglättung (ClearType) aktivieren:", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Fensterziehen aktivieren:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Menüanimationen aktivieren:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Bitmap-Zwischenspeicherung deaktivieren:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Offscreen-Caching deaktivieren:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Glyph-Caching deaktivieren:", - "FIELD_HEADER_DISABLE_GFX" : "Grafik-Pipline-Erweiterung deaktivieren:", - "FIELD_HEADER_ENABLE_PRINTING" : "Druckunterstützung aktivieren:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTP aktivieren:", - "FIELD_HEADER_ENABLE_THEMING" : "Themen-Unterstützung aktivieren:", - "FIELD_HEADER_ENABLE_TOUCH" : "Multi-Touch-Unterstützung aktivieren:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Desktophintergrund aktivieren:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Verlustlose Kompression erzweingen:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Domäne:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Hostname:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Passwort:", - "FIELD_HEADER_GATEWAY_PORT" : "Port:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Benutzername:", - "FIELD_HEADER_HEIGHT" : "Höhe:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_IGNORE_CERT" : "Serverzertifikat ignorieren:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Startprogramme:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Lastverteilungs-Info/Cookie:", - "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Zeilenende:", - "FIELD_HEADER_PASSWORD" : "Passwort:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRINTER_NAME" : "Name des weitergeleiteten Druckers:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Vorverbindungs-BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDP-Quell-ID:", - "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausaufzeichnung deaktivieren:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Touch-Ereignisse deaktivieren:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", - "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", - "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", - "FIELD_HEADER_RESIZE_METHOD" : "Grössenänderungs-Methode:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameter:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Arbeitsverzeichnis der Remote-Applikation:", - "FIELD_HEADER_REMOTE_APP" : "Remote-Applikation:", - "FIELD_HEADER_SECURITY" : "Sicherheitsmodus:", - "FIELD_HEADER_SERVER_LAYOUT" : "Tastaturlayout:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Standardverzeichnis:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Dateidownload deaktivieren:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Öffentlicher Schlüssel des Host (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive Intervall:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Passwort:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privater Schlüssel:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "SFTP-Wurzelverzeichnis:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Dateiupload deaktivieren:", - "FIELD_HEADER_SFTP_USERNAME" : "Benutzername¨:", - "FIELD_HEADER_STATIC_CHANNELS" : "Statische Kanäle:", - "FIELD_HEADER_TIMEZONE" : "Zeitzone:", - "FIELD_HEADER_USERNAME" : "Benutzername:", - "FIELD_HEADER_WIDTH" : "Breite:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast Adresse für WoL-Paket:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC Adresse des Remote Hosts:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL Paket senden:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP-Port für WoL Paket: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "Wartezeit für Host-Boot:", - - "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Belassen", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Hohe Farbtiefe (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Echtfarben (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Echtfarben (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 Farben", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Display Update\" virtual channel (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Erneut verbinden", - - "FIELD_OPTION_SECURITY_ANY" : "Jede", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Netzwerkebene Authentifizierung)", - "FIELD_OPTION_SECURITY_RDP" : "RDP Verschlüsselung", - "FIELD_OPTION_SECURITY_TLS" : "TLS Verschlüsselung", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Tschechisch (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Dänisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Deutsch (Schweiz) (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Deutsch (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Englisch (GB) (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Englisch (US) (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latein-Amerikanisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Französisch (Belgien) (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Französisch (Kanada) (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Französisch (Schweiz) (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Französisch (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Ungarisch (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italienisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norwegisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polnisches (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugiesisch (BR) (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugiesisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Rumänisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Schwedisch (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Türkisch (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", - "SECTION_HEADER_BASIC_PARAMETERS" : "Basiseinstellungen", - "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Geräteumleitung", - "SECTION_HEADER_DISPLAY" : "Bildschirm", - "SECTION_HEADER_GATEWAY" : "Remote Desktop Gateway", - "SECTION_HEADER_LOAD_BALANCING" : "Lastverteilung", - "SECTION_HEADER_NETWORK" : "Netzwerk", - "SECTION_HEADER_PERFORMANCE" : "Geschwindigkeit", - "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", - "SECTION_HEADER_REMOTEAPP" : "Entferntes Programm", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Rücktaste:", - "FIELD_HEADER_COLOR_SCHEME" : "Farbschema:", - "FIELD_HEADER_COMMAND" : "Befehl ausführen:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Bildschirmaufzeichnungspfad automatisch erzeugen:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Textaufzeichnungspfad automatisch erzeugen:", - "FIELD_HEADER_DISABLE_COPY" : "Kopieren deaktivieren:", - "FIELD_HEADER_DISABLE_PASTE" : "Einfügen deaktivieren:", - "FIELD_HEADER_FONT_NAME" : "Schriftart:", - "FIELD_HEADER_FONT_SIZE" : "Schriftgröße:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTP aktivieren:", - "FIELD_HEADER_HOST_KEY" : "Öffentlicher Schlüssel des Hosts (Base64):", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_LOCALE" : "Sprache ($LANG):", - "FIELD_HEADER_USERNAME" : "Benutzername:", - "FIELD_HEADER_PASSWORD" : "Passwort:", - "FIELD_HEADER_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRIVATE_KEY" : "Privater Schlüssel:", - "FIELD_HEADER_SCROLLBACK" : "Maximaler Scrollback:", - "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausaufzeichnung deaktivieren:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", - "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", - "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Server keepalive Intervall:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Dateidownload deaktivieren:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "SFTP-Wurzelverzeichnis:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Dateiupload deaktivieren:", - "FIELD_HEADER_TERMINAL_TYPE" : "Terminaltyp:", - "FIELD_HEADER_TIMEZONE" : "Zeitzone ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Textaufzeichnungsname:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Textaufzeichnungspfad:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast Adresse für WoL-Paket:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC Adresse des Remote Hosts:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL Paket senden:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP-Port für WoL Paket: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "Wartezeit für Host-Boot:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Rücktaste (Strg-H)", - "FIELD_OPTION_BACKSPACE_127" : "Löschtaste (Strg-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Schwarz auf Weiß", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grau auf Schwarz", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grün auf Schwarz", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Weiß auf Schwarz", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", - "SECTION_HEADER_BEHAVIOR" : "Terminalverhalten", - "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", - "SECTION_HEADER_DISPLAY" : "Bildschirm", - "SECTION_HEADER_NETWORK" : "Netzwerk", - "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", - "SECTION_HEADER_SESSION" : "Sitzung / Umgebung", - "SECTION_HEADER_TYPESCRIPT" : "Textaufzeichnung", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Rücktaste:", - "FIELD_HEADER_COLOR_SCHEME" : "Farbschema:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Bildschirmaufzeichnungspfad automatisch erzeugen:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Textaufzeichnungspfad automatisch erzeugen:", - "FIELD_HEADER_DISABLE_COPY" : "Kopieren deaktivieren:", - "FIELD_HEADER_DISABLE_PASTE" : "Einfügen deaktivieren:", - "FIELD_HEADER_FONT_NAME" : "Schriftart:", - "FIELD_HEADER_FONT_SIZE" : "Schriftgröße:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Regulärer Ausdruck für Anmeldefehler:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Regulärer Ausdruck für erfolgreiche Anmeldungen:", - "FIELD_HEADER_USERNAME" : "Benutzername:", - "FIELD_HEADER_USERNAME_REGEX" : "Regulärer Ausdruck für Benutzername:", - "FIELD_HEADER_PASSWORD" : "Passwort:", - "FIELD_HEADER_PASSWORD_REGEX" : "Regulärer Ausdruck für Passwort:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausaufzeichnung deaktivieren:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", - "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", - "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", - "FIELD_HEADER_SCROLLBACK" : "Maximaler Scrollback:", - "FIELD_HEADER_TERMINAL_TYPE" : "Terminaltyp:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Textaufzeichnungsname:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Textaufzeichnungspfad:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast Adresse für WoL-Paket:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC Adresse des Remote Hosts:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL Paket senden:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP-Port für WoL Paket: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "Wartezeit für Host-Boot:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Rücktaste (Strg-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Strg-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Schwarz auf Weiß", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grau auf Schwarz", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grün auf Schwarz", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Weiß auf Schwarz", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", - "SECTION_HEADER_BEHAVIOR" : "Terminalverhalten", - "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", - "SECTION_HEADER_DISPLAY" : "Bildschirm", - "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", - "SECTION_HEADER_TYPESCRIPT" : "Textaufzeichnung", - "SECTION_HEADER_NETWORK" : "Netzwerk", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Audioservername:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codierung:", - "FIELD_HEADER_COLOR_DEPTH" : "Farbtiefe:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Aufzeichnungspfad automatisch erzeugen:", - "FIELD_HEADER_CURSOR" : "Cursor:", - "FIELD_HEADER_DEST_HOST" : "Ziel Host:", - "FIELD_HEADER_DEST_PORT" : "Ziel Port:", - "FIELD_HEADER_DISABLE_COPY" : "Kopieren deaktivieren:", - "FIELD_HEADER_DISABLE_PASTE" : "Einfügen deaktivieren:", - "FIELD_HEADER_ENABLE_AUDIO" : "Audio aktivieren:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTP aktivieren:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Verlustlose Kompression erzwingen:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_USERNAME" : "Benutzername:", - "FIELD_HEADER_PASSWORD" : "Passwort:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausbewegungen nicht aufzeichnen:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", - "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", - "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Standard Uploadverzeichnis:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Dateidownload deaktivieren:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Öffentlicher Schlüssel des Host (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive Intervall:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Passwort:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privater Schlüssel:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "SFTP-Wurzelverzeichnis:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Hochladen deaktivieren:", - "FIELD_HEADER_SFTP_USERNAME" : "Benutzername:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Vertausche rot/blau Komponenten:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast Adresse für WoL-Paket:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC Adresse des Remote Hosts:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL Paket senden:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP-Port für WoL Paket: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "Wartezeit für Host-Boot:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 Farben", - "FIELD_OPTION_COLOR_DEPTH_16" : "Hohe Farbtiefe (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Echtfarben (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Echtfarben (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Lokal", - "FIELD_OPTION_CURSOR_REMOTE" : "Entfernt", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Audio", - "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", - "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", - "SECTION_HEADER_DISPLAY" : "Bildschirm", - "SECTION_HEADER_NETWORK" : "Netzwerk", - "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", - "SECTION_HEADER_REPEATER" : "VNC Repeater", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Einstellungen" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "Die letzten Verbindungen werden hier historisch aufgelistet und können durch Klicken auf die Spaltenüberschriften sortiert werden. Zum Aufsuchen von bestimmten Datensätzen, geben Sie eine Filterzeichenfolge ein und klicken Sie auf \"Suchen\". Nur Datensätze, die die vorgesehenen Filterzeichenfolge entsprechen, werden aufgelistet.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Keine passenden Datensätze", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindungsname", - "TABLE_HEADER_SESSION_DURATION" : "Verbindungsdauer", - "TABLE_HEADER_SESSION_LOGS" : "Protokolle", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Entfernter Host", - "TABLE_HEADER_SESSION_STARTDATE" : "Sitzung aktiv seit", - "TABLE_HEADER_SESSION_USERNAME" : "Benutzername", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_NEW_CONNECTION" : "Neue Verbindung", - "ACTION_NEW_CONNECTION_GROUP" : "Neue Verbindungsgruppe", - "ACTION_NEW_SHARING_PROFILE" : "Neues Verteil-Profil", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Klicken Sie auf eine Verbindung um diese zu verwalten. Abhängig von Ihrer Zugriffsebene können Verbindungen hinzugefügt, gelöscht oder Parameter (Protokoll, Hostname, Port, etc.) geändert werden.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Verbindungen" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Anzeigesprache:", - "FIELD_HEADER_PASSWORD" : "Passwort:", - "FIELD_HEADER_PASSWORD_OLD" : "Aktuelles Passwort:", - "FIELD_HEADER_PASSWORD_NEW" : "Neues Passwort:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Passwort wiederholen:", - "FIELD_HEADER_TIMEZONE" : "Zeitzone:", - "FIELD_HEADER_USERNAME" : "Benutzername:", - - "HELP_DEFAULT_INPUT_METHOD" : "Die Standardeingabemethode bestimmt wie Tastaturereignisse an Guacamole weitergeleitet werden. Eine Änderung dieser Einstellung kann erforderlich sein, wenn ein mobiles Gerät verwendet wird oder bei der Eingabe durch einen IME. Dieses Verhalten kann im Menü innerhalb der Guacamole Verbindung geändert werden.", - "HELP_DEFAULT_MOUSE_MODE" : "Der Standard Mausemulationsmodus bestimmt wie sich die entfernte Maus bei Touchpad Berührungen verhält. Dieses Verhalten kann im Menü innerhalb der Guacamole Verbindung geändert werden.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Um die Spracheinstellungen von Guacamole zu ändern, wählen Sie eine der verfügbaren Sprachen.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Wenn Sie das Passwort ändern wollen, geben Sie das aktuelle und das gewünschte Passwort ein und klicken Sie auf \"Ändere Passwort\". Die Änderung wird sofort wirksam.", - - "INFO_PASSWORD_CHANGED" : "Passwort geändert.", - "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "Benutzereinstellungen gespeichert.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Standard Eingabemethode", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Standard Mausemulationsmodus", - "SECTION_HEADER_UPDATE_PASSWORD" : "Passwort ändern" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Neuer Benutzer", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Klicken Sie auf einen der unten stehenden Benutzer, um diesen zu modifizieren. Je nach Berechtigungsstufe können Sie Benutzer hinzufügen, bearbeiten, löschen oder die Passwörter ändern.", - - "SECTION_HEADER_USERS" : "Benutzer", - - "TABLE_HEADER_FULL_NAME" : "Voller Name", - "TABLE_HEADER_LAST_ACTIVE" : "Zuletzt aktiv", - "TABLE_HEADER_ORGANIZATION" : "Organisation", - "TABLE_HEADER_USERNAME" : "Benutzername" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "Neue Gruppe", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Klicken Sie auf eine der unten stehenden Gruppen, um diese zu modifizieren. Je nach Berechtigungsstufe können Sie Gruppen und deren Mitglieder hinzufügen, bearbeiten oder löschen.", - - "SECTION_HEADER_USER_GROUPS" : "Gruppen", - - "TABLE_HEADER_USER_GROUP_NAME" : "Gruppenname" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Beende Sitzung", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Beende Sitzung", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Diese Seite wird mit derzeit aktiven Verbindungen gefüllt. Die aufgelisteten Verbindungen und die Möglichkeit, diese Verbindungen zu beenden, hängen von Ihrer Zugriffsebene ab. Wenn Sie eine oder mehrere Sitzungen beenden wollen, wählen Sie diese Sitzung durch Aktivierung der nebenstehende Box und klicken auf \"Beende Sitzung\". Beendung einer Sitzung trennt den Benutzer von dessen Verbindung unverzüglich.", - - "INFO_NO_SESSIONS" : "Keine aktiven Sitzungen", - - "SECTION_HEADER_SESSIONS" : "Aktive Sitzungen", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindungsname", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Entfernter Host", - "TABLE_HEADER_SESSION_STARTDATE" : "Sitzung aktiv seit", - "TABLE_HEADER_SESSION_USERNAME" : "Benutzername", - - "TEXT_CONFIRM_DELETE" : "Sind Sie sicher, dass alle ausgewählten Sitzungen beendet werden sollen? Die Benutzer dieser Sitzungen werden unverzüglich getrennt." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "E-Mailadresse:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Voller Name:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organisation:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Rolle:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/en.json b/guacamole/src/main/frontend/src/translations/en.json deleted file mode 100644 index b79f6184e4..0000000000 --- a/guacamole/src/main/frontend/src/translations/en.json +++ /dev/null @@ -1,1209 +0,0 @@ -{ - - "NAME" : "English", - - "APP" : { - - "NAME" : "Apache Guacamole", - "VERSION" : "${project.version}", - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Cancel", - "ACTION_CLEAR" : "Clear", - "ACTION_CLONE" : "Clone", - "ACTION_CONTINUE" : "Continue", - "ACTION_DELETE" : "Delete", - "ACTION_DELETE_SESSIONS" : "Kill Sessions", - "ACTION_DOWNLOAD" : "Download", - "ACTION_IMPORT" : "Import", - "ACTION_LOGIN" : "Login", - "ACTION_LOGIN_AGAIN" : "Re-login", - "ACTION_LOGOUT" : "Logout", - "ACTION_MANAGE_CONNECTIONS" : "Connections", - "ACTION_MANAGE_PREFERENCES" : "Preferences", - "ACTION_MANAGE_SETTINGS" : "Settings", - "ACTION_MANAGE_SESSIONS" : "Active Sessions", - "ACTION_MANAGE_USERS" : "Users", - "ACTION_MANAGE_USER_GROUPS" : "Groups", - "ACTION_NAVIGATE_BACK" : "Back", - "ACTION_NAVIGATE_HOME" : "Home", - "ACTION_PAUSE" : "Pause", - "ACTION_PLAY" : "Play", - "ACTION_SAVE" : "Save", - "ACTION_SEARCH" : "Search", - "ACTION_SHARE" : "Share", - "ACTION_UPDATE_PASSWORD" : "Update Password", - "ACTION_VIEW_HISTORY" : "History", - "ACTION_VIEW_RECORDING" : "View", - - "DIALOG_HEADER_ERROR" : "Error", - - "ERROR_PAGE_UNAVAILABLE" : "An error has occurred and this action cannot be completed. If the problem persists, please notify your system administrator or check your system logs.", - "ERROR_PASSWORD_BLANK" : "Your password cannot be blank.", - "ERROR_PASSWORD_MISMATCH" : "The provided passwords do not match.", - "ERROR_SINGLE_FILE_ONLY" : "Please upload only a single file at a time", - - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Re-enter Password:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "Allow writing to existing recording file:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "Allow writing to existing typescript file:", - - "FIELD_PLACEHOLDER_FILTER" : "Filter", - - "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Currently in use by {USERS} {USERS, plural, one{user} other{users}}.", - "INFO_LOGGED_OUT" : "You have been logged out.", - - "TEXT_ANONYMOUS_USER" : "Anonymous", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{second} other{seconds}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{hour} other{hours}}} day{{VALUE, plural, one{day} other{days}}} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_CLIENT_MESSAGES" : "@:APP.ACTION_CLEAR", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "@:APP.ACTION_CLEAR", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "Disconnect", - "ACTION_FULLSCREEN" : "Fullscreen", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Reconnect", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_SHOW_CLIPBOARD" : "Click to view clipboard contents.", - "ACTION_UPLOAD_FILES" : "Upload Files", - - "DIALOG_HEADER_CONNECTING" : "Connecting", - "DIALOG_HEADER_CONNECTION_ERROR" : "Connection Error", - "DIALOG_HEADER_DISCONNECTED" : "Disconnected", - - "ERROR_CLIENT_201" : "This connection has been closed because the server is busy. Please wait a few minutes and try again.", - "ERROR_CLIENT_202" : "The Guacamole server has closed the connection because the remote desktop is taking too long to respond. Please try again or contact your system administrator.", - "ERROR_CLIENT_203" : "The remote desktop server encountered an error and has closed the connection. Please try again or contact your system administrator.", - "ERROR_CLIENT_207" : "The remote desktop server is currently unreachable. If the problem persists, please notify your system administrator, or check your system logs.", - "ERROR_CLIENT_208" : "The remote desktop server is currently unavailable. If the problem persists, please notify your system administrator, or check your system logs.", - "ERROR_CLIENT_209" : "The remote desktop server has closed the connection because it conflicts with another connection. Please try again later.", - "ERROR_CLIENT_20A" : "The remote desktop server has closed the connection because it appeared to be inactive. If this is undesired or unexpected, please notify your system administrator, or check your system settings.", - "ERROR_CLIENT_20B" : "The remote desktop server has forcibly closed the connection. If this is undesired or unexpected, please notify your system administrator, or check your system logs.", - "ERROR_CLIENT_301" : "Log in failed. Please reconnect and try again.", - "ERROR_CLIENT_303" : "The remote desktop server has denied access to this connection. If you require access, please ask your system administrator to grant your account access, or check your system settings.", - "ERROR_CLIENT_308" : "The Guacamole server has closed the connection because there has been no response from your browser for long enough that it appeared to be disconnected. This is commonly caused by network problems, such as spotty wireless signal, or simply very slow network speeds. Please check your network and try again.", - "ERROR_CLIENT_31D" : "The Guacamole server is denying access to this connection because you have exhausted the limit for simultaneous connection use by an individual user. Please close one or more connections and try again.", - "ERROR_CLIENT_DEFAULT" : "An internal error has occurred within the Guacamole server, and the connection has been terminated. If the problem persists, please notify your system administrator, or check your system logs.", - - "ERROR_TUNNEL_201" : "The Guacamole server has rejected this connection attempt because there are too many active connections. Please wait a few minutes and try again.", - "ERROR_TUNNEL_202" : "The connection has been closed because the server is taking too long to respond. This is usually caused by network problems, such as a spotty wireless signal, or slow network speeds. Please check your network connection and try again or contact your system administrator.", - "ERROR_TUNNEL_203" : "The server encountered an error and has closed the connection. Please try again or contact your system administrator.", - "ERROR_TUNNEL_204" : "The requested connection does not exist. Please check the connection name and try again.", - "ERROR_TUNNEL_205" : "This connection is currently in use, and concurrent access to this connection is not allowed. Please try again later.", - "ERROR_TUNNEL_207" : "The Guacamole server is not currently reachable. Please check your network and try again.", - "ERROR_TUNNEL_208" : "The Guacamole server is not accepting connections. Please check your network and try again.", - "ERROR_TUNNEL_301" : "You do not have permission to access this connection because you are not logged in. Please log in and try again.", - "ERROR_TUNNEL_303" : "You do not have permission to access this connection. If you require access, please ask your system administrator to add you the list of allowed users, or check your system settings.", - "ERROR_TUNNEL_308" : "The Guacamole server has closed the connection because there has been no response from your browser for long enough that it appeared to be disconnected. This is commonly caused by network problems, such as spotty wireless signal, or simply very slow network speeds. Please check your network and try again.", - "ERROR_TUNNEL_31D" : "The Guacamole server is denying access to this connection because you have exhausted the limit for simultaneous connection use by an individual user. Please close one or more connections and try again.", - "ERROR_TUNNEL_DEFAULT" : "An internal error has occurred within the Guacamole server, and the connection has been terminated. If the problem persists, please notify your system administrator, or check your system logs.", - - "ERROR_UPLOAD_100" : "File transfer is either not supported or not enabled. Please contact your system administrator, or check your system logs.", - "ERROR_UPLOAD_201" : "Too many files are currently being transferred. Please wait for existing transfers to complete, and then try again.", - "ERROR_UPLOAD_202" : "The file cannot be transferred because the remote desktop server is taking too long to respond. Please try again or contact your system administrator.", - "ERROR_UPLOAD_203" : "The remote desktop server encountered an error during transfer. Please try again or contact your system administrator.", - "ERROR_UPLOAD_204" : "The destination for the file transfer does not exist. Please check that the destination exists and try again.", - "ERROR_UPLOAD_205" : "The destination for the file transfer is currently locked. Please wait for any in-progress tasks to complete and try again.", - "ERROR_UPLOAD_301" : "You do not have permission to upload this file because you are not logged in. Please log in and try again.", - "ERROR_UPLOAD_303" : "You do not have permission to upload this file. If you require access, please check your system settings, or check with your system administrator.", - "ERROR_UPLOAD_308" : "The file transfer has stalled. This is commonly caused by network problems, such as spotty wireless signal, or simply very slow network speeds. Please check your network and try again.", - "ERROR_UPLOAD_31D" : "Too many files are currently being transferred. Please wait for existing transfers to complete, and then try again.", - "ERROR_UPLOAD_DEFAULT" : "An internal error has occurred within the Guacamole server, and the connection has been terminated. If the problem persists, please notify your system administrator, or check your system logs.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Text copied/cut within Guacamole will appear here. Changes to the text below will affect the remote clipboard.", - "HELP_INPUT_METHOD_NONE" : "No input method is used. Keyboard input is accepted from a connected, physical keyboard.", - "HELP_INPUT_METHOD_OSK" : "Display and accept input from the built-in Guacamole on-screen keyboard. The on-screen keyboard allows typing of key combinations that may otherwise be impossible (such as Ctrl-Alt-Del).", - "HELP_INPUT_METHOD_TEXT" : "Allow typing of text, and emulate keyboard events based on the typed text. This is necessary for devices such as mobile phones that lack a physical keyboard.", - "HELP_MOUSE_MODE" : "Determines how the remote mouse behaves with respect to touches.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Tap to click. The click occurs at the location of the touch.", - "HELP_MOUSE_MODE_RELATIVE" : "Drag to move the mouse pointer and tap to click. The click occurs at the location of the pointer.", - "HELP_SHARE_LINK" : "The current connection is being shared, and can be accessed by anyone with the following {LINKS, plural, one{link} other{links}}:", - - "INFO_ANONYMOUS_USER_COUNT" : "Anonymous{COUNT, plural, one{} other{ (#)}}", - "INFO_CONNECTION_SHARED" : "This connection is now shared.", - "INFO_NO_FILE_TRANSFERS" : "No file transfers.", - "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", - - "NAME_INPUT_METHOD_NONE" : "None", - "NAME_INPUT_METHOD_OSK" : "On-screen keyboard", - "NAME_INPUT_METHOD_TEXT" : "Text input", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Touchscreen", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIENT_MESSAGES" : "Messages", - "SECTION_HEADER_CLIPBOARD" : "Clipboard", - "SECTION_HEADER_DEVICES" : "Devices", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_FILE_TRANSFERS" : "File Transfers", - "SECTION_HEADER_INPUT_METHOD" : "Input method", - - "SECTION_HEADER_MOUSE_MODE" : "Mouse emulation mode", - - "TEXT_ANONYMOUS_USER_JOINED" : "An anonymous user has joined the connection.", - "TEXT_ANONYMOUS_USER_LEFT" : "An anonymous user has left the connection.", - "TEXT_ZOOM_AUTO_FIT" : "Automatically fit to browser window", - "TEXT_CLIENT_STATUS_IDLE" : "Idle.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Connecting to Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "You have been disconnected.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "The network connection to the Guacamole server appears unstable.", - "TEXT_CLIENT_STATUS_WAITING" : "Connected to Guacamole. Waiting for response...", - "TEXT_USER_JOINED" : "{USERNAME} has joined the connection.", - "TEXT_USER_LEFT" : "{USERNAME} has left the connection.", - "TEXT_RECONNECT_COUNTDOWN" : "Reconnecting in {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Hide", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Show", - - "FIELD_HEADER_BACKGROUND" : "Background", - "FIELD_HEADER_FOREGROUND" : "Foreground", - - "FIELD_OPTION_CUSTOM" : "Custom...", - - "SECTION_HEADER_DETAILS" : "Details:" - - }, - - "IMPORT": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_BROWSE" : "Browse for File", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", - "ACTION_VIEW_FORMAT_HELP" : "View Format Tips", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_IMPORT_CONNECTIONS" : "Import Connections", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - "DIALOG_HEADER_SUCCESS" : "Success", - - "ERROR_AMBIGUOUS_CSV_HEADER" : "Ambiguous CSV Header \"{HEADER}\" could be either a connection attribute or parameter", - "ERROR_AMBIGUOUS_PARENT_GROUP" : "Both group and parentIdentifier may be not specified at the same time", - "ERROR_ARRAY_REQUIRED" : "The provided file must contain a list of connections", - "ERROR_DETECTED_INVALID_TYPE" : "Unsupported file type. Please make sure the file is valid CSV, JSON, or YAML.", - "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "Duplicated connection \"{NAME}\" at \"{PATH}\" in import file", - "ERROR_DUPLICATE_CSV_HEADER" : "Duplicate CSV Header: {HEADER}", - "ERROR_EMPTY_FILE" : "The provided file is empty", - "ERROR_INVALID_CSV_HEADER" : "Invalid CSV Header \"{HEADER}\" is neither an attribute or parameter", - "ERROR_INVALID_MIME_TYPE" : "Unsupported file type: \"{TYPE}\"", - "ERROR_INVALID_GROUP" : "No group matching \"{GROUP}\" found", - "ERROR_INVALID_GROUP_IDENTIFIER" : "No connection group with identifier \"{IDENTIFIER}\" found", - "ERROR_INVALID_GROUP_TYPE" : "Invalid group - must be a string.", - "ERROR_INVALID_PROTOCOL" : "Invalid protocol \"{PROTOCOL}\"", - "ERROR_INVALID_USER_GROUPS_TYPE" : "Invalid user groups - must be an array of user group identifiers.", - "ERROR_INVALID_USERS_TYPE" : "Invalid users - must be an array of user identifiers.", - "ERROR_NO_FILE_SUPPLIED" : "Please select a file to import", - "ERROR_PARSE_FAILURE_CSV" : "Please make sure your file is valid CSV. Parsing failed with error \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_JSON" : "Please make sure your file is valid JSON. Parsing failed with error \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_YAML" : "Please make sure your file is valid YAML. Parsing failed with error \"{ERROR}\". ", - "ERROR_REJECT_UPDATE_CONNECTION" : "Connection \"{NAME}\" already exists at \"{PATH}\"", - "ERROR_REQUIRED_NAME_CONNECTION" : "The connection name is required", - "ERROR_REQUIRED_PROTOCOL_CONNECTION" : "The connection protocol is required", - "ERROR_REQUIRED_NAME_FILE" : "No connection name found in the provided file", - "ERROR_REQUIRED_PROTOCOL_FILE" : "No connection protocol found in the provided file", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "Replace/Update existing connections", - "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "Reset permissions", - - "HELP_CSV_DESCRIPTION" : "A connection import CSV file has one connection record per row. Each column will specify a connection field. At minimum the connection name and protocol must be specified.", - "HELP_CSV_EXAMPLE" : "name,protocol,username,password,hostname,group,users,groups,guacd-encryption (attribute)\nconn1,vnc,alice,pass1,conn1.web.com,ROOT,guac user 1;guac user 2,Connection 1 Users,none\nconn2,rdp,bob,pass2,conn2.web.com,ROOT/Parent Group,guac user 1,,ssl\nconn3,ssh,carol,pass3,conn3.web.com,ROOT/Parent Group/Child Group,guac user 2;guac user 3,,\nconn4,kubernetes,,,,,,,", - "HELP_CSV_MORE_DETAILS" : "The CSV header for each row specifies the connection field. The connection group ID that the connection should be imported into may be directly specified with \"parentIdentifier\", or the path to the parent group may be specified using \"group\" as shown below. In most cases, there should be no conflict between fields, but if needed, an \" (attribute)\" or \" (parameter)\" suffix may be added to disambiguate. Lists of user or user group identifiers must be semicolon-separated.¹", - "HELP_FILE_TYPE_DESCRIPTION" : "Three file types are supported for connection import: CSV, JSON, and YAML. The same data may be specified by each file type. This must include the connection name and protocol. Optionally, a connection group location, a list of users and/or user groups to grant access, connection parameters, or connection protocols may also be specified. Any users or user groups that do not exist in the current data source will be automatically created. Note that any existing connection permissions will not be removed for updated connections, unless \"Reset permissions\" is checked.", - "HELP_FILE_TYPE_HEADER" : "File Types", - "HELP_JSON_DESCRIPTION" : "A connection import JSON file is a list of connection objects. At minimum the connection name and protocol must be specified in each connection object.", - "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"conn1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"username\": \"alice\", \"password\": \"pass1\", \"hostname\": \"conn1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac user 1\", \"guac user 2\" ],\n \"groups\": [ \"Connection 1 Users\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"username\": \"bob\", \"password\": \"pass2\", \"hostname\": \"conn2.web.com\" \\},\n \"group\": \"ROOT/Parent Group\",\n \"users\": [ \"guac user 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"username\": \"carol\", \"password\": \"pass3\", \"hostname\": \"conn3.web.com\" \\},\n \"group\": \"ROOT/Parent Group/Child Group\",\n \"users\": [ \"guac user 2\", \"guac user 3\" ]\n \\},\n \\{\n \"name\": \"conn4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", - "HELP_JSON_MORE_DETAILS" : "The connection group ID that the connection should be imported into may be directly specified with a \"parentIdentifier\" field, or the path to the parent group may be specified using a \"group\" field as shown below. An array of user and user group identifiers to grant access to may be specified per connection.", - "HELP_EXISTING_CONNECTION_MODE" : "Entirely replace/update existing connections if their names and parent connection groups match the values in the provided file. If unchecked, attempting to import a connection with the same name and parent connection group of an existing connection will be considered an error.", - "HELP_EXISTING_PERMISSION_MODE" : "Fully reset the permissions granted for all connections in the provided file to the permissions specified in that file. If no permissions are specified, all relevant connection permissions will be revoked. If unchecked, existing permissions are preserved, and any permissions specified in the file will be added.", - "HELP_SEMICOLON_FOOTNOTE" : "If present, semicolons can be escaped with a backslash, e.g. \"first\\\\;last\"", - "HELP_UPLOAD_DROP_TITLE" : "Drop a File Here", - "HELP_UPLOAD_FILE_TYPES" : "CSV, JSON, or YAML", - "HELP_YAML_DESCRIPTION" : "A connection import YAML file is a list of connection objects with exactly the same structure as the JSON format.", - "HELP_YAML_EXAMPLE" : "---\n - name: conn1\n protocol: vnc\n parameters:\n username: alice\n password: pass1\n hostname: conn1.web.com\n group: ROOT\n users:\n - guac user 1\n - guac user 2\n groups:\n - Connection 1 Users\n attributes:\n guacd-encryption: none\n - name: conn2\n protocol: rdp\n parameters:\n username: bob\n password: pass2\n hostname: conn2.web.com\n group: ROOT/Parent Group\n users:\n - guac user 1\n attributes:\n guacd-encryption: none\n - name: conn3\n protocol: ssh\n parameters:\n username: carol\n password: pass3\n hostname: conn3.web.com\n group: ROOT/Parent Group/Child Group\n users:\n - guac user 2\n - guac user 3\n - name: conn4\n protocol: kubernetes", - - "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} {NUMBER, plural, one{connection} other{connections}} imported successfully.", - - "SECTION_HEADER_CONNECTION_IMPORT" : "Connection Import", - "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "Connection Import File Format", - "SECTION_HEADER_CSV" : "CSV Format", - "SECTION_HEADER_JSON" : "JSON Format", - "SECTION_HEADER_YAML" : "YAML Format", - - "TABLE_HEADER_ERRORS" : "Errors", - "TABLE_HEADER_GROUP" : "Group", - "TABLE_HEADER_NAME" : "Name", - "TABLE_HEADER_PROTOCOL" : "Protocol", - "TABLE_HEADER_ROW_NUMBER" : "Row #" - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Default (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Click to show password", - "HELP_HIDE_PASSWORD" : "Click to hide password" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "No recent connections.", - - "PASSWORD_CHANGED" : "Password changed.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "All Connections", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Recent Connections" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "Anonymous" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Invalid Login", - - "FIELD_HEADER_USERNAME" : "Username", - "FIELD_HEADER_PASSWORD" : "Password" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Connection", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Location:", - "FIELD_HEADER_NAME" : "Name:", - "FIELD_HEADER_PROTOCOL" : "Protocol:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Active Now", - "INFO_CONNECTION_NOT_USED" : "This connection has not yet been used.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Edit Connection", - "SECTION_HEADER_HISTORY" : "Usage History", - "SECTION_HEADER_PARAMETERS" : "Parameters", - - "TABLE_HEADER_HISTORY_USERNAME" : "Username", - "TABLE_HEADER_HISTORY_START" : "Start Time", - "TABLE_HEADER_HISTORY_DURATION" : "Duration", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Remote Host", - - "TEXT_CONFIRM_DELETE" : "Connections cannot be restored after they have been deleted. Are you sure you want to delete this connection?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Connection Group", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Location:", - "FIELD_HEADER_NAME" : "Name:", - "FIELD_HEADER_TYPE" : "Type:", - - "NAME_TYPE_BALANCING" : "Balancing", - "NAME_TYPE_ORGANIZATIONAL" : "Organizational", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Edit Connection Group", - - "TEXT_CONFIRM_DELETE" : "Connection groups cannot be restored after they have been deleted. Are you sure you want to delete this connection group?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Sharing Profile", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Name:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Primary Connection:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Edit Sharing Profile", - "SECTION_HEADER_PARAMETERS" : "Parameters", - - "TEXT_CONFIRM_DELETE" : "Sharing profiles cannot be restored after they have been deleted. Are you sure you want to delete this sharing profile?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Delete User", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administer system:", - "FIELD_HEADER_AUDIT_SYSTEM" : "Audit system:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Change own password:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Create new users:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Create new user groups:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Create new connections:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Create new connection groups:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Create new sharing profiles:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "Login disabled:", - "FIELD_HEADER_USERNAME" : "Username:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "This user does not currently belong to any groups. Expand this section to add groups.", - - "INFO_READ_ONLY" : "Sorry, but this user account cannot be edited.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "No groups available.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "All Connections", - "SECTION_HEADER_CONNECTIONS" : "Connections", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Current Connections", - "SECTION_HEADER_EDIT_USER" : "Edit User", - "SECTION_HEADER_PERMISSIONS" : "Permissions", - "SECTION_HEADER_USER_GROUPS" : "Groups", - - "TEXT_CONFIRM_DELETE" : "Users cannot be restored after they have been deleted. Are you sure you want to delete this user?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Group", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_AUDIT_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_AUDIT_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "Disabled:", - "FIELD_HEADER_USER_GROUP_NAME" : "Group name:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "This group does not currently belong to any groups. Expand this section to add groups.", - "HELP_NO_MEMBER_USER_GROUPS" : "This group does not currently contain any groups. Expand this section to add groups.", - "HELP_NO_MEMBER_USERS" : "This group does not currently contain any users. Expand this section to add users.", - - "INFO_READ_ONLY" : "Sorry, but this group cannot be edited.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "No users available.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Edit Group", - "SECTION_HEADER_MEMBER_USERS" : "Member Users", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Member Groups", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Parent Groups", - - "TEXT_CONFIRM_DELETE" : "Groups cannot be restored after they have been deleted. Are you sure you want to delete this group?" - - }, - - "PLAYER" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", - "ACTION_PLAY" : "@:APP.ACTION_PLAY", - "ACTION_SHOW_KEY_LOG" : "Keystroke Log", - - "INFO_FRAME_EVENTS_LEGEND" : "On-screen Activity", - "INFO_KEY_EVENTS_LEGEND" : "Keyboard Activity", - "INFO_LOADING_RECORDING" : "Your recording is now being loaded. Please wait...", - "INFO_NO_KEY_LOG" : "Keystroke Log Unavailable", - "INFO_NUMBER_OF_RESULTS" : "{RESULTS} {RESULTS, plural, one{Match} other{Matches}}", - "INFO_SEEK_IN_PROGRESS" : "Seeking to the requested position. Please wait...", - - "FIELD_PLACEHOLDER_TEXT_BATCH_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Backspace key sends:", - "FIELD_HEADER_CA_CERT" : "Certificate authority certificate:", - "FIELD_HEADER_CLIENT_CERT" : "Client certificate:", - "FIELD_HEADER_CLIENT_KEY" : "Client key:", - "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:", - "FIELD_HEADER_CONTAINER" : "Container name:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:", - "FIELD_HEADER_DISABLE_COPY" : "Disable copying from terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", - "FIELD_HEADER_EXEC_COMMAND" : "Command (exec):", - "FIELD_HEADER_FONT_NAME" : "Font name:", - "FIELD_HEADER_FONT_SIZE" : "Font size:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_IGNORE_CERT" : "Ignore server certificate:", - "FIELD_HEADER_NAMESPACE" : "Namespace:", - "FIELD_HEADER_POD" : "Pod name:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Read-only:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", - "FIELD_HEADER_RECORDING_NAME" : "Recording name:", - "FIELD_HEADER_RECORDING_PATH" : "Recording path:", - "FIELD_HEADER_SCROLLBACK" : "Maximum scrollback size:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript path:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "@:APP.FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING", - "FIELD_HEADER_USE_SSL" : "Use SSL/TLS", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Black on white", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gray on black", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Green on black", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "White on black", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Authentication", - "SECTION_HEADER_BEHAVIOR" : "Terminal behavior", - "SECTION_HEADER_CLIPBOARD" : "Clipboard", - "SECTION_HEADER_CONTAINER" : "Container", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_RECORDING" : "Screen Recording", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Recording)", - "SECTION_HEADER_NETWORK" : "Network" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CERT_TOFU" : "Trust host certificate on first use:", - "FIELD_HEADER_CERT_FINGERPRINTS" : "Fingerprints of trusted host certificates:", - "FIELD_HEADER_CLIENT_NAME" : "Client name:", - "FIELD_HEADER_COLOR_DEPTH" : "Color depth:", - "FIELD_HEADER_CONSOLE" : "Administrator console:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Support audio in console:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automatically create drive:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", - "FIELD_HEADER_DISABLE_AUDIO" : "Disable audio:", - "FIELD_HEADER_DISABLE_AUTH" : "Disable authentication:", - "FIELD_HEADER_DISABLE_COPY" : "Disable copying from remote desktop:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Disable file download:", - "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Disable file upload:", - "FIELD_HEADER_DOMAIN" : "Domain:", - "FIELD_HEADER_DPI" : "Resolution (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Drive name:", - "FIELD_HEADER_DRIVE_PATH" : "Drive path:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Enable audio input (microphone):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Enable desktop composition (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Enable drive:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Enable font smoothing (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Enable full-window drag:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Enable menu animations:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Disable bitmap caching:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Disable off-screen caching:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Disable glyph caching:", - "FIELD_HEADER_DISABLE_GFX" : "Disable Graphics Pipeline Extension:", - "FIELD_HEADER_ENABLE_PRINTING" : "Enable printing:", - "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Enable theming:", - "FIELD_HEADER_ENABLE_TOUCH" : "Enable multi-touch:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Enable wallpaper:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Force lossless compression:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Domain:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Hostname:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Password:", - "FIELD_HEADER_GATEWAY_PORT" : "Port:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Username:", - "FIELD_HEADER_HEIGHT" : "Height:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_IGNORE_CERT" : "Ignore server certificate:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Initial program:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Load balance info/cookie:", - "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Line endings:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRINTER_NAME" : "Redirected printer name:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDP source ID:", - "FIELD_HEADER_READ_ONLY" : "Read-only:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Exclude touch events:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", - "FIELD_HEADER_RECORDING_NAME" : "Recording name:", - "FIELD_HEADER_RECORDING_PATH" : "Recording path:", - "FIELD_HEADER_RESIZE_METHOD" : "Resize method:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameters:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Working directory:", - "FIELD_HEADER_REMOTE_APP" : "Program:", - "FIELD_HEADER_SECURITY" : "Security mode:", - "FIELD_HEADER_SERVER_LAYOUT" : "Keyboard layout:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Default upload directory:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Disable file download:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Disable file upload:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Public host key (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive interval:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Password:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Private key:", - "FIELD_HEADER_SFTP_PUBLIC_KEY" : "Public key:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "File browser root directory:", - "FIELD_HEADER_SFTP_TIMEOUT" : "SFTP connection timeout:", - "FIELD_HEADER_SFTP_USERNAME" : "Username:", - "FIELD_HEADER_STATIC_CHANNELS" : "Static channel names:", - "FIELD_HEADER_TIMEOUT" : "Connection timeout", - "FIELD_HEADER_TIMEZONE" : "Time zone:", - "FIELD_HEADER_USERNAME" : "Username:", - "FIELD_HEADER_WIDTH" : "Width:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", - - "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Preserve as-is", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Display Update\" virtual channel (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconnect", - - "FIELD_OPTION_SECURITY_ANY" : "Any", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", - "FIELD_OPTION_SECURITY_RDP" : "RDP encryption", - "FIELD_OPTION_SECURITY_TLS" : "TLS encryption", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Czech (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Swiss German (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK English (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Canadian French (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Swiss French (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanese (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norwegian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguese Brazilian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguese (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Romanian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turkish-Q (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Authentication", - "SECTION_HEADER_BASIC_PARAMETERS" : "Basic Settings", - "SECTION_HEADER_CLIPBOARD" : "Clipboard", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Device Redirection", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_GATEWAY" : "Remote Desktop Gateway", - "SECTION_HEADER_LOAD_BALANCING" : "Load Balancing", - "SECTION_HEADER_NETWORK" : "Network", - "SECTION_HEADER_PERFORMANCE" : "Performance", - "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Screen Recording", - "SECTION_HEADER_REMOTEAPP" : "RemoteApp", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Backspace key sends:", - "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:", - "FIELD_HEADER_COMMAND" : "Execute command:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:", - "FIELD_HEADER_DISABLE_COPY" : "Disable copying from terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", - "FIELD_HEADER_FONT_NAME" : "Font name:", - "FIELD_HEADER_FONT_SIZE" : "Font size:", - "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", - "FIELD_HEADER_HOST_KEY" : "Public host key (Base64):", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_LOCALE" : "Language/Locale ($LANG):", - "FIELD_HEADER_USERNAME" : "Username:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRIVATE_KEY" : "Private key:", - "FIELD_HEADER_PUBLIC_KEY" : "Public key:", - "FIELD_HEADER_SCROLLBACK" : "Maximum scrollback size:", - "FIELD_HEADER_READ_ONLY" : "Read-only:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", - "FIELD_HEADER_RECORDING_NAME" : "Recording name:", - "FIELD_HEADER_RECORDING_PATH" : "Recording path:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Server keepalive interval:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Disable file download:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "File browser root directory:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Disable file upload:", - "FIELD_HEADER_TERMINAL_TYPE" : "Terminal type:", - "FIELD_HEADER_TIMEOUT" : "Connection timeout:", - "FIELD_HEADER_TIMEZONE" : "Time zone ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript path:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "@:APP.FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Black on white", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gray on black", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Green on black", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "White on black", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Authentication", - "SECTION_HEADER_BEHAVIOR" : "Terminal behavior", - "SECTION_HEADER_CLIPBOARD" : "Clipboard", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_NETWORK" : "Network", - "SECTION_HEADER_RECORDING" : "Screen Recording", - "SECTION_HEADER_SESSION" : "Session / Environment", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Recording)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Backspace key sends:", - "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:", - "FIELD_HEADER_DISABLE_COPY" : "Disable copying from terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", - "FIELD_HEADER_FONT_NAME" : "Font name:", - "FIELD_HEADER_FONT_SIZE" : "Font size:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Login failure regular expression:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Login success regular expression:", - "FIELD_HEADER_USERNAME" : "Username:", - "FIELD_HEADER_USERNAME_REGEX" : "Username regular expression:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSWORD_REGEX" : "Password regular expression:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Read-only:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", - "FIELD_HEADER_RECORDING_NAME" : "Recording name:", - "FIELD_HEADER_RECORDING_PATH" : "Recording path:", - "FIELD_HEADER_SCROLLBACK" : "Maximum scrollback size:", - "FIELD_HEADER_TERMINAL_TYPE" : "Terminal type:", - "FIELD_HEADER_TIMEOUT" : "Connection timeout:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript path:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "@:APP.FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Black on white", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gray on black", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Green on black", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "White on black", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Authentication", - "SECTION_HEADER_BEHAVIOR" : "Terminal behavior", - "SECTION_HEADER_CLIPBOARD" : "Clipboard", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_RECORDING" : "Screen Recording", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Recording)", - "SECTION_HEADER_NETWORK" : "Network", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Audio server name:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Encoding:", - "FIELD_HEADER_COLOR_DEPTH" : "Color depth:", - "FIELD_HEADER_COMPRESS_LEVEL" : "Compression level:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", - "FIELD_HEADER_CURSOR" : "Cursor:", - "FIELD_HEADER_DEST_HOST" : "Destination host:", - "FIELD_HEADER_DEST_PORT" : "Destination port:", - "FIELD_HEADER_DISABLE_COPY" : "Disable copying from remote desktop:", - "FIELD_HEADER_DISABLE_DISPLAY_RESIZE" : "Disable resize of remote display:", - "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", - "FIELD_HEADER_DISABLE_SERVER_INPUT" : "Disable server input when client is connected:", - "FIELD_HEADER_ENABLE_AUDIO" : "Enable audio:", - "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", - "FIELD_HEADER_ENCODINGS" : "Display encodings:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Force lossless compression:", - "FIELD_HEADER_HOSTNAME" : "Hostname:", - "FIELD_HEADER_USERNAME" : "Username:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_QUALITY_LEVEL" : "Display quality:", - "FIELD_HEADER_READ_ONLY" : "Read-only:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", - "FIELD_HEADER_RECORDING_NAME" : "Recording name:", - "FIELD_HEADER_RECORDING_PATH" : "Recording path:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Default upload directory:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Disable file download:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Disable file upload:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Public host key (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive interval:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Password:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Private key:", - "FIELD_HEADER_SFTP_PUBLIC_KEY" : "Public key:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "File browser root directory:", - "FIELD_HEADER_SFTP_TIMEOUT" : "SFTP connection timeout:", - "FIELD_HEADER_SFTP_USERNAME" : "Username:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Swap red/blue components:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", - "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", - "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_COMPRESS_LEVEL_0" : "0", - "FIELD_OPTION_COMPRESS_LEVEL_1" : "1", - "FIELD_OPTION_COMPRESS_LEVEL_2" : "2", - "FIELD_OPTION_COMPRESS_LEVEL_3" : "3", - "FIELD_OPTION_COMPRESS_LEVEL_4" : "4", - "FIELD_OPTION_COMPRESS_LEVEL_5" : "5", - "FIELD_OPTION_COMPRESS_LEVEL_6" : "6", - "FIELD_OPTION_COMPRESS_LEVEL_7" : "7", - "FIELD_OPTION_COMPRESS_LEVEL_8" : "8", - "FIELD_OPTION_COMPRESS_LEVEL_9" : "9", - "FIELD_OPTION_COMPRESS_LEVEL_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Local", - "FIELD_OPTION_CURSOR_REMOTE" : "Remote", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "FIELD_OPTION_QUALITY_LEVEL_0" : "0", - "FIELD_OPTION_QUALITY_LEVEL_1" : "1", - "FIELD_OPTION_QUALITY_LEVEL_2" : "2", - "FIELD_OPTION_QUALITY_LEVEL_3" : "3", - "FIELD_OPTION_QUALITY_LEVEL_4" : "4", - "FIELD_OPTION_QUALITY_LEVEL_5" : "5", - "FIELD_OPTION_QUALITY_LEVEL_6" : "6", - "FIELD_OPTION_QUALITY_LEVEL_7" : "7", - "FIELD_OPTION_QUALITY_LEVEL_8" : "8", - "FIELD_OPTION_QUALITY_LEVEL_9" : "9", - "FIELD_OPTION_QUALITY_LEVEL_EMPTY" : "", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Audio", - "SECTION_HEADER_AUTHENTICATION" : "Authentication", - "SECTION_HEADER_CLIPBOARD" : "Clipboard", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_NETWORK" : "Network", - "SECTION_HEADER_RECORDING" : "Screen Recording", - "SECTION_HEADER_REPEATER" : "VNC Repeater", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Settings" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "History records for past connections are listed here and can be sorted by clicking the column headers. To search for specific records, enter a filter string and click \"Search\". Only records which match the provided filter string will be listed.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "No matching records", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Connection name", - "TABLE_HEADER_SESSION_DURATION" : "Duration", - "TABLE_HEADER_SESSION_LOGS" : "Logs", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Remote host", - "TABLE_HEADER_SESSION_STARTDATE" : "Start time", - "TABLE_HEADER_SESSION_USERNAME" : "Username", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_NEW_CONNECTION" : "New Connection", - "ACTION_NEW_CONNECTION_GROUP" : "New Group", - "ACTION_NEW_SHARING_PROFILE" : "New Sharing Profile", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Click or tap on a connection below to manage that connection. Depending on your access level, connections can be added and deleted, and their properties (protocol, hostname, port, etc.) can be changed.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Connections" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Display language:", - "FIELD_HEADER_NUMBER_RECENT_CONNECTIONS" : "Number of Recent Connections to show:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSWORD_OLD" : "Current Password:", - "FIELD_HEADER_PASSWORD_NEW" : "New Password:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirm New Password:", - "FIELD_HEADER_SHOW_RECENT_CONNECTIONS" : "Display Recent Connections:", - "FIELD_HEADER_TIMEZONE" : "Timezone:", - "FIELD_HEADER_USERNAME" : "Username:", - - "HELP_APPEARANCE" : "Here you can enable or disable whether the \"Recent Connections\" section is shown on the home screen, and adjust the number of recent connections included.", - "HELP_DEFAULT_INPUT_METHOD" : "The default input method determines how keyboard events are received by Guacamole. Changing this setting may be necessary when using a mobile device, or when typing through an IME. This setting can be overridden on a per-connection basis within the Guacamole menu.", - "HELP_DEFAULT_MOUSE_MODE" : "The default mouse emulation mode determines how the remote mouse will behave in new connections with respect to touches. This setting can be overridden on a per-connection basis within the Guacamole menu.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Options below are related to the locale of the user and will impact how various parts of the interface are displayed.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "If you wish to change your password, enter your current password and the desired new password below, and click \"Update Password\". The change will take effect immediately.", - - "INFO_PASSWORD_CHANGED" : "Password changed.", - "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "User settings saved.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_APPEARANCE" : "Appearance", - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Default Input Method", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Default Mouse Emulation Mode", - "SECTION_HEADER_UPDATE_PASSWORD" : "Change Password" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "New User", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Click or tap on a user below to manage that user. Depending on your access level, users can be added and deleted, and their passwords can be changed.", - - "SECTION_HEADER_USERS" : "Users", - - "TABLE_HEADER_FULL_NAME" : "Full name", - "TABLE_HEADER_LAST_ACTIVE" : "Last active", - "TABLE_HEADER_ORGANIZATION" : "Organization", - "TABLE_HEADER_USERNAME" : "Username" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "New Group", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Click or tap on a group below to manage that group. Depending on your access level, groups can be added and deleted, and their member users and groups can be changed.", - - "SECTION_HEADER_USER_GROUPS" : "Groups", - - "TABLE_HEADER_USER_GROUP_NAME" : "Group Name" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Kill Sessions", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Kill Sessions", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "This page will be populated with currently-active connections. The connections listed and the ability to kill those connections is dependent upon your access level. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.", - - "INFO_NO_SESSIONS" : "No active sessions", - - "SECTION_HEADER_SESSIONS" : "Active Sessions", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Connection name", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Remote host", - "TABLE_HEADER_SESSION_STARTDATE" : "Active since", - "TABLE_HEADER_SESSION_USERNAME" : "Username", - - "TEXT_CONFIRM_DELETE" : "Are you sure you want to kill all selected sessions? The users using these sessions will be immediately disconnected." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Email address:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Full name:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organization:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Role:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/es.json b/guacamole/src/main/frontend/src/translations/es.json deleted file mode 100644 index c4f8dbe909..0000000000 --- a/guacamole/src/main/frontend/src/translations/es.json +++ /dev/null @@ -1,1022 +0,0 @@ -{ - - "NAME" : "Spanish", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Cancelar", - "ACTION_CLONE" : "Clonar", - "ACTION_CONTINUE" : "Continuar", - "ACTION_DELETE" : "Borrar", - "ACTION_DELETE_SESSIONS" : "Finalizar Sesiones", - "ACTION_DOWNLOAD" : "Descargar", - "ACTION_LOGIN" : "Iniciar Sesión", - "ACTION_LOGOUT" : "Cerrar Sesión", - "ACTION_MANAGE_CONNECTIONS" : "Conexiones", - "ACTION_MANAGE_PREFERENCES" : "Preferencias", - "ACTION_MANAGE_SETTINGS" : "Configuración", - "ACTION_MANAGE_SESSIONS" : "Sesiones Activas", - "ACTION_MANAGE_USERS" : "Usuarios", - "ACTION_MANAGE_USER_GROUPS" : "Grupos de Usuarios", - "ACTION_NAVIGATE_BACK" : "Atrás", - "ACTION_NAVIGATE_HOME" : "Inicio", - "ACTION_SAVE" : "Guardar", - "ACTION_SEARCH" : "Buscar", - "ACTION_SHARE" : "Compartir", - "ACTION_UPDATE_PASSWORD" : "Actualizar Contraseña", - "ACTION_VIEW_HISTORY" : "Historial", - - "DIALOG_HEADER_ERROR" : "Error", - - "ERROR_PAGE_UNAVAILABLE" : "Ha ocurrido un error y esta acción no se puede completar. Si el problema persiste, notifique al administrador del sistema o verifique los registros del sistema.", - "ERROR_PASSWORD_BLANK" : "La contraseña no puede estar en blanco.", - "ERROR_PASSWORD_MISMATCH" : "Las contraseñas no coinciden.", - - "FIELD_HEADER_PASSWORD" : "Contraseña:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Validar Contraseña:", - - "FIELD_PLACEHOLDER_FILTER" : "Filtros", - - "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Actualmente en uso por {USERS} {USERS, plural, one{user} other{users}}.", - - "TEXT_ANONYMOUS_USER" : "Anónimo", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{second} other{seconds}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{hour} other{hours}}} day{{VALUE, plural, one{day} other{days}}} other{}}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Limpiar", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "Disconnect", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Reconectar", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_UPLOAD_FILES" : "Subir ficheros", - - "DIALOG_HEADER_CONNECTING" : "Conectando", - "DIALOG_HEADER_CONNECTION_ERROR" : "Error de conexión", - "DIALOG_HEADER_DISCONNECTED" : "Desconectado", - - "ERROR_CLIENT_201" : "Esta conexión se ha cerrado porque el servidor esta ocupado. Por favor espera unos minutos e intenta de nuevo.", - "ERROR_CLIENT_202" : "El servidor Guacamole ha cerrado la conexión porque el escritorio remoto está tardando mucho en responder. Por favor intente de nuevo o contacte al administrador del sistema.", - "ERROR_CLIENT_203" : "El servidor de escritorio remoto encontró un error y ha cerrado la conexión. Por favor, intente de nuevo o contacte al administrador del sistema.", - "ERROR_CLIENT_207" : "El servidor de escritorio remoto no está disponible actualmente. Si el problema persiste, por favor notifique al administrador o verifique los registros del sistema.", - "ERROR_CLIENT_208" : "El servidor de escritorio remoto no está disponible actualmente. Si el problema persiste, por favor notifique al administrador o verifique los registros del sistema.", - "ERROR_CLIENT_209" : "El servidor de escritorio remoto ha cerrado la conexión porque hay conflicto con otra conexión. Por favor intenta de nuevo mas tarde.", - "ERROR_CLIENT_20A" : "El servidor de escritorio remoto ha cerrado la conexión porque parece estar inactivo. Si esto fué inesperado, notifíquelo al administrador o verifique la configuración del sistema.", - "ERROR_CLIENT_20B" : "El servidor de escritorio remoto ha forzado el cierre de la conexión. Si esto fué inesperado, notifíquelo al administrador o verifique la configuración del sistema.", - "ERROR_CLIENT_301" : "Inicio fallido. Por favor vuelva a conectar e intente de nuevo.", - "ERROR_CLIENT_303" : "El servidor de escritorio remoto ha denegado el acceso a esta conexión. Si necesita acceso, por favor solicítelo a un administrador para que permita el acceso de su cuenta, o verifique la configuración del sistema.", - "ERROR_CLIENT_308" : "El servidor Guacamole ha cerrado la conexión porque no ha habido respuesta del navegador por tiempo suficiente como para asumir que está desconectado. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intente de nuevo.", - "ERROR_CLIENT_31D" : "El servidor Guacamole está denegando el acceso a esta conexión porque ha agotado el límite de conexiones simultaneas por usuario. Por favor cierre una o mas conexiones e intente de nuevo.", - "ERROR_CLIENT_DEFAULT" : "Ha ocurrido un error interno en el servidor Guacamole y la conexión ha finalizado. Si el problema persiste, por favor notifíquelo al administrador o verifique los registros del sistema.", - - "ERROR_TUNNEL_201" : "El servidor Guacamole ha rechazado este intento de conexión porque hay muchas conexiones activas. Por favor espere unos minutos e intente de nuevo.", - "ERROR_TUNNEL_202" : "Se ha cerrado la conexión porque el servidor está tardando mucho en responder. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intenta de nuevo.", - "ERROR_TUNNEL_203" : "El servidor encontró un error y ha cerrado la conexión. Por favor intente de nuevo o contacte al administrador del sistema.", - "ERROR_TUNNEL_204" : "La conexión solicitada no existe. Por favor verifique el nombre de conexión e intente de nuevo.", - "ERROR_TUNNEL_205" : "Esta conexión esta actualmente en uso y el acceso concurrente a la misma no está permitido. Por favor intente de nuevo mas tarde.", - "ERROR_TUNNEL_207" : "El servidor Guacamole no esta disponible actualmente. Por favor verifique la configuración de red e intente de nuevo.", - "ERROR_TUNNEL_208" : "El servidor Guacamole no está aceptando conexiones. Por favor verifique la conexión a red e intente de nuevo.", - "ERROR_TUNNEL_301" : "No tiene permiso para acceder a esta conexión porque no ha iniciado sesión. Por favor incie sesión e intente de nuevo.", - "ERROR_TUNNEL_303" : "No tiene permiso para acceder a esta conexión. Si requiere acceso, por favor solicite al administrador que le agregue a la lista de usuarios permitidos o verifique la configuración del sistema.", - "ERROR_TUNNEL_308" : "El servidor Guacamole ha cerrado la conexión porque ho ha habido respuesta desde el navegador por tiempo suficiente como para asumir que está desconectado. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intente de nuevo.", - "ERROR_TUNNEL_31D" : "El servidor Guacamole esta denegando el acceso a esta conexión porque ha agotado el límite de conexiones simultaneas por usuario. Por favor cierre una o mas conexiones e intente de nuevo.", - "ERROR_TUNNEL_DEFAULT" : "Ha ocurrido un error interno en el servidor Guacamole y la conexión ha finalizado. Si el problema persiste, por favor notifíquelo al administrador o verifique los registros del sistema.", - - "ERROR_UPLOAD_100" : "La transferencia de ficheros no está habilitada o soportada. Por favor contacte al administrador o verifique los registros del sistema.", - "ERROR_UPLOAD_201" : "Se estan transfiriendo muchos ficheros actualmente. Por favor espere a que se completen las transferencias existentes e intente de nuevo.", - "ERROR_UPLOAD_202" : "El fichero no se puede transferir porque el servidor de escritorio remoto está tardando demasiado en responder. Por favor intente de nuevo o contacte con el administrador del sistema.", - "ERROR_UPLOAD_203" : "El servidor de escritorio remoto encontró un error durante la transferencia. Por favor intente denuevo o contacte con el administrador del sistema.", - "ERROR_UPLOAD_204" : "El destino para la transferencia de fichero no existe. Por favor verifique que exista el destino e intente de nuevo.", - "ERROR_UPLOAD_205" : "El destino para la transferencia de fichero está bloqueado. Por favor espere a que finalicen las tareas en progreso e intente de nuevo.", - "ERROR_UPLOAD_301" : "No tiene permiso para subir este fichero porque no ha iniciado sesión. Por favor inicie sesión e intente de nuevo.", - "ERROR_UPLOAD_303" : "No tiene permiso para subir este fichero. Si necesita acceso, por favor verifique la configuración del sistema o contacte con el administrador del sistema.", - "ERROR_UPLOAD_308" : "La transferencia de ficheros se ha parado. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intente de nuevo.", - "ERROR_UPLOAD_31D" : "Se estan transfiriendo muchos ficheros actualmente. Por favor espere a que finalicen las transferencias de fichero existentes e intente de nuevo.", - "ERROR_UPLOAD_DEFAULT" : "Ha ocurrido un error interno en el servidor Guacamole y la conexión ha finalizado. Si el problema persiste, por favor notifíquelo al administrador o verifique los registros del sistema.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Aquí aparecerá el texto copiado/cortado en Guacamole. Los cambios en el texto de abajo afectaran al portapapeles remoto.", - "HELP_INPUT_METHOD_NONE" : "No se está usando un método de entrada. La entrada de teclado se acepta desde un teclado físico conectado.", - "HELP_INPUT_METHOD_OSK" : "Muestra y acepta entrada desde el teclado en pantalla incorporado de Guacamole. El teclado en pantalla permite escribir combinaciones que serían imposible de otro modo (como Ctrl-Alt-Sup).", - "HELP_INPUT_METHOD_TEXT" : "Permite escribir texto y emular eventos de teclado basados en el texto escrito. Este modo es necesario para dispositivos como teléfonos móviles que no tienen teclado físico.", - "HELP_MOUSE_MODE" : "Determina el comportamiento del ratón remoto respecto a los toques.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Toque para clic. El clic ocurre en la ubicación del toque.", - "HELP_MOUSE_MODE_RELATIVE" : "Arrastre para mover el puntero del ratón y toque para hacer clic. El clic ocurre en la ubicación del puntero.", - "HELP_SHARE_LINK" : "Se está compartiendo la conexión actual y puede acceder a la misma cualquiera con el siguiente {LINKS, plural, one{link} other{links}}:", - - "INFO_CONNECTION_SHARED" : "Esta conexión está compartida.", - "INFO_NO_FILE_TRANSFERS" : "No hay transferencia de ficheros.", - - "NAME_INPUT_METHOD_NONE" : "Ninguno", - "NAME_INPUT_METHOD_OSK" : "Teclado en pantalla", - "NAME_INPUT_METHOD_TEXT" : "Entrada de Texto", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Pantalla táctil", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIPBOARD" : "Portapapeles", - "SECTION_HEADER_DEVICES" : "Dispositivos", - "SECTION_HEADER_DISPLAY" : "Monitor", - "SECTION_HEADER_FILE_TRANSFERS" : "Transferencia de ficheros", - "SECTION_HEADER_INPUT_METHOD" : "Método de entrada", - "SECTION_HEADER_MOUSE_MODE" : "Modo de emulación de ratón", - - "TEXT_ZOOM_AUTO_FIT" : "Ajustar automáticamente a la ventana del navegador", - "TEXT_CLIENT_STATUS_IDLE" : "Inactivo.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Conectando a Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Ha sido desconectado.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "La conexión al servidor Guacamole es inestable.", - "TEXT_CLIENT_STATUS_WAITING" : "Conectado a Guacamole. Esperando respuesta...", - "TEXT_RECONNECT_COUNTDOWN" : "Reconectando en {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/es-es-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Ocultar", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Mostrar", - - "FIELD_HEADER_BACKGROUND" : "Fondo", - "FIELD_HEADER_FOREGROUND" : "Primer plano", - - "FIELD_OPTION_CUSTOM" : "Custom...", - - "SECTION_HEADER_DETAILS" : "Details:" - - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Default (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "DD--MM-YYYY", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Clic para mostrar contraseña", - "HELP_HIDE_PASSWORD" : "Clic para esconder contraseña" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Sin conexiones recientes.", - - "PASSWORD_CHANGED" : "Contraseña cambiada.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Todas las conexiones", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Conexiones Recientes" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "Anónimo" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Inicio de sesión inválido", - - "FIELD_HEADER_USERNAME" : "Usuario", - "FIELD_HEADER_PASSWORD" : "Contraseña" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Borrar conexión", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Ubicación:", - "FIELD_HEADER_NAME" : "Nombre:", - "FIELD_HEADER_PROTOCOL" : "Protocolo:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Activo Ahora", - "INFO_CONNECTION_NOT_USED" : "Esta conexión no se ha usado todavía.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Editar Conexión", - "SECTION_HEADER_HISTORY" : "Historial de uso", - "SECTION_HEADER_PARAMETERS" : "Parámetros", - - "TABLE_HEADER_HISTORY_USERNAME" : "Usuario", - "TABLE_HEADER_HISTORY_START" : "Activo Desde", - "TABLE_HEADER_HISTORY_DURATION" : "Duración", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Host Remoto", - - "TEXT_CONFIRM_DELETE" : "Las conexiones no se pueden restaurar despues de haberlas eliminado. ¿Está seguro que quiere eliminar esta conexión?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Borrar Grupo de conexiones", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Ubicación:", - "FIELD_HEADER_NAME" : "Nombre:", - "FIELD_HEADER_TYPE" : "Tipo:", - - "NAME_TYPE_BALANCING" : "Balanceo", - "NAME_TYPE_ORGANIZATIONAL" : "Organizativo", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Editar Grupo de conexiones", - - "TEXT_CONFIRM_DELETE" : "Los Grupos de conexiones no se pueden restaurar despues de haberlos eliminado. ¿Esta seguro que quiere borrar este grupo de conexiones?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar perfil de compartir", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Nombre:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Conexión primaria:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Editar perfil de compartir", - "SECTION_HEADER_PARAMETERS" : "Parámetros", - - "TEXT_CONFIRM_DELETE" : "El perfil de compartir no se podrá restaurar después de eliminarlo. ¿Está seguro de que desea eliminar este perfil de compartir?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar Usuario", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrar sistema:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Cambiar contraseña:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Crear nuevos usuarios:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Crear nuevos grupo de usuarios:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Crear nuevas conexiones:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Crear nuevos grupos de conexión:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Crear nuevos perfiles de compartir:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "Inicio de sesión deshabilitado:", - "FIELD_HEADER_USERNAME" : "Nombre de usuario:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Este usuario no pertenece actualmente a ningún grupo. Expanda esta sección para agregar grupos.", - - "INFO_READ_ONLY" : "Lo siento, pero esta cuenta de usuario no puede ser editada.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "No hay grupos disponibles.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Todas las conexiones", - "SECTION_HEADER_CONNECTIONS" : "Conexiones", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Conexiones actuales", - "SECTION_HEADER_EDIT_USER" : "Editar Usuario", - "SECTION_HEADER_PERMISSIONS" : "Permisos", - "SECTION_HEADER_USER_GROUPS" : "Groups", - - "TEXT_CONFIRM_DELETE" : "Los usuarios no se pueden restaurar despues de haberlos eliminado. ¿Esta seguro de querer eliminar este usuario?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar grupo", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "Deshabilitado:", - "FIELD_HEADER_USER_GROUP_NAME" : "Nombre del grupo:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Este grupo no pertenece actualmente a ningún grupo. Expanda esta sección para agregar grupos.", - "HELP_NO_MEMBER_USER_GROUPS" : "Este grupo no contiene actualmente ningun grupo. Expanda esta sección para agregar grupos.", - "HELP_NO_MEMBER_USERS" : "Este grupo no contiene actualmente ningun usuario. Expanda esta sección para agregar usuarios.", - - "INFO_READ_ONLY" : "Lo siento, este grupo no se puede editar.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "No hay usuarios disponibles.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Editar grupo", - "SECTION_HEADER_MEMBER_USERS" : "Usuarios asociados", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Grupos asociados", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Grupo principal", - - "TEXT_CONFIRM_DELETE" : "Los grupos no se pueden restaurar despues de haberlos eliminado. ¿Esta seguro de querer eliminar este grupo?" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "La tecla de retroceso envía:", - "FIELD_HEADER_CA_CERT" : "Autoridad de certificación:", - "FIELD_HEADER_CLIENT_CERT" : "Certificado Cliente:", - "FIELD_HEADER_CLIENT_KEY" : "Clave Cliente:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de Color:", - "FIELD_HEADER_CONTAINER" : "Nombre de contenedor:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear automáticamente la ruta de grabación:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crear automáticamente la ruta de transcripción:", - "FIELD_HEADER_DISABLE_COPY" : "Desactivar copia desde el terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde el cliente:", - "FIELD_HEADER_EXEC_COMMAND" : "Commando (exec):", - "FIELD_HEADER_FONT_NAME" : "Nombre de fuente:", - "FIELD_HEADER_FONT_SIZE" : "Tamaño de fuente:", - "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado de servidor:", - "FIELD_HEADER_NAMESPACE" : "Namespace:", - "FIELD_HEADER_POD" : "Nombre de Pod:", - "FIELD_HEADER_PORT" : "Puerto:", - "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", - "FIELD_HEADER_RECORDING_NAME" : "Nombre de grabación:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta de grabación:", - "FIELD_HEADER_SCROLLBACK" : "Tamaño máximo de desplazamiento:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nombre de transcripción:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta de transcripción:", - "FIELD_HEADER_USE_SSL" : "Usar SSL/TLS", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Retroceso (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Borrar (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negro sobre blanco", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negro", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre negro", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanco sobre negro", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticación", - "SECTION_HEADER_BEHAVIOR" : "Comportamiento del terminal", - "SECTION_HEADER_CLIPBOARD" : "Portapapeles", - "SECTION_HEADER_CONTAINER" : "Contenedor", - "SECTION_HEADER_DISPLAY" : "Monitor", - "SECTION_HEADER_RECORDING" : "Grabación de Pantalla", - "SECTION_HEADER_TYPESCRIPT" : "Transcripción (Grabación de texto de la sesión)", - "SECTION_HEADER_NETWORK" : "Red" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Nombre de Cliente:", - "FIELD_HEADER_COLOR_DEPTH" : "Profundidad color:", - "FIELD_HEADER_CONSOLE" : "Consola de Administración:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Soporte de audio en consola:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Crear unidad automáticamente:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear ruta de grabación automáticamente:", - "FIELD_HEADER_DISABLE_AUDIO" : "Desactivar audio:", - "FIELD_HEADER_DISABLE_AUTH" : "Desactivar autenticación:", - "FIELD_HEADER_DISABLE_COPY" : "Desactivar copia desde escritorio remoto:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde cliente:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", - "FIELD_HEADER_DOMAIN" : "Dominio:", - "FIELD_HEADER_DPI" : "Resolución (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Unidad:", - "FIELD_HEADER_DRIVE_PATH" : "Ruta Unidad:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Activar entrada de audio (Microfono):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Activar composición de escritorio (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Activar unidad:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Activar suavizado de fuente (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Activar arrastre de ventana completa:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Activar animaciones de menú:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Desactivar caché bitmap:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Desactivar caché off-screen:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Desactivar caché glyph:", - "FIELD_HEADER_ENABLE_PRINTING" : "Activar impresión:", - "FIELD_HEADER_ENABLE_SFTP" : "Activar SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Activar temas:", - "FIELD_HEADER_ENABLE_TOUCH" : "Activar multi-touch:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Activar Fondo de pantalla:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Forzar compresión sin pérdida:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Dominio:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nombre de Host:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Contraseña:", - "FIELD_HEADER_GATEWAY_PORT" : "Puerto:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Usuario:", - "FIELD_HEADER_HEIGHT" : "Altura:", - "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado del servidor:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Programa de Inicio:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Información de carga balanceada info/cookie:", - "FIELD_HEADER_PASSWORD" : "Contraseña:", - "FIELD_HEADER_PORT" : "Puerto:", - "FIELD_HEADER_PRINTER_NAME" : "Nombre de impresora redireccionada:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconexión BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDP ID origen:", - "FIELD_HEADER_READ_ONLY" : "Solo lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Excluir eventos táctiles:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", - "FIELD_HEADER_RECORDING_NAME" : "Nombre grabación:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta grabación:", - "FIELD_HEADER_RESIZE_METHOD" : "Método de redimensión:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parametros:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Directorio de trabajo:", - "FIELD_HEADER_REMOTE_APP" : "Programa:", - "FIELD_HEADER_SECURITY" : "Modo seguridad:", - "FIELD_HEADER_SERVER_LAYOUT" : "Disposición teclado:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Directorio de subida por defecto:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Clave pública de host (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nombre de Host:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo Keepalive SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase de paso:", - "FIELD_HEADER_SFTP_PASSWORD" : "Contraseña:", - "FIELD_HEADER_SFTP_PORT" : "Puerto:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Llave Privada:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directorio raiz del navegador de ficheros:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", - "FIELD_HEADER_SFTP_USERNAME" : "Usuario:", - "FIELD_HEADER_STATIC_CHANNELS" : "Nombres de Canales estáticos:", - "FIELD_HEADER_TIMEZONE" : "Zora horaria:", - "FIELD_HEADER_USERNAME" : "Usuario:", - "FIELD_HEADER_WIDTH" : "Ancho:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección Broadcast para paquete WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC del host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Color verdadero (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 colores", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Actualizar pantalla\" canal virtual (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconectar", - - "FIELD_OPTION_SECURITY_ANY" : "Cualquier", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Autenticación de nivel de red)", - "FIELD_OPTION_SECURITY_RDP" : "Encriptación RDP", - "FIELD_OPTION_SECURITY_TLS" : "Encriptación TLS", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Checo (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danés (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Alemán Suizo (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Alemán (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Inglés UK (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Inglés US (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Español (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Francés Belga (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Francés Suizo (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francés (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Húngaro (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiano (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japones (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polaco (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugués Brazileño (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugués (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Rumano (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Sueco (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turco-Q (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticación", - "SECTION_HEADER_BASIC_PARAMETERS" : "Configuración básica", - "SECTION_HEADER_CLIPBOARD" : "Portapapeles", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirección dispositivo", - "SECTION_HEADER_DISPLAY" : "Visualización", - "SECTION_HEADER_GATEWAY" : "Puerta de enlace remota", - "SECTION_HEADER_LOAD_BALANCING" : "Balanceo de carga", - "SECTION_HEADER_NETWORK" : "Red", - "SECTION_HEADER_PERFORMANCE" : "Rendimiento", - "SECTION_HEADER_PRECONNECTION_PDU" : "Preconexión PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Grabación de pantalla", - "SECTION_HEADER_REMOTEAPP" : "Aplicación remota", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Tecla retroceso envía:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de color:", - "FIELD_HEADER_COMMAND" : "Ejecutar comando:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear ruta de grabación automáticamente:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crear ruta de transcripción automáticamente:", - "FIELD_HEADER_DISABLE_COPY" : "Desactivar copia desde el terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde el cliente:", - "FIELD_HEADER_FONT_NAME" : "Nombre de Fuente:", - "FIELD_HEADER_FONT_SIZE" : "Tamaño de Fuente:", - "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", - "FIELD_HEADER_HOST_KEY" : "Clave pública host (Base64):", - "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", - "FIELD_HEADER_LOCALE" : "Idioma/Especificación local ($LANG):", - "FIELD_HEADER_USERNAME" : "Usuario:", - "FIELD_HEADER_PASSWORD" : "Contraseña:", - "FIELD_HEADER_PASSPHRASE" : "Frase de paso:", - "FIELD_HEADER_PORT" : "Puerto:", - "FIELD_HEADER_PRIVATE_KEY" : "Llave Privada:", - "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", - "FIELD_HEADER_RECORDING_NAME" : "Nombre de grabación:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta de grabación:", - "FIELD_HEADER_SCROLLBACK" : "Tamaño máximo de desplazamiento:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Intervalo keepalive servidor:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directorio raiz del navegador de ficheros:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", - "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal:", - "FIELD_HEADER_TIMEZONE" : "Zona horaria ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nombre transcripción:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta transcripción:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección broadcast para paquete WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC del host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Retroceso (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Borrar (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negro sobre blanco", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negro", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre negro", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanco sobre negro", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticación", - "SECTION_HEADER_BEHAVIOR" : "Comportamiento del terminal", - "SECTION_HEADER_CLIPBOARD" : "Portapapeles", - "SECTION_HEADER_DISPLAY" : "Mostrar", - "SECTION_HEADER_NETWORK" : "Red", - "SECTION_HEADER_RECORDING" : "Grabación de pantalla", - "SECTION_HEADER_SESSION" : "Sesión / Entorno", - "SECTION_HEADER_TYPESCRIPT" : "Script de Escritura (Grabación sesión texto)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Tecla de retroceso envía:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de color:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear automáticamente ruta de grabación:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crear automáticamente ruta de transcripción:", - "FIELD_HEADER_DISABLE_COPY" : "Desactivar copia desde el terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde el cliente:", - "FIELD_HEADER_FONT_NAME" : "Nombre Fuente:", - "FIELD_HEADER_FONT_SIZE" : "Tamaño Fuente:", - "FIELD_HEADER_HOSTNAME" : "Nombre Host:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expresión regular de inicio de sesión fallido:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expresión regular de inicio de sesión correcto:", - "FIELD_HEADER_USERNAME" : "Usuario:", - "FIELD_HEADER_USERNAME_REGEX" : "Expresión regular nombre de usuario:", - "FIELD_HEADER_PASSWORD" : "Contraseña:", - "FIELD_HEADER_PASSWORD_REGEX" : "Contraseña expresión regular:", - "FIELD_HEADER_PORT" : "Puerto:", - "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", - "FIELD_HEADER_RECORDING_NAME" : "Nombre grabación:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta grabación:", - "FIELD_HEADER_SCROLLBACK" : "Tamaño máximo de desplazamiento:", - "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nombre transcripción:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta transcripción:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección broadcast para paquete WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC de host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Retroceso (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Borrar (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negro sobre blanco", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negro", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre negro", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanco sobre negro", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticación", - "SECTION_HEADER_BEHAVIOR" : "Comportamiento del Terminal", - "SECTION_HEADER_CLIPBOARD" : "Portapapeles", - "SECTION_HEADER_DISPLAY" : "Mostrar", - "SECTION_HEADER_RECORDING" : "Grabación pantalla", - "SECTION_HEADER_TYPESCRIPT" : "Transcripción (Próxima sesión de grabación)", - "SECTION_HEADER_NETWORK" : "Red", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Nombre servidor Audio:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codificación:", - "FIELD_HEADER_COLOR_DEPTH" : "Profundidad color:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear ruta de grabación automáticamente:", - "FIELD_HEADER_CURSOR" : "Cursor:", - "FIELD_HEADER_DEST_HOST" : "Host Destino:", - "FIELD_HEADER_DEST_PORT" : "Puerto Destino:", - "FIELD_HEADER_DISABLE_COPY" : "Desactivar copiar desde escritorio remoto:", - "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde cliente:", - "FIELD_HEADER_ENABLE_AUDIO" : "Habilitar audio:", - "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Forzar compresión sin pérdida:", - "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", - "FIELD_HEADER_USERNAME" : "Usuario:", - "FIELD_HEADER_PASSWORD" : "Contraseña:", - "FIELD_HEADER_PORT" : "Puerto:", - "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", - "FIELD_HEADER_RECORDING_NAME" : "Nombre grabación:", - "FIELD_HEADER_RECORDING_PATH" : "Ruta grabación:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Directorio de subida por defecto:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Clave pública de host (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nombre de Host:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo keepalive SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase de contraseña:", - "FIELD_HEADER_SFTP_PASSWORD" : "Contraseña:", - "FIELD_HEADER_SFTP_PORT" : "Puerto:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clave privada:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directorio raiz del navegador de ficheros:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", - "FIELD_HEADER_SFTP_USERNAME" : "Usuario:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Invertir componentes rojo/azul:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección broadcast para paquete WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC del host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 colores", - "FIELD_OPTION_COLOR_DEPTH_16" : "Color bajo(16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Color verdadero (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Color verdadero (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Local", - "FIELD_OPTION_CURSOR_REMOTE" : "Remoto", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Audio", - "SECTION_HEADER_AUTHENTICATION" : "Autenticación", - "SECTION_HEADER_CLIPBOARD" : "Portapapeles", - "SECTION_HEADER_DISPLAY" : "Monitor", - "SECTION_HEADER_NETWORK" : "Red", - "SECTION_HEADER_RECORDING" : "Grabación pantalla", - "SECTION_HEADER_REPEATER" : "Repetidor VNC", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Configuraciones" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "Aquí se detalla el historial de las últimas conexiones y se pueden ordernar haciendo clic en los encabezados de la columna. Para buscar un registro específico, introduzca la cadena de texto a filtrar y haga clic en \"Buscar\". Solo se listaran los registros que coincidan con el filtro introducido.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "No hay registros coincidentes", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nombre de conexión", - "TABLE_HEADER_SESSION_DURATION" : "Duración", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Host Remoto", - "TABLE_HEADER_SESSION_STARTDATE" : "Activo Desde", - "TABLE_HEADER_SESSION_USERNAME" : "Usuario", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "Nueva Conexión", - "ACTION_NEW_CONNECTION_GROUP" : "Nuevo Grupo", - "ACTION_NEW_SHARING_PROFILE" : "Nuevo perfil de compartir", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Haga clic o toque en una de las conexiones de abajo para gestionar esa conexión. Dependiendo de su nivel de acceso, podrá añadir/borrar conexiones y cambiar sus propiedades (Protocolo, Nombre de Host, Puerto, etc.) .", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Conexiones" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Idioma para mostrar:", - "FIELD_HEADER_PASSWORD" : "Contraseña:", - "FIELD_HEADER_PASSWORD_OLD" : "Contraseña actual:", - "FIELD_HEADER_PASSWORD_NEW" : "Nueva Contraseña:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirmar Nueva contraseña:", - "FIELD_HEADER_TIMEZONE" : "Zona horaria:", - "FIELD_HEADER_USERNAME" : "Usuario:", - - "HELP_DEFAULT_INPUT_METHOD" : "El método de entrada por defecto determina como se reciben en Guacamole los eventos de teclado. Es posible que sea necesario cambiar esta configuración cuando se usa un dispositivo móvil, o cuando se escribe a través de un método de entrada. Esta configuración se puede cambiar tambien en cada conexión desde el menú de Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "El modo de emulación de ratón por defecto determina como se comportará el ratón remoto en nuevas conexiones con respecto a los toques. Esta configuración se puede cambiar tambien en cada conexión desde el menú de Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Las siguientes opciones están relacionadas con la configuración regional del usuario e impactarán en cómo se muestran varias partes de la interfaz.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Si quiere cambiar su contraseña, introduzca abajo su contraseña actual y la nueva contraseña deseada y haga clic en \"Actualizar Contraseña\". El cambio será efectivo inmediatamente.", - - "INFO_PASSWORD_CHANGED" : "Contraseña Cambiada.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Método de entrada por defecto", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Modo de emulación de ratón por Defecto", - "SECTION_HEADER_UPDATE_PASSWORD" : "Cambiar Contraseña" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Nuevo Usuario", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Haga Clic o toque un usuario de la lista inferior para gestionar ese usuario. Dependiendo de su nivel de acceso, podrá añadir/borrar usuarios y cambiar sus contraseñas.", - - "SECTION_HEADER_USERS" : "Usuarios", - - "TABLE_HEADER_FULL_NAME" : "Nombre completo", - "TABLE_HEADER_LAST_ACTIVE" : "ültima conexión", - "TABLE_HEADER_ORGANIZATION" : "Organización", - "TABLE_HEADER_USERNAME" : "Usuario" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "Nuevo Grupo", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Haga clic o toque un grupo de la lista inferior para gestionar ese grupo. Dependiendo de su nivel de acceso, podrá agregar/borrar grupos y cambiar los miembros y grupos del mismo.", - - "SECTION_HEADER_USER_GROUPS" : "Grupos", - - "TABLE_HEADER_USER_GROUP_NAME" : "Nombre de Grupo" - - }, - - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Finalizar Sesiones", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Finalizar Sesiones", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "En esta página se mostrarán las conexiones que estan activas actualmente. Las conexiones enumeradas y la capacidad de eliminar esas conexiones dependen de su nivel de acceso. Si quiere finalizar una o mas sesiones, marque la casilla correspondiente a esa/s sesión/es y haga clic en \"Finalizar Sesiones\". Si finaliza una sesión desconectará inmediatamente al usuario de la conexión asociada.", - - "INFO_NO_SESSIONS" : "No hay sesiones activas", - - "SECTION_HEADER_SESSIONS" : "Sesiones Activas", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nombre Conexión", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Host Remoto", - "TABLE_HEADER_SESSION_STARTDATE" : "Activo desde", - "TABLE_HEADER_SESSION_USERNAME" : "Usuario", - - "TEXT_CONFIRM_DELETE" : "¿Está seguro que quiere finalizar las sesiones seleccionadas? Los usuarios que estan usando estas sesiones serán desconectados inmediatamente." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Correo electrónico:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Nombre completo:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organización:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Puesto:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/fr.json b/guacamole/src/main/frontend/src/translations/fr.json deleted file mode 100644 index b8915c631d..0000000000 --- a/guacamole/src/main/frontend/src/translations/fr.json +++ /dev/null @@ -1,1180 +0,0 @@ -{ - - "NAME" : "Français", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "Confirmer", - "ACTION_CANCEL" : "Annuler", - "ACTION_CLEAR" : "Effacer", - "ACTION_CLONE" : "Cloner", - "ACTION_CONTINUE" : "Continuer", - "ACTION_DELETE" : "Supprimer", - "ACTION_DELETE_SESSIONS" : "Fermer les Sessions", - "ACTION_DOWNLOAD" : "Télécharger", - "ACTION_IMPORT" : "Importer", - "ACTION_LOGIN" : "Se connecter", - "ACTION_LOGIN_AGAIN" : "Se re-connecter", - "ACTION_LOGOUT" : "Se déconnecter", - "ACTION_MANAGE_CONNECTIONS" : "Connexions", - "ACTION_MANAGE_PREFERENCES" : "Préférences", - "ACTION_MANAGE_SETTINGS" : "Paramètres", - "ACTION_MANAGE_SESSIONS" : "Sessions Actives", - "ACTION_MANAGE_USERS" : "Utilisateurs", - "ACTION_MANAGE_USER_GROUPS" : "Groupes", - "ACTION_NAVIGATE_BACK" : "Retour", - "ACTION_NAVIGATE_HOME" : "Accueil", - "ACTION_PAUSE" : "Pause", - "ACTION_PLAY" : "Lecture", - "ACTION_SAVE" : "Enregistrer", - "ACTION_SEARCH" : "Rechercher", - "ACTION_SHARE" : "Partager", - "ACTION_UPDATE_PASSWORD" : "Mettre à jour mot de passe", - "ACTION_VIEW_HISTORY" : "Historique", - "ACTION_VIEW_RECORDING" : "Voir", - - "DIALOG_HEADER_ERROR" : "Erreur", - - "ERROR_PAGE_UNAVAILABLE" : "Une erreur est survenue et cette action ne pourra pas être achevée. Si le problème persiste, merci de contacter votre administrateur ou regarder les journaux système.", - "ERROR_PASSWORD_BLANK" : "Votre mot de passe ne peut pas être vide.", - "ERROR_PASSWORD_MISMATCH" : "Le mot de passe ne correspond pas.", - "ERROR_SINGLE_FILE_ONLY" : "Veuillez télécharger un seul fichier à la fois.", - - "FIELD_HEADER_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Répéter mot de passe:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "Autoriser l'écriture dans le fichier d'enregistrement existant:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "Autoriser l'écriture dans le fichier TypeScript existant:", - - "FIELD_PLACEHOLDER_FILTER" : "Filtre", - - "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Actuellement utilisé par {USERS} {USERS, plural, one{utilisateur} other{utilisateurs}}.", - "INFO_LOGGED_OUT" : "Vous avez été déconnecté.", - - "TEXT_ANONYMOUS_USER" : "Anonyme", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{seconde} other{secondes}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{heure} other{heures}}} day{{VALUE, plural, one{jour} other{jours}}} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_CLIENT_MESSAGES" : "@:APP.ACTION_CLEAR", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "@:APP.ACTION_CLEAR", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "Déconnecter", - "ACTION_FULLSCREEN" : "Plein écran", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Reconnecter", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_SHOW_CLIPBOARD" : "Cliquez pour afficher le contenu du presse-papiers.", - "ACTION_UPLOAD_FILES" : "Envoyer Fichiers", - - "DIALOG_HEADER_CONNECTING" : "Connexion", - "DIALOG_HEADER_CONNECTION_ERROR" : "Erreur de connexion", - "DIALOG_HEADER_DISCONNECTED" : "Déconnecté", - - "ERROR_CLIENT_201" : "Cette connexion a été fermée car le serveur est occupé. Merci d'attendre quelques minutes et de réessayer.", - "ERROR_CLIENT_202" : "Le serveur Guacamole a fermé cette connexion car l'ordinateur distant a mis trop de temps à répondre. Merci de réessayer ou de contacter l'administrateur.", - "ERROR_CLIENT_203" : "Le serveur distant a rencontré une erreur et a fermé la connexion. Merci de réessayer ou de contacter l'administrateur.", - "ERROR_CLIENT_207" : "Le server distant est inaccessible. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", - "ERROR_CLIENT_208" : "Le server distant est indisponible. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", - "ERROR_CLIENT_209" : "Le serveur distant a fermé la connexion car elle est en conflit avec une autre. Merci de réessayer plus tard.", - "ERROR_CLIENT_20A" : "Le serveur distant a fermé la connexion car elle semblait être inactive. Si cela est inattendu, merci de notifier l'administrateur ou verifier vos paramètres système.", - "ERROR_CLIENT_20B" : "Le serveur distant a forcé la fermeture de la connexion. Si cela est inattendu, merci de notifier l'administrateur ou de regarder les journaux système.", - "ERROR_CLIENT_301" : "Connexion echouée. Merci de réessayer.", - "ERROR_CLIENT_303" : "Vous ne disposez pas des permissions pour accéder à cette connexion. Si vous avez besoin de ces droits demandez à l'administrateur qu'il vous ajoute à la lise des utilisateurs autorisés, ou de vérifier les paramètres système.", - "ERROR_CLIENT_308" : "Le serveur Guacamole a fermé la connexion car il n'y avait pas de réponse de votre navigateur Internet et qu'il l'a considéré comme déconnecté. Cela se produit à cause de problèmes réseaux (mauvais signal Wi-Fi ou réseau très lent). Merci de vérifier votre réseau et de réessayer.", - "ERROR_CLIENT_31D" : "Le serveur Guacamole interdit les connexions car vous avez dépassé la limite de connexion simultanée par utilisateur. Merci de fermer une ou plusieurs connexions et de réessayer.", - "ERROR_CLIENT_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", - - "ERROR_TUNNEL_201" : "Le serveur Guacamole a rejeté cette tentative de connexion car il y a trop de connexions ouvertes. Merci d'attendre quelques minutes et de réessayer.", - "ERROR_TUNNEL_202" : "La connexion a été fermée car le serveur met trop de temps à répondre. En général, il s'agit de problème réseau comme un réseau Wi-Fi trop lent ou un réseau très lent. Merci de vérifier votre réseau ou de contacter l'administrateur.", - "ERROR_TUNNEL_203" : "Le serveur a rencontré une erreur et a fermé la connexion. Merci de réessayer ou de contacter l'administrateur.", - "ERROR_TUNNEL_204" : "Le connexion demandée n'existe pas. Merci de vérifier le nom et de réessayer.", - "ERROR_TUNNEL_205" : "Cette connexion est actuellement utilisée et les connexions multiples ne sont pas autorisées. Merci de réessayer plus tard.", - "ERROR_TUNNEL_207" : "Le serveur Guacamole n'est pas actuellement accessible. Veuillez vérifier votre réseau et réessayer.", - "ERROR_TUNNEL_208" : "Le serveur Guacamole n'accepte pas les connexions. Veuillez vérifier votre réseau et réessayer.", - "ERROR_TUNNEL_301" : "Vous n'avez pas le droit d'accéder à cette connexion car vous n'êtes pas connecté. Merci de vous connecter et de réessayer.", - "ERROR_TUNNEL_303" : "Vous n'avez pas le droit d'accéder à cette connexion. Si vous souhaitez y avoir accès, merci de demander à l'administrateur de vous ajouter dans la liste des utilisateurs autorisés ou de vérifier les paramètres système.", - "ERROR_TUNNEL_308" : "Le serveur Guacamole a fermé la connexion car il n'y avait pas de réponse de votre navigateur Internet et qu'il l'a considéré comme déconnecté. Cela se produit à cause de problèmes réseaux (mauvais signal Wi-Fi ou réseau très lent). Merci de vérifier votre réseau et de réessayer.", - "ERROR_TUNNEL_31D" : "Le serveur Guacamole interdit cette connexion car vous avez dépassé la limite de connexions simultanées par utilisateur. Merci de fermer une ou plusieurs connexions et de réessayer.", - "ERROR_TUNNEL_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", - - "ERROR_UPLOAD_100" : "Le transfert de fichier n'est pas activé ou supporté. Merci de contacter l'administrateur ou de vérifier les journaux système.", - "ERROR_UPLOAD_201" : "Trop de fichiers sont transférés. Merci d'attendre que les transferts en cours se terminent et réessayer.", - "ERROR_UPLOAD_202" : "Le fichier ne peut être transféré car le serveur distant met trop de temps à répondre. Merci de réessayer ou de contacter votre administrateur.", - "ERROR_UPLOAD_203" : "Le serveur distant a rencontré une erreur durant le transfert. Merci de réessayer et de contacter l'administrateur.", - "ERROR_UPLOAD_204" : "La destination du transfert de fichier n'existe pas. Merci de vérifier que la destination existe et de réessayer.", - "ERROR_UPLOAD_205" : "La destination du transfert de fichier est actuellement verrouillée. Merci de patienter la fin des tâches en cours et de réessayer.", - "ERROR_UPLOAD_301" : "Vous n'avez pas la permission d'envoyer ce fichier car vous n'êtes pas connecté. Merci de vous connecter et de réessayer.", - "ERROR_UPLOAD_303" : "Vous n'avez pas la permission d'envoyer le fichier. Si vous avez besoin de cet accès, merci de vérifier vos paramètres système ou de valider avec votre administrateur.", - "ERROR_UPLOAD_308" : "Le transfert de fichier s'est bloqué. En général, il s'agit d'un problème réseau comme un signal Wi-Fi faible ou un réseau très lent. Merci de vérifier votre réseau et de réessayer.", - "ERROR_UPLOAD_31D" : "Trop de fichiers sont actuellement transférés. Merci d'attendre que les transferts en cours soient terminés et de réessayer plus tard.", - "ERROR_UPLOAD_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Texte copié/coupé dans Guacamole apparaîtra ici. Changer le texte ci-dessous affectera le presse-papiers distant.", - "HELP_INPUT_METHOD_NONE" : "Aucune méthode de saisie utilisée. Clavier accepté depuis un clavier physique connecté.", - "HELP_INPUT_METHOD_OSK" : "Affiche et utilise la saisie du clavier virtuel intégré dans Guacamole. Le clavier virtuel permet d'utiliser des combinaisons de touches autrement impossibles (comme Ctrl-Alt-Supp).", - "HELP_INPUT_METHOD_TEXT" : "Affiche et utilise la saisie du clavier virtuel intégré dans Guacamole. Ceci est nécessaire pour les périphériques mobiles ne disposant pas de clavier physique.", - "HELP_MOUSE_MODE" : "Détermine comment la souris distante se comporte selon les événements.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Appuyer pour cliquer. Le clic s'effectue à l'endroit de l'appui.", - "HELP_MOUSE_MODE_RELATIVE" : "Glisser pour déplacer le pointeur de la souris et appuyer pour cliquer. Le clic s'effectue à l'endroit du pointeur.", - "HELP_SHARE_LINK" : "La connexion actuelle est en cours de partage et est accessible à toute personne possédant {LINKS, plural, one{le lien suivant} other{les liens suivants}}:", - - "INFO_ANONYMOUS_USER_COUNT" : "Anonyme{COUNT, plural, one{} other{s (#)}}", - "INFO_CONNECTION_SHARED" : "Cette connexion est partagée maintenant.", - "INFO_NO_FILE_TRANSFERS" : "Pas de transfert de fichier.", - "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", - - "NAME_INPUT_METHOD_NONE" : "Aucune", - "NAME_INPUT_METHOD_OSK" : "Clavier virtuel", - "NAME_INPUT_METHOD_TEXT" : "Clavier", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Echap", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Écran tactile", - "NAME_MOUSE_MODE_RELATIVE" : "Pavé tactile", - - "SECTION_HEADER_CLIENT_MESSAGES" : "Messages", - "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", - "SECTION_HEADER_DEVICES" : "Appareils", - "SECTION_HEADER_DISPLAY" : "Affichage", - "SECTION_HEADER_FILE_TRANSFERS" : "Transferts de fichiers", - "SECTION_HEADER_INPUT_METHOD" : "Méthode de saisie", - - "SECTION_HEADER_MOUSE_MODE" : "Mode d'émulation de la souris", - - "TEXT_ANONYMOUS_USER_JOINED" : "Un utilisateur anonyme a rejoint la connexion.", - "TEXT_ANONYMOUS_USER_LEFT" : "Un utilisateur anonyme a quitté la connexion.", - "TEXT_ZOOM_AUTO_FIT" : "Adapté à la fenêtre du navigateur", - "TEXT_CLIENT_STATUS_IDLE" : "Inactif.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Connexion à Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Vous avez été deconnecté.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "La connexion réseau au serveur Guacamole est instable.", - "TEXT_CLIENT_STATUS_WAITING" : "Connecté à Guacamole. En attente de réponse...", - "TEXT_USER_JOINED" : "{USERNAME} a rejoint la connexion.", - "TEXT_USER_LEFT" : "{USERNAME} a quitté la connexion.", - "TEXT_RECONNECT_COUNTDOWN" : "Reconnexion dans {REMAINING} {REMAINING, plural, one{seconde} other{secondes}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/fr-fr-azerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Masquer", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Afficher", - - "FIELD_HEADER_BACKGROUND" : "Fond", - "FIELD_HEADER_FOREGROUND" : "Avant-plan", - - "FIELD_OPTION_CUSTOM" : "Personnaliser...", - - "SECTION_HEADER_DETAILS" : "Détails:" - - }, - - "IMPORT": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_BROWSE" : "Parcourir les fichiers", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", - "ACTION_VIEW_FORMAT_HELP" : "Voir les conseils de format", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_IMPORT_CONNECTIONS" : "Importer les connexions", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - "DIALOG_HEADER_SUCCESS" : "Succès", - - "ERROR_AMBIGUOUS_CSV_HEADER" : "L'en-tête CSV ambigu \"{HEADER}\" peut être soit un attribut de connexion, soit un paramètre", - "ERROR_AMBIGUOUS_PARENT_GROUP" : "Le groupe et le parentIdentifier peuvent ne pas être spécifiés en même temps", - "ERROR_ARRAY_REQUIRED" : "Le fichier fourni doit contenir une liste de connexions", - "ERROR_DETECTED_INVALID_TYPE" : "Type de fichier non pris en charge. Assurez-vous que le fichier est un CSV, JSON ou YAML valide.", - "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "Connexion en double \"{NAME}\" à \"{PATH}\" dans le fichier d'importation", - "ERROR_DUPLICATE_CSV_HEADER" : "En-tête CSV en double : {HEADER}", - "ERROR_EMPTY_FILE" : "Le fichier fourni est vide", - "ERROR_INVALID_CSV_HEADER" : "En-tête CSV invalide \"{HEADER}\", ni un attribut ni un paramètre de connexion", - "ERROR_INVALID_MIME_TYPE" : "Type de fichier non pris en charge : \"{TYPE}\"", - "ERROR_INVALID_GROUP" : "Aucun groupe correspondant à \"{GROUP}\" trouvé", - "ERROR_INVALID_GROUP_IDENTIFIER" : "Aucun groupe de connexion avec l'identifiant \"{IDENTIFIER}\" trouvé", - "ERROR_INVALID_GROUP_TYPE" : "Groupe invalide - doit être une chaîne de caractères.", - "ERROR_INVALID_PROTOCOL" : "Protocole invalide \"{PROTOCOL}\"", - "ERROR_INVALID_USER_GROUPS_TYPE" : "Groupes d'utilisateurs invalides - doit être un tableau d'identifiants de groupe d'utilisateurs.", - "ERROR_INVALID_USERS_TYPE" : "Utilisateurs invalides - doit être un tableau d'identifiants d'utilisateurs.", - "ERROR_NO_FILE_SUPPLIED" : "Veuillez sélectionner un fichier à importer", - "ERROR_PARSE_FAILURE_CSV" : "Assurez-vous que votre fichier CSV est valide. L'analyse a échoué avec l'erreur \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_JSON" : "Assurez-vous que votre fichier JSON est valide. L'analyse a échoué avec l'erreur \"{ERROR}\". ", - "ERROR_PARSE_FAILURE_YAML" : "Assurez-vous que votre fichier YAML est valide. L'analyse a échoué avec l'erreur \"{ERROR}\". ", - "ERROR_REJECT_UPDATE_CONNECTION" : "La connexion \"{NAME}\" existe déjà à \"{PATH}\"", - "ERROR_REQUIRED_NAME_CONNECTION" : "Le nom de la connexion est requis", - "ERROR_REQUIRED_PROTOCOL_CONNECTION" : "Le protocole de connexion est requis", - "ERROR_REQUIRED_NAME_FILE" : "Aucun nom de connexion trouvé dans le fichier fourni", - "ERROR_REQUIRED_PROTOCOL_FILE" : "Aucun protocole de connexion trouvé dans le fichier fourni", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "Remplacer/Mettre à jour les connexions existantes", - "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "Réinitialiser les permissions", - - "HELP_CSV_DESCRIPTION" : "Un fichier CSV d'importation de connexion a un enregistrement de connexion par ligne. Chaque colonne spécifie un champ de connexion. Au minimum, le nom de la connexion et le protocole doivent être spécifiés.", - "HELP_CSV_EXAMPLE" : "name,protocol,username,password,hostname,group,users,groups,guacd-encryption (attribute)\nconn1,vnc,alice,pass1,conn1.web.com,ROOT,guac user 1;guac user 2,Connection 1 Users,none\nconn2,rdp,bob,pass2,conn2.web.com,ROOT/Parent Group,guac user 1,,ssl\nconn3,ssh,carol,pass3,conn3.web.com,ROOT/Parent Group/Child Group,guac user 2;guac user 3,,\nconn4,kubernetes,,,,,,,", - "HELP_CSV_MORE_DETAILS" : "L'en-tête CSV de chaque ligne spécifie le champ de connexion. L'identifiant de groupe de connexion dans lequel la connexion doit être importée peut être directement spécifié avec \"parentIdentifier\", ou le chemin vers le groupe parent peut être spécifié en utilisant \"group\" comme indiqué ci-dessous. Dans la plupart des cas, il ne devrait pas y avoir de conflit entre les champs, mais si nécessaire, un suffixe \" (attribute)\" ou \" (parameter)\" peut être ajouté pour dissocier. Les listes d'identifiants d'utilisateur ou de groupe d'utilisateurs doivent être séparées par des points-virgules.¹", - "HELP_FILE_TYPE_DESCRIPTION" : "Trois types de fichiers sont pris en charge pour l'importation de connexions : CSV, JSON et YAML. Les mêmes données peuvent être spécifiées par chaque type de fichier. Cela doit inclure le nom de la connexion et le protocole. Facultativement, un emplacement de groupe de connexion, une liste d'utilisateurs et/ou de groupes d'utilisateurs auxquels accorder l'accès, des paramètres de connexion ou des protocoles de connexion peuvent également être spécifiés. Tous les utilisateurs ou groupes d'utilisateurs qui n'existent pas dans la source de données actuelle seront automatiquement créés. Notez que toutes les permissions de connexion existantes ne seront pas supprimées pour les connexions mises à jour, sauf si \"Réinitialiser les permissions\" est coché.", - "HELP_FILE_TYPE_HEADER" : "Types de fichiers", - "HELP_JSON_DESCRIPTION" : "Un fichier JSON d'importation de connexion est une liste d'objets de connexion. Au minimum, le nom de la connexion et le protocole doivent être spécifiés dans chaque objet de connexion.", - "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"conn1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"username\": \"alice\", \"password\": \"pass1\", \"hostname\": \"conn1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac user 1\", \"guac user 2\" ],\n \"groups\": [ \"Connection 1 Users\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"username\": \"bob\", \"password\": \"pass2\", \"hostname\": \"conn2.web.com\" \\},\n \"group\": \"ROOT/Parent Group\",\n \"users\": [ \"guac user 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"username\": \"carol\", \"password\": \"pass3\", \"hostname\": \"conn3.web.com\" \\},\n \"group\": \"ROOT/Parent Group/Child Group\",\n \"users\": [ \"guac user 2\", \"guac user 3\" ]\n \\},\n \\{\n \"name\": \"conn4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", - "HELP_JSON_MORE_DETAILS" : "L'identifiant de groupe de connexion dans lequel la connexion doit être importée peut être directement spécifié avec un champ \"parentIdentifier\", ou le chemin vers le groupe parent peut être spécifié en utilisant un champ \"group\" comme indiqué ci-dessous. Un tableau d'identifiants d'utilisateurs et de groupes d'utilisateurs auxquels accorder l'accès peut être spécifié par connexion.", - "HELP_EXISTING_CONNECTION_MODE" : "Remplacer/Mettre à jour entièrement les connexions existantes si leurs noms et groupes de connexion parent correspondent aux valeurs dans le fichier fourni. Si non coché, tenter d'importer une connexion avec le même nom et le même groupe de connexion parent d'une connexion existante sera considéré comme une erreur.", - "HELP_EXISTING_PERMISSION_MODE" : "Réinitialiser entièrement les permissions accordées pour toutes les connexions dans le fichier fourni aux permissions spécifiées dans ce fichier. Si aucune permission n'est spécifiée, toutes les permissions de connexion pertinentes seront révoquées. Si non coché, les permissions existantes sont préservées, et toutes les permissions spécifiées dans le fichier seront ajoutées.", - "HELP_SEMICOLON_FOOTNOTE" : "Si présent, les points-virgules peuvent être échappés avec un backslash, par exemple \"first\\\\;last\"", - "HELP_UPLOAD_DROP_TITLE" : "Déposez un fichier ici", - "HELP_UPLOAD_FILE_TYPES" : "CSV, JSON ou YAML", - "HELP_YAML_DESCRIPTION" : "Un fichier YAML d'importation de connexion est une liste d'objets de connexion avec exactement la même structure que le format JSON.", - "HELP_YAML_EXAMPLE" : "---\n - name: conn1\n protocol: vnc\n parameters:\n username: alice\n password: pass1\n hostname: conn1.web.com\n group: ROOT\n users:\n - guac user 1\n - guac user 2\n groups:\n - Connection 1 Users\n attributes:\n guacd-encryption: none\n - name: conn2\n protocol: rdp\n parameters:\n username: bob\n password: pass2\n hostname: conn2.web.com\n group: ROOT/Parent Group\n users:\n - guac user 1\n attributes:\n guacd-encryption: none\n - name: conn3\n protocol: ssh\n parameters:\n username: carol\n password: pass3\n hostname: conn3.web.com\n group: ROOT/Parent Group/Child Group\n users:\n - guac user 2\n - guac user 3\n - name: conn4\n protocol: kubernetes", - - "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} {NUMBER, plural, one{connexion} other{connexions}} importée(s) avec succès.", - - "SECTION_HEADER_CONNECTION_IMPORT" : "Importation de connexion", - "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "Format de fichier d'importation de connexion", - "SECTION_HEADER_CSV" : "Format CSV", - "SECTION_HEADER_JSON" : "Format JSON", - "SECTION_HEADER_YAML" : "Format YAML", - - "TABLE_HEADER_ERRORS" : "Erreurs", - "TABLE_HEADER_GROUP" : "Groupe", - "TABLE_HEADER_NAME" : "Nom", - "TABLE_HEADER_PROTOCOL" : "Protocole", - "TABLE_HEADER_ROW_NUMBER" : "Ligne #" - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Standard (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "AAAA-MM-JJ", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Cliquer pour afficher le mot de passe", - "HELP_HIDE_PASSWORD" : "Cliquer pour masquer le mot de passe" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Pas de connexion récente.", - - "PASSWORD_CHANGED" : "Mot de passe changé.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Toutes les Connexions", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Connexions récentes" - - }, - - "LIST": { - - "TEXT_ANONYMOUS_USER" : "Anonyme" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Identifiant Incorrect", - - "FIELD_HEADER_USERNAME" : "Identifiant", - "FIELD_HEADER_PASSWORD" : "Mot de passe" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Connexion", - "DIALOG_HEADER_ERROR" : "Erreur", - - "FIELD_HEADER_LOCATION" : "Lieu:", - "FIELD_HEADER_NAME" : "Nom:", - "FIELD_HEADER_PROTOCOL" : "Protocole:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Active", - "INFO_CONNECTION_NOT_USED" : "Cette connexion n'a jamais été utilisée.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Modifier Connexion", - "SECTION_HEADER_HISTORY" : "Historique d'utilisation", - "SECTION_HEADER_PARAMETERS" : "Paramètres", - - "TABLE_HEADER_HISTORY_USERNAME" : "Identifiant", - "TABLE_HEADER_HISTORY_START" : "Heure de début", - "TABLE_HEADER_HISTORY_DURATION" : "Durée", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Hôte distant", - - "TEXT_CONFIRM_DELETE" : "Les connexions ne pourront être restaurées une fois supprimées. Êtes-vous certains de vouloir supprimer cette connexion ?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Groupe de Connexion", - "DIALOG_HEADER_ERROR" : "Erreur", - - "FIELD_HEADER_LOCATION" : "Lieu:", - "FIELD_HEADER_NAME" : "Nom:", - "FIELD_HEADER_TYPE" : "Type:", - - "NAME_TYPE_BALANCING" : "Répartition", - "NAME_TYPE_ORGANIZATIONAL" : "Organizationel", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Modifier Groupe de Connexion", - - "TEXT_CONFIRM_DELETE" : "Les groupes de connexions ne pourront être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer ce groupe de connexion ?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer le Profil de Partage", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Nom:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Connexion Primaire:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Modifier le Profil de Partage", - "SECTION_HEADER_PARAMETERS" : "Paramètres", - - "TEXT_CONFIRM_DELETE" : "Les profils de partage ne peuvent pas être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer ce profil de partage ?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Utilisateur", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administration du système:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Modifier son propre mot de passe:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Créer de nouveaux utilisateurs:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Créer de nouveaux groupes d'utilisateurs:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Créer de nouvelles connexions:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Créer de nouveaux groupes de connexion:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Créer de nouveaux profils de partage:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "Connexion désactivée:", - "FIELD_HEADER_USERNAME" : "Identifiant:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Cet utilisateur n'appartient à aucun groupe. Développer cette section pour ajouter des groupes..", - - "INFO_READ_ONLY" : "Désolé, mais ce compte ne peut pas être modifié.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "Pas de groupes disponibles.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Toutes les Connexions", - "SECTION_HEADER_CONNECTIONS" : "Connexions", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Connexions en cours", - "SECTION_HEADER_EDIT_USER" : "Modifier Utilisateur", - "SECTION_HEADER_PERMISSIONS" : "Permissions", - "SECTION_HEADER_USER_GROUPS" : "Groupes", - - "TEXT_CONFIRM_DELETE" : "Les utilisateurs ne pourront être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer cet utilisateur?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Groupe", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "Désactivé:", - "FIELD_HEADER_USER_GROUP_NAME" : "Nom Groupe:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Ce groupe n'appartient actuellement à aucun groupe. Développez cette section pour ajouter des groupes.", - "HELP_NO_MEMBER_USER_GROUPS" : "Ce groupe n'appartient actuellement à aucun groupe. Développez cette section pour ajouter des groupes.", - "HELP_NO_MEMBER_USERS" : "Ce groupe ne contient actuellement aucun utilisateur. Développez cette section pour ajouter des utilisateurs.", - - "INFO_READ_ONLY" : "Désolé, mais ce groupe ne peut pas être modifié.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "Pas d'utilisateur disponible.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Modifier Groupe", - "SECTION_HEADER_MEMBER_USERS" : "Utilisateurs Membre", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Groupes Membre", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Groupes Parent", - - "TEXT_CONFIRM_DELETE" : "Les groupes ne peuvent pas être restaurés après leur suppression. Êtes-vous certains de vouloir supprimer ce groupe ?" - - }, - - "PLAYER" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", - "ACTION_PLAY" : "@:APP.ACTION_PLAY", - "ACTION_SHOW_KEY_LOG" : "Journal des frappes", - - "INFO_FRAME_EVENTS_LEGEND" : "Activité à l'écran", - "INFO_KEY_EVENTS_LEGEND" : "Activité du clavier", - "INFO_LOADING_RECORDING" : "Votre enregistrement est en cours de chargement. Veuillez patienter...", - "INFO_NO_KEY_LOG" : "Journal des frappes non disponible", - "INFO_NUMBER_OF_RESULTS" : "{RESULTS} {RESULTS, plural, one{Résultat} other{Résultats}}", - "INFO_SEEK_IN_PROGRESS" : "Recherche de la position demandée. Veuillez patienter...", - - "FIELD_PLACEHOLDER_TEXT_BATCH_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Touche Retour Arrière envoyée:", - "FIELD_HEADER_CA_CERT" : "Certificat d'autorité de certification:", - "FIELD_HEADER_CLIENT_CERT" : "Certificat client:", - "FIELD_HEADER_CLIENT_KEY" : "Clé du certificat client:", - "FIELD_HEADER_COLOR_SCHEME" : "Palette de couleur:", - "FIELD_HEADER_CONTAINER" : "Nom du conteneur:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement le chemin d'enregistrement:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Créer automatiquement le chemin typescript:", - "FIELD_HEADER_DISABLE_COPY" : "Désactiver copier depuis le terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller depuis le terminal:", - "FIELD_HEADER_EXEC_COMMAND" : "Commande (exec):", - "FIELD_HEADER_FONT_NAME" : "Nom police:", - "FIELD_HEADER_FONT_SIZE" : "Taille police:", - "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorer le certificat serveur:", - "FIELD_HEADER_NAMESPACE" : "Espace de noms:", - "FIELD_HEADER_POD" : "Nom du pod:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Lecture seule:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les évenements clavier:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", - "FIELD_HEADER_RECORDING_PATH" : "Chemin de l,enregistrement:", - "FIELD_HEADER_SCROLLBACK" : "Taille maximum du défilement arrière:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Chemin Typescript:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "@:APP.FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING", - "FIELD_HEADER_USE_SSL" : "Utiliser SSL/TLS", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Retour Arrière (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Suppr. (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sur noir", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Vert sur noir", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sur noir", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Authentification", - "SECTION_HEADER_BEHAVIOR" : "Comportement Terminal", - "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", - "SECTION_HEADER_CONTAINER" : "Conteneur", - "SECTION_HEADER_DISPLAY" : "Affichage", - "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Enregistrement Session Texte)", - "SECTION_HEADER_NETWORK" : "Réseau" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CERT_TOFU" : "Faire confiance au certificat de l'hôte lors de la première utilisation:", - "FIELD_HEADER_CERT_FINGERPRINTS" : "Empreintes des certificats d'hôte de confiance:", - "FIELD_HEADER_CLIENT_NAME" : "Nom du Client:", - "FIELD_HEADER_COLOR_DEPTH" : "Qualité couleur:", - "FIELD_HEADER_CONSOLE" : "Console Administrateur:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Support son en console:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Créer automatiquement le chemin du lecteur:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement un chemin d'enregistrement:", - "FIELD_HEADER_DISABLE_AUDIO" : "Désactiver son:", - "FIELD_HEADER_DISABLE_AUTH" : "Désactiver l'authentification:", - "FIELD_HEADER_DISABLE_COPY" : "Désactiver la copie depuis l'ordinateur distant:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", - "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller à partir du client:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", - "FIELD_HEADER_DOMAIN" : "Nom de domaine:", - "FIELD_HEADER_DPI" : "Résolution (ppp):", - "FIELD_HEADER_DRIVE_NAME" : "Nom du lecteur:", - "FIELD_HEADER_DRIVE_PATH" : "Chemin du lecteur:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Activer l'entrée audio (microphone):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Activer la composition du bureau (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Activer lecteur réseau:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Activer le lissage des polices (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Activer pleine fenêtre de glisser:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Activer les animations de menu:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Désactiver le cache bitmap:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Désactiver le cache hors écran :", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Désactiver le cache glyph:", - "FIELD_HEADER_DISABLE_GFX" : "Désactiver l'extension du pipeline graphique:", - "FIELD_HEADER_ENABLE_PRINTING" : "Activer imprimante:", - "FIELD_HEADER_ENABLE_SFTP" : "Activer SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Activer thématisation:", - "FIELD_HEADER_ENABLE_TOUCH" : "Activer le multitouch:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Activer fond d'écran:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Forcer la compression sans perte:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Nom de domaine:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_GATEWAY_PORT" : "Port:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Identifiant:", - "FIELD_HEADER_HEIGHT" : "Hauteur:", - "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorer le certificat du serveur:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Programme de démarrage:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Equilibrage de charge info/cookie:", - "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Caractères de fin de ligne:", - "FIELD_HEADER_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRINTER_NAME" : "Nom de l'imprimante redirigée:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Préconnexion BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "Source RDP ID:", - "FIELD_HEADER_READ_ONLY" : "Lecture seule:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Exclure les événements tactiles:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", - "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", - "FIELD_HEADER_RESIZE_METHOD" : "Méthode de redimensionnement:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Paramètres:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Répertoire de travail:", - "FIELD_HEADER_REMOTE_APP" : "Programme:", - "FIELD_HEADER_SECURITY" : "Mode de Sécurité:", - "FIELD_HEADER_SERVER_LAYOUT" : "Agencement clavier:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Répertoire d'upload par défaut:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Clé publique de l'hôte (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalle keepalive SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Phrase secrète:", - "FIELD_HEADER_SFTP_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clé privée:", - "FIELD_HEADER_SFTP_PUBLIC_KEY" : "Clé publique:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Dossier racine de l'explorateur de fichier:", - "FIELD_HEADER_SFTP_TIMEOUT" : "Délai d'expiration de la connexion SFTP:", - "FIELD_HEADER_SFTP_USERNAME" : "Identifiant:", - "FIELD_HEADER_STATIC_CHANNELS" : "Noms des canaux statiques:", - "FIELD_HEADER_TIMEOUT" : "Délai d'expiration de la connexion", - "FIELD_HEADER_TIMEZONE" : "Fuseau horaire:", - "FIELD_HEADER_USERNAME" : "Identifiant:", - "FIELD_HEADER_WIDTH" : "Largeur:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP pour le paquet WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", - - "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Préserver tel quel", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Faibles couleurs (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Vraies couleurs (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Vraies couleurs (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 couleurs", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Afficher Mise à jour\" canal virtuel (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconnecter", - - "FIELD_OPTION_SECURITY_ANY" : "Négotiation automatique", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", - "FIELD_OPTION_SECURITY_RDP" : "Chiffrement RDP", - "FIELD_OPTION_SECURITY_TLS" : "Chiffrement TLS", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Tchèque (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danois (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Suisse Allemand (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Allemand (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Anglais UK (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Anglais US (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Enspagnol (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latino-Américain (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Français Belge (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Français Canada (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Français Suisse (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Français (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hongrois (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italien (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonais (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norvégien (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polonais (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugais Brésilien (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugais (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Roumaine (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Suédois (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turque (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Authentification", - "SECTION_HEADER_BASIC_PARAMETERS" : "Paramètres de base", - "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirection Périphérique", - "SECTION_HEADER_DISPLAY" : "Affichage", - "SECTION_HEADER_GATEWAY" : "Passerelle du bureau à distance", - "SECTION_HEADER_LOAD_BALANCING" : "Equilibrage de charge", - "SECTION_HEADER_NETWORK" : "Réseau", - "SECTION_HEADER_PERFORMANCE" : "Performance", - "SECTION_HEADER_PRECONNECTION_PDU" : "Préconnexion PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Enregistrement écran", - "SECTION_HEADER_REMOTEAPP" : "RemoteApp", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Touche Retour Arrière envoyée:", - "FIELD_HEADER_COLOR_SCHEME" : "Palette de couleurs:", - "FIELD_HEADER_COMMAND" : "Exécuter une commande:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement le chemin d'enregistrement:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Créer automatiquement le chemin typescript :", - "FIELD_HEADER_DISABLE_COPY" : "Désactiver copier depuis le terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller depuis le terminal:", - "FIELD_HEADER_FONT_NAME" : "Nom police:", - "FIELD_HEADER_FONT_SIZE" : "Taille police:", - "FIELD_HEADER_ENABLE_SFTP" : "Activer SFTP:", - "FIELD_HEADER_HOST_KEY" : "Clé publique de l'hôte (Base64):", - "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_LOCALE" : "Langue/Locale ($LANG):", - "FIELD_HEADER_USERNAME" : "Identifiant:", - "FIELD_HEADER_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_PASSPHRASE" : "Phrase secrète:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRIVATE_KEY" : "Clé privée:", - "FIELD_HEADER_PUBLIC_KEY" : "Clé publique:", - "FIELD_HEADER_SCROLLBACK" : "Taille maximum du défilement arrière:", - "FIELD_HEADER_READ_ONLY" : "Lecture seule:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", - "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Intervalle keepalive Serveur:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Dossier racine de l'explorateur de fichier:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", - "FIELD_HEADER_TERMINAL_TYPE" : "Type du terminal:", - "FIELD_HEADER_TIMEOUT" : "Délai d'expiration de la connexion:", - "FIELD_HEADER_TIMEZONE" : "Fuseau horaire ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Chemin Typescript:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "@:APP.FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP pour le paquet WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Retour Arrière (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Suppr. (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sur noir", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Vert sur noir", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sur noir", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Authentification", - "SECTION_HEADER_BEHAVIOR" : "Comportement Terminal", - "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", - "SECTION_HEADER_DISPLAY" : "Affichage", - "SECTION_HEADER_NETWORK" : "Réseau", - "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", - "SECTION_HEADER_SESSION" : "Session / Environnement", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Enregistrement session Texte)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Touche Retour Arrière envoyée:", - "FIELD_HEADER_COLOR_SCHEME" : "Palette de couleurs:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement le chemin d'enregistrement:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Créer automatiquement le chemin typescript:", - "FIELD_HEADER_DISABLE_COPY" : "Désactiver copier depuis le terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller depuis le terminal:", - "FIELD_HEADER_FONT_NAME" : "Nom police:", - "FIELD_HEADER_FONT_SIZE" : "Taille police:", - "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expression régulière Échec de connexion:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expression régulière Connexion réussie:", - "FIELD_HEADER_USERNAME" : "Identifiant:", - "FIELD_HEADER_USERNAME_REGEX" : "Expression régulière Identifiant:", - "FIELD_HEADER_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_PASSWORD_REGEX" : "Expression régulière Mot de passe:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Lecture seule:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", - "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", - "FIELD_HEADER_SCROLLBACK" : "Taille maximum du défilement arrière:", - "FIELD_HEADER_TERMINAL_TYPE" : "Type de terminal:", - "FIELD_HEADER_TIMEOUT" : "Délai d'expiration de la connexion:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Chemin Typescript:", - "FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING" : "@:APP.FIELD_HEADER_TYPESCRIPT_WRITE_EXISTING", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP pour le paquet WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Retour Arrière (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Suppr. (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sur noir", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Vert sur noir", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sur noir", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Authentification", - "SECTION_HEADER_BEHAVIOR" : "Comportement Terminal", - "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", - "SECTION_HEADER_DISPLAY" : "Affichage", - "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Enregistrement session Texte)", - "SECTION_HEADER_NETWORK" : "Réseau", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Serveur de son:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Encodage:", - "FIELD_HEADER_COLOR_DEPTH" : "Qualité couleur:", - "FIELD_HEADER_COMPRESS_LEVEL" : "Niveau de compression:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement un chemin d'enregistrement:", - "FIELD_HEADER_CURSOR" : "Curseur:", - "FIELD_HEADER_DEST_HOST" : "Hôte distant:", - "FIELD_HEADER_DEST_PORT" : "Port distant:", - "FIELD_HEADER_DISABLE_COPY" : "Désactiver la copie depuis l'ordinateur distant:", - "FIELD_HEADER_DISABLE_DISPLAY_RESIZE" : "Désactiver le redimensionnement de l'affichage distant:", - "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller à partir du client:", - "FIELD_HEADER_DISABLE_SERVER_INPUT" : "Désactiver l'entrée du serveur lorsque le client est connecté:", - "FIELD_HEADER_ENABLE_AUDIO" : "Activer son:", - "FIELD_HEADER_ENABLE_SFTP" : "Activer SFTP:", - "FIELD_HEADER_ENCODINGS" : "Encodages de l'affichage:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Forcer la compression sans perte:", - "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_USERNAME" : "Identifiant:", - "FIELD_HEADER_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_QUALITY_LEVEL" : "Qualité d'affichage:", - "FIELD_HEADER_READ_ONLY" : "Lecture seule:", - "FIELD_HEADER_RECORDING_WRITE_EXISTING" : "@:APP.FIELD_HEADER_RECORDING_WRITE_EXISTING", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", - "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", - "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Répertoire d'upload par défaut:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Clé publique de l'hôte (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nom d'hôte:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervale keepalive SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Phrase secrète:", - "FIELD_HEADER_SFTP_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clé privée:", - "FIELD_HEADER_SFTP_PUBLIC_KEY" : "Clé publique:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Dossier racine de l'explorateur de fichier:", - "FIELD_HEADER_SFTP_TIMEOUT" : "Délai d'expiration de la connexion SFTP:", - "FIELD_HEADER_SFTP_USERNAME" : "Identifiant:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Inverser composantes rouges et bleues:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP pour le paquet WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 couleurs", - "FIELD_OPTION_COLOR_DEPTH_16" : "Faibles couleurs (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Vraies couleurs (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Vraies couleurs (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Local", - "FIELD_OPTION_CURSOR_REMOTE" : "Distant", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Son", - "SECTION_HEADER_AUTHENTICATION" : "Authentification", - "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", - "SECTION_HEADER_DISPLAY" : "Affichage", - "SECTION_HEADER_NETWORK" : "Réseau", - "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", - "SECTION_HEADER_REPEATER" : "Répétiteur VNC", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Paramètres" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "L'historique des dernières connexions est répertorié ici et peut être trié en cliquant sur l'en-tête des colonnes. Pour rechercher des enregistrements spécifiques, entrez un filtre et cliquez sur \"Rechercher\". Seuls les enregistrements correspondant au filtre renseigné seront listés.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Aucun enregistrement correspondant", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de connexion", - "TABLE_HEADER_SESSION_DURATION" : "Durée", - "TABLE_HEADER_SESSION_LOGS" : "Journaux", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Hôte distant", - "TABLE_HEADER_SESSION_STARTDATE" : "Heure de début", - "TABLE_HEADER_SESSION_USERNAME" : "Identifiant", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_NEW_CONNECTION" : "Nouvelle Connexion", - "ACTION_NEW_CONNECTION_GROUP" : "Nouveau Groupe", - "ACTION_NEW_SHARING_PROFILE" : "Nouveau Profil de Partage", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Cliquer ou appuyer sur une connexion en dessous pour la gérer. Selon vos permissions, les connexions peuvent être ajoutées, supprimées, leur propriétés (protocole, nom d'hôte, port, etc) changées.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Connexions" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "Votre mot de passe ne peut être vide.", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Langue affichée:", - "FIELD_HEADER_NUMBER_RECENT_CONNECTIONS" : "Nombre de connexions récentes à afficher:", - "FIELD_HEADER_PASSWORD" : "Mot de passe:", - "FIELD_HEADER_PASSWORD_OLD" : "Mot de passe actuel:", - "FIELD_HEADER_PASSWORD_NEW" : "Nouveau mot de passe:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirmer nouveau mot de passe:", - "FIELD_HEADER_SHOW_RECENT_CONNECTIONS" : "Afficher les connexions récentes:", - "FIELD_HEADER_TIMEZONE" : "Fuseau horaire:", - "FIELD_HEADER_USERNAME" : "Identifiant:", - - "HELP_APPEARANCE" : "Vous pouvez ici activer ou désactiver les connexions récentes sur la page d'accueil de Guacamole, et ajuster le nombre de connexions récentes qui seront affichées.", - "HELP_DEFAULT_INPUT_METHOD" : "La méthode de saisie par défaut détermine comment les événements clavier sont reçus par Guacamole. Modifier ce paramètre peut être nécessaire lors de l'utilisation d'un appareil mobile. Ce paramètre peut être remplacé pour chaque connexion dans le menu de Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "Le mode d'émulation de la souris par défaut détermine le comportement de la souris distante dans de nouvelles connexions par rapport aux touches. Ce paramètre peut être remplacé pour chaque connexion dans le menu Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Les options ci-dessous sont liées à la localisation de l'utilisateur et auront un impact sur l'affichage de différentes parties de l'interface.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Si vous souhaitez changer votre mot de passe, saisissez votre mot de passe actuel ainsi que le nouveau mot de passe souhaité ci-dessous, puis cliquez sur \"Mettre à jour Mot de passe\". Le changement prendra effet immédiatement.", - - "INFO_PASSWORD_CHANGED" : "Mot de passe modifié.", - "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "Paramètres utilisateur enregistrés.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_APPEARANCE" : "Apparence", - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Méthode de saisie par défaut", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Mode d'émulation de la souris par défaut", - "SECTION_HEADER_UPDATE_PASSWORD" : "Modifier Mot de passe" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Nouvel Utilisateur", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Cliquez ou appuyez sur un utilisateur en dessous pour le gérer. Selon vos permissions, les utilisateurs peuvent être ajoutés, supprimés et leur mot de passe changé.", - - "SECTION_HEADER_USERS" : "Utilisateur", - - "TABLE_HEADER_FULL_NAME" : "Nom", - "TABLE_HEADER_LAST_ACTIVE" : "Dernier actif", - "TABLE_HEADER_ORGANIZATION" : "Organisation", - "TABLE_HEADER_USERNAME" : "Identifiant" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "Nouveau Groupe", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Cliquez ou appuyez sur un groupe ci-dessous pour gérer ce groupe. En fonction de votre niveau d'accès, des groupes peuvent être ajoutés et supprimés, ainsi que leurs utilisateurs et groupes membres.", - - "SECTION_HEADER_USER_GROUPS" : "Groupes", - - "TABLE_HEADER_USER_GROUP_NAME" : "Nom Groupe" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Fermer Sessions", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Fermer Sessions", - "DIALOG_HEADER_ERROR" : "Erreur", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Cette page sera remplie avec des connexions actuellement actives. Les connexions répertoriées et la possibilité de supprimer ces connexions dépendent de votre niveau d'accès. Si vous souhaitez en fermer une ou plusieurs, sélectionnez les et cliquez sur \"Fermer Sessions\". La fermeture d'une session déconnectera immédiatement l'utilisateur.", - - "INFO_NO_SESSIONS" : "Pas de session ouverte", - - "SECTION_HEADER_SESSIONS" : "Sessions Actives", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de connexion", - "TABLE_HEADER_SESSION_STARTDATE" : "Heure de début", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Hôte distant", - "TABLE_HEADER_SESSION_USERNAME" : "Identifiant", - - "TEXT_CONFIRM_DELETE" : "Êtes-vous certains de vouloir fermer toutes les connexions sélectionnées ? Les utilisateurs utilisant ces sessions seront immédiatement déconnectés." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Adresse Mail:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Nom:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organisation:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Rôle:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/it.json b/guacamole/src/main/frontend/src/translations/it.json deleted file mode 100644 index 2b4be1b3f1..0000000000 --- a/guacamole/src/main/frontend/src/translations/it.json +++ /dev/null @@ -1,604 +0,0 @@ -{ - - "NAME" : "Italiano", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Annulla", - "ACTION_CLONE" : "Clona", - "ACTION_CONTINUE" : "Continua", - "ACTION_DELETE" : "Cancella", - "ACTION_DELETE_SESSIONS" : "Termina Sessione", - "ACTION_LOGIN" : "Entra", - "ACTION_LOGOUT" : "Esci", - "ACTION_MANAGE_CONNECTIONS" : "Connessioni", - "ACTION_MANAGE_PREFERENCES" : "Preferenze", - "ACTION_MANAGE_SETTINGS" : "Opzioni", - "ACTION_MANAGE_SESSIONS" : "Sessioni Attive", - "ACTION_MANAGE_USERS" : "Utenti", - "ACTION_NAVIGATE_BACK" : "Indietro", - "ACTION_NAVIGATE_HOME" : "Home", - "ACTION_SAVE" : "Salva", - "ACTION_UPDATE_PASSWORD" : "Aggiorna Password", - - "DIALOG_HEADER_ERROR" : "Errore", - - "ERROR_PASSWORD_BLANK" : "La password non può essere vuota.", - "ERROR_PASSWORD_MISMATCH" : "Le password inserite sono diverse!", - - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Re-inserisci la password:", - - "FIELD_PLACEHOLDER_FILTER" : "Filtro", - - "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Ora utilizzato da {USERS} {USERS, plural, one{user} other{users}}." - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Pulisci i trasferimenti completati", - "ACTION_DISCONNECT" : "Disconnetti", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Riconnetti", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_UPLOAD_FILES" : "Carica un file", - - "DIALOG_HEADER_CONNECTING" : "Connessione in corso", - "DIALOG_HEADER_CONNECTION_ERROR" : "Errore di Connessione", - "DIALOG_HEADER_DISCONNECTED" : "Disconnesso", - - "ERROR_CLIENT_201" : "La connessione è stata chiusa perchè il server è sovraccarico. Attendi qualche minuto e riprova a collegarti.", - "ERROR_CLIENT_202" : "Il server Guacamole ha chiuso la connessione perchè il desktop remoto risponde troppo lentamente. Per favore riprova o contatta il tuo amministratore di sistema.", - "ERROR_CLIENT_203" : "Il desktop remoto ha riscontrato un errore ed ha chiuso la connessione. Per favore riprova o contatta il tuo amministratore di sistema.", - "ERROR_CLIENT_205" : "Questa connessione è stata chiusa a causa di un conflitto con un'altra connessione. Riprova tra qualche minuto.", - "ERROR_CLIENT_301" : "Autenticazione fallita. Prova ad effettaure nuovamente la connessione.", - "ERROR_CLIENT_303" : "Non hai i permessi per accedere a questa connessione. Se ne hai bisogno, chiedi ai tuoi amministratori di sistema di aggiungerti agli utenti abilitati.", - "ERROR_CLIENT_308" : "Il server Guacamole ha chiuso la connessione perchè il tuo browser non ha risposto per troppo tempo e sembrava essersi disconnesso. Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", - "ERROR_CLIENT_31D" : "Il server Guacamole rifiuta l'accesso alla connessione perchè hai raggiunto il limite massimo di connessioni simultanee per singolo utente. Chiudi una o più connessioni e riprova.", - "ERROR_CLIENT_DEFAULT" : "Si è verificato un errore interno sul server Guacamole, la connessione è stata terminata. Se il problema persiste avvisa il tuo amministratore di sistema o controlla i file di log.", - - "ERROR_TUNNEL_201" : "Il server Guacamole ha rifiutato questa connessione perchè ci sono troppe connessioni attive. Attendi qualche minuto e riprova.", - "ERROR_TUNNEL_202" : "La connessione è stata chiusa dal server perché ci vuole troppo tempo per rispondere. Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", - "ERROR_TUNNEL_203" : "Si è verificato un errore sul server e la connessione è stata chiusa. Riprova o contatta il tuo amministratore di sistema.", - "ERROR_TUNNEL_204" : "La connessione richiesta non esiste. Controlla il nome della connessione e riprova. Grazie.", - "ERROR_TUNNEL_205" : "Questa connessione è già in uso, non sono possibili accessi concorrenti. Riprova più tardi. Grazie.", - "ERROR_TUNNEL_301" : "Non hai i permessi per accedere a questa connessione perchè non hai effettuato il login. Inserisci nome utente e password e riprova.", - "ERROR_TUNNEL_303" : "Non hai i permessi per accedere a questa connessione. Se ne hai bisogno, chiedi ai tuoi amministratori di sistema di aggiungerti agli utenti abilitati.", - "ERROR_TUNNEL_308" : "Il server Guacamole ha chiuso la connessione perchè il tuo browser non ha risposto per troppo tempo e sembrava essersi disconnesso. Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", - "ERROR_TUNNEL_31D" : "Il server Guacamole rifiuta l'accesso alla connessione perchè hai raggiunto il limite massimo di connessioni simultanee per singolo utente. Chiudi una o più connessioni e riprova. Grazie.", - "ERROR_TUNNEL_DEFAULT" : "Si è verificato un errore interno sul server Guacamole, e la connessione è stata terminata. Se il problema persiste avvisa il tuo amministratore di sistema o controlla i file di log.", - - "ERROR_UPLOAD_100" : "Il trasferimento di file non è supportato o non è attivo. Contatta il tuo amministratore di sistema.", - "ERROR_UPLOAD_201" : "Ci sono troppi file in coda per il trasferimento. Attendi che siano completati i trasferimenti in atto e riprova.", - "ERROR_UPLOAD_202" : "Trasferimento annullato: il desktop remoto risponde troppo lentamente. Per favore riprova o contatta il tuo amministratore di sistema.", - "ERROR_UPLOAD_203" : "Il desktop remoto ha incontrato un errore durante il trasferimento. Per favore riprova o contatta il tuo amministratore di sistema.", - "ERROR_UPLOAD_204" : "La destinazione del file non esiste. Controlla che la destinazione esista e riprova.", - "ERROR_UPLOAD_205" : "La destinazione del file è bloccata. Per favore attendi che ogni processo in corso sia terminato e riprova.", - "ERROR_UPLOAD_301" : "Non hai i permessi per caricare i file perchè non hai fatto il login. Inserisci nome utente e password e riprova.", - "ERROR_UPLOAD_303" : "Non hai i permessi per caricare i file. Se ti serve questa funzionalità contatta il tuo amministratore di sistema.", - "ERROR_UPLOAD_308" : "Il trasferimento di file si è fermato. Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", - "ERROR_UPLOAD_31D" : "Ci sono troppi file in coda per il trasferimento. Attendi che siano completati i trasferimenti in atto e riprova.", - "ERROR_UPLOAD_DEFAULT" : "Si è verificato un errore sul server e la connessione è stata chiusa. Riprova o contatta il tuo amministratore di sistema.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Il testo copiato/tagliato appare qui. I cambiamenti effettuati al testo qui sotto saranno riportati negli appunti remoti.", - "HELP_INPUT_METHOD_NONE" : "Non c'è nessun metodo di immissione. L'input da tastiera è accettato da una tastiera fisica connessa.", - "HELP_INPUT_METHOD_OSK" : "Mostra e accetta input dalla tastiera su schermo. La tastiera su schermo ti permette di scrivere combinazioni di tasti altrimenti impossibli (ad esempio Ctrl-Alt-Canc).", - "HELP_INPUT_METHOD_TEXT" : "Abilita la battitura di testo ed emula gli eventi da tastiera basati sul testo battuto. Questo è necessario per tablet e smartphone che non hanno una tastiera fisica.", - "HELP_MOUSE_MODE" : "Determina come si deve comportare il mouse remoto in base al touch.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Tap to click. Il click è sostituito dal tocco.", - "HELP_MOUSE_MODE_RELATIVE" : "Trascina il dito per muovere il puntatore del mouse e fai tap al posto del click. Il click sarà effettuato dove si trova il puntatore.", - - "INFO_NO_FILE_TRANSFERS" : "Nessun trasferimento di file.", - - "NAME_INPUT_METHOD_NONE" : "Nessuno", - "NAME_INPUT_METHOD_OSK" : "Tastiera su schermo", - "NAME_INPUT_METHOD_TEXT" : "Inserimento Testo", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Touchscreen", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIPBOARD" : "Appunti", - "SECTION_HEADER_DEVICES" : "Dispositivi", - "SECTION_HEADER_DISPLAY" : "Schermo", - "SECTION_HEADER_FILE_TRANSFERS" : "Trasferimento file", - "SECTION_HEADER_INPUT_METHOD" : "Metodo di input", - "SECTION_HEADER_MOUSE_MODE" : "Modalità di emulazione del mouse", - - "TEXT_ZOOM_AUTO_FIT" : "Automatically fit to browser window", - "TEXT_CLIENT_STATUS_IDLE" : "Inattivo.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Connessione in corso a Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Sei stato disconnesso.", - "TEXT_CLIENT_STATUS_WAITING" : "Connesso a Guacamole. Attendi una risposta...", - "TEXT_RECONNECT_COUNTDOWN" : "Riconnessione in {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/it-it-qwerty.json" - - }, - - "FORM" : { - - "HELP_SHOW_PASSWORD" : "Fare clic per mostrare la password", - "HELP_HIDE_PASSWORD" : "Fare clic per nascondere la password" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Nessuna connessione recente.", - - "PASSWORD_CHANGED" : "Password modificata.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Tutte le Connessioni", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Connessioni Recenti" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Nome utente e/o password errati.", - - "FIELD_HEADER_USERNAME" : "Nome utente", - "FIELD_HEADER_PASSWORD" : "Password" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Elimina connessione", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Posizione:", - "FIELD_HEADER_NAME" : "Nome:", - "FIELD_HEADER_PROTOCOL" : "Protocollo:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Attiva adesso", - "INFO_CONNECTION_NOT_USED" : "Questa connessione non è mai stata usata.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Modifica Connessione", - "SECTION_HEADER_HISTORY" : "Cronologia di utilizzo", - "SECTION_HEADER_PARAMETERS" : "Parametri", - - "TABLE_HEADER_HISTORY_USERNAME" : "Nome utente", - "TABLE_HEADER_HISTORY_START" : "Ora di inizio", - "TABLE_HEADER_HISTORY_DURATION" : "Durata", - - "TEXT_CONFIRM_DELETE" : "Le Connessioni non possono essere ripristinate dopo la loro eliminazione. Sei sicuro di volere eliminare questa connessione?" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Elimina Gruppo di Connesisoni", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Posizione:", - "FIELD_HEADER_NAME" : "Nome:", - "FIELD_HEADER_TYPE" : "Tipo:", - - "NAME_TYPE_BALANCING" : "Bilanciamento", - "NAME_TYPE_ORGANIZATIONAL" : "Organizzazione", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Modifica Gruppo di Connessioni", - - "TEXT_CONFIRM_DELETE" : "Un Gruppo di Connessioni non può essere ripristinato dopo l'eliminazione. Sei sicuro di volere eliminare questa gruppo?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Nome:", - - "SECTION_HEADER_PARAMETERS" : "Parametri" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Elimina utente", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Amministartore di sistema:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Cambia la tua password:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Crea un utente:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Crea una connessione:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Crea un ruppo di connessioni:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USERNAME" : "Nome utente:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "SECTION_HEADER_CONNECTIONS" : "Connessioni", - "SECTION_HEADER_EDIT_USER" : "Modifica Utente", - "SECTION_HEADER_PERMISSIONS" : "Permessi", - - "TEXT_CONFIRM_DELETE" : "L'utente non può essere ripristinato dopo l'eliminazione. Sei sicuro di volere eliminare l'utente?" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_COLOR_DEPTH" : "Profondità di colore:", - "FIELD_HEADER_CONSOLE" : "Console amministratore:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Supporta l'audio nella console:", - "FIELD_HEADER_CLIENT_NAME" : "Client name:", - "FIELD_HEADER_DISABLE_AUDIO" : "Disattiva audio:", - "FIELD_HEADER_DISABLE_AUTH" : "Disabilita autenticazione:", - "FIELD_HEADER_DOMAIN" : "Dominio:", - "FIELD_HEADER_DPI" : "Risoluzione (DPI):", - "FIELD_HEADER_DRIVE_PATH" : "Drive path:", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Abilita composizione desktop (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Abilita drive:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Abilita l'arrotondamento dei caratteri (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Abilita il trascinamento della finestra intera:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Abilita le animazioni del menu:", - "FIELD_HEADER_ENABLE_PRINTING" : "Abilita la stampa:", - "FIELD_HEADER_ENABLE_SFTP" : "Abilita SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Abilita temi:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Abilita sfondo:", - "FIELD_HEADER_HEIGHT" : "Altezza:", - "FIELD_HEADER_HOSTNAME" : "Nome host:", - "FIELD_HEADER_IGNORE_CERT" : "Ignora certificato server:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Programma iniziale:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parametri:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Directory di lavoro:", - "FIELD_HEADER_REMOTE_APP" : "Programma:", - "FIELD_HEADER_SECURITY" : "Modalità di sicurezza:", - "FIELD_HEADER_SERVER_LAYOUT" : "Layout della tastiera:", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nome host:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Password:", - "FIELD_HEADER_SFTP_PORT" : "Porta:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Chiave privata:", - "FIELD_HEADER_SFTP_USERNAME" : "Nome utente:", - "FIELD_HEADER_STATIC_CHANNELS" : "Nomi dei canali statici:", - "FIELD_HEADER_USERNAME" : "Nome utente:", - "FIELD_HEADER_WIDTH" : "Larghezza:", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_SECURITY_ANY" : "Qualsiasi", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", - "FIELD_OPTION_SECURITY_RDP" : "RDP encryption", - "FIELD_OPTION_SECURITY_TLS" : "TLS encryption", - - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiana (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polacca (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Rumeno (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticazione", - "SECTION_HEADER_BASIC_PARAMETERS" : "Impostazioni di base", - "SECTION_HEADER_CLIPBOARD" : "Appunti", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Reindirizzamento del dispositivo", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_NETWORK" : "Network", - "SECTION_HEADER_PERFORMANCE" : "Prestazione", - "SECTION_HEADER_REMOTEAPP" : "RemoteApp", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_FONT_NAME" : "Nome carattere:", - "FIELD_HEADER_FONT_SIZE" : "Dimensione del carattere:", - "FIELD_HEADER_ENABLE_SFTP" : "Abilita SFTP:", - "FIELD_HEADER_HOSTNAME" : "Nome host:", - "FIELD_HEADER_USERNAME" : "Nome utente:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_PRIVATE_KEY" : "Chiave privata:", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticazione", - "SECTION_HEADER_CLIPBOARD" : "Appunti", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_NETWORK" : "Network", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_FONT_NAME" : "Nome carattere:", - "FIELD_HEADER_FONT_SIZE" : "Dimensione del carattere:", - "FIELD_HEADER_HOSTNAME" : "Nome host:", - "FIELD_HEADER_USERNAME" : "Nome utente:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSWORD_REGEX" : "Espressione regolare della password:", - "FIELD_HEADER_PORT" : "Porta:", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticazione", - "SECTION_HEADER_CLIPBOARD" : "Appunti", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_NETWORK" : "Network" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Nome del server audio:", - "FIELD_HEADER_COLOR_DEPTH" : "Profondità di colore:", - "FIELD_HEADER_CURSOR" : "Cursore:", - "FIELD_HEADER_DEST_HOST" : "Host di destinazione:", - "FIELD_HEADER_DEST_PORT" : "Porto di destinazione:", - "FIELD_HEADER_ENABLE_AUDIO" : "Abilita audio:", - "FIELD_HEADER_ENABLE_SFTP" : "Abilita SFTP:", - "FIELD_HEADER_HOSTNAME" : "Nome host:", - "FIELD_HEADER_USERNAME" : "Nome utente:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_READ_ONLY" : "Sola lettura:", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nome host:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Password:", - "FIELD_HEADER_SFTP_PORT" : "Porta:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Chiave privata:", - "FIELD_HEADER_SFTP_USERNAME" : "Nome utente:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Scambia componenti rosso/blu:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Locale", - "FIELD_OPTION_CURSOR_REMOTE" : "Remoto", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Audio", - "SECTION_HEADER_AUTHENTICATION" : "Autenticazione", - "SECTION_HEADER_CLIPBOARD" : "Appunti", - "SECTION_HEADER_DISPLAY" : "Display", - "SECTION_HEADER_NETWORK" : "Network", - "SECTION_HEADER_REPEATER" : "VNC Repeater", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Impostazioni" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "Nuova Connessione", - "ACTION_NEW_CONNECTION_GROUP" : "Nuovo Gruppo", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Fai click o tap sulla connessione qui sotto per gestire quella connessione. In base al tuo livello di accesso, le connessioni possono essere create, eliminate, e le relative proprietà (protocol, hostname, port, etc.) possono essere cambiate.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Connessioni" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome della connessione", - "TABLE_HEADER_SESSION_STARTDATE" : "Ora di inizio", - "TABLE_HEADER_SESSION_DURATION" : "Durata", - "TABLE_HEADER_SESSION_USERNAME" : "Nome utente" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Lingua dell'interfaccia:", - "FIELD_HEADER_PASSWORD" : "Password:", - "FIELD_HEADER_PASSWORD_OLD" : "Password Attuale:", - "FIELD_HEADER_PASSWORD_NEW" : "Nuova Password:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Conferma Nuova Password:", - "FIELD_HEADER_USERNAME" : "Nome utente", - - "HELP_DEFAULT_INPUT_METHOD" : "Il metodo di input predefinito determina come gli eventi della tastiera vengono ricevuti da Guacamole. La modifica di questa impostazione potrebbe essere necessaria quando si utilizza un dispositivo mobile o quando si digita un IME. Questa impostazione può essere ignorata in base alla connessione all'interno del menu Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "La modalità di emulazione del mouse predefinita determina come si comporterà il mouse remoto nelle nuove connessioni rispetto ai tocchi. Questa impostazione può essere ignorata in base alla connessione all'interno del menu Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LANGUAGE" : "Seleziona una lingua diversa di seguito per cambiare la lingua di tutto il testo all'interno di Guacamole. Le scelte disponibili dipenderanno dalle lingue installate.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Se desideri cambiare la tua password, inserisci la tua password attuale e sotto scrivi quella che desideri come nuova password, clicca \"Modifica Password\". La modifica avrà effetto immediato.", - - "INFO_PASSWORD_CHANGED" : "Password Modificata.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Metodo di immissione predefinito", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Modalità di emulazione del mouse predefinita", - "SECTION_HEADER_UPDATE_PASSWORD" : "Modifica Password" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Nuovo utente", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Fare clic o toccare un utente di seguito per gestire quell'utente. A seconda del livello di accesso, gli utenti possono essere aggiunti ed eliminati e le loro password possono essere modificate.", - - "SECTION_HEADER_USERS" : "Utenti", - - "TABLE_HEADER_USERNAME" : "Nome utente" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Termina Sessione", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Termina Sessione", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Questa pagina verrà popolata con connessioni attualmente attive. Le connessioni elencate e la possibilità di terminare tali connessioni dipende dal tuo livello di accesso. Se desideri terminare una o più sessioni, seleziona la casella accanto a quelle sessioni e fai clic su \"Termina sessione \". Terminando una sessione si disconnetterà immediatamente l'utente dalla connessione associata.", - - "INFO_NO_SESSIONS" : "Nessuna sessione attiva", - - "SECTION_HEADER_SESSIONS" : "Sessioni Attive", - - "TABLE_HEADER_SESSION_USERNAME" : "Nome utente", - "TABLE_HEADER_SESSION_STARTDATE" : "Attivo da", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Host remoto", - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome della connessione", - - "TEXT_CONFIRM_DELETE" : "Sei sicuro di voler terminare la sessione selezionata? L'utente che sta utilizzando questa sessione sarà immediatamente disconnesso." - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/ja.json b/guacamole/src/main/frontend/src/translations/ja.json deleted file mode 100644 index 73a55e099e..0000000000 --- a/guacamole/src/main/frontend/src/translations/ja.json +++ /dev/null @@ -1,846 +0,0 @@ -{ - - "NAME" : "日本語", - - "APP" : { - - "ACTION_CANCEL" : "キャンセル", - "ACTION_CLONE" : "コピー", - "ACTION_CONTINUE" : "次へ", - "ACTION_DELETE" : "削除", - "ACTION_DELETE_SESSIONS" : "セッションの切断", - "ACTION_DOWNLOAD" : "ダウンロード", - "ACTION_LOGIN" : "ログイン", - "ACTION_LOGOUT" : "ログアウト", - "ACTION_MANAGE_CONNECTIONS" : "接続", - "ACTION_MANAGE_PREFERENCES" : "ユーザ設定", - "ACTION_MANAGE_SETTINGS" : "設定", - "ACTION_MANAGE_SESSIONS" : "アクティブなセッション", - "ACTION_MANAGE_USERS" : "ユーザ", - "ACTION_MANAGE_USER_GROUPS" : "グループ", - "ACTION_NAVIGATE_BACK" : "戻る", - "ACTION_NAVIGATE_HOME" : "ホーム", - "ACTION_SAVE" : "保存", - "ACTION_SEARCH" : "検索", - "ACTION_SHARE" : "シェア", - "ACTION_UPDATE_PASSWORD" : "パスワードの更新", - "ACTION_VIEW_HISTORY" : "履歴", - - "DIALOG_HEADER_ERROR" : "エラー", - - "ERROR_PAGE_UNAVAILABLE" : "エラーが発生したため、この操作を完了できませんでした。問題が解決しない場合は、システム管理者に連絡するか、システムログを確認してください。", - - "ERROR_PASSWORD_BLANK" : "パスワードが入力されていません。", - "ERROR_PASSWORD_MISMATCH" : "パスワードが一致しません。", - - "FIELD_HEADER_PASSWORD" : "パスワード:", - "FIELD_HEADER_PASSWORD_AGAIN" : "パスワード確認:", - - "FIELD_PLACEHOLDER_FILTER" : "フィルタ", - - "INFO_ACTIVE_USER_COUNT" : "現在以下のユーザが利用中です。 {USERS} {USERS, plural, one{user} other{users}}.", - - "TEXT_ANONYMOUS_USER" : "匿名ユーザ" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "クリア", - "ACTION_DISCONNECT" : "切断", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "再接続", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_SHOW_CLIPBOARD" : "クリックをしてコピー/カットされたテキストが表示されます。", - "ACTION_UPLOAD_FILES" : "ファイルアップロード", - - "DIALOG_HEADER_CONNECTING" : "接続", - "DIALOG_HEADER_CONNECTION_ERROR" : "接続エラー", - "DIALOG_HEADER_DISCONNECTED" : "切断", - - "ERROR_CLIENT_201": "サーバーがビジー状態のため、この接続は切断されました。数分待ってからもう一度お試しください。", - "ERROR_CLIENT_202": "リモートデスクトップの応答に時間がかかりすぎるため、Guacamoleサーバが接続を切断しました。再試行するか、システム管理者に連絡してください。", - "ERROR_CLIENT_203": "リモートデスクトップサーバーでエラーが発生し、接続を切断しました。再試行するかシステム管理者に連絡してください。", - "ERROR_CLIENT_207": "現在リモートデスクトップサーバーにアクセスできません。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", - "ERROR_CLIENT_208": "リモートデスクトップサーバーは現在利用できません。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", - "ERROR_CLIENT_209": "リモートデスクトップサーバーが他の接続と競合しています。後でもう一度やり直してください。", - "ERROR_CLIENT_20A": "リモートデスクトップサーバーが停止しているため接続を閉じました。システム管理者に連絡するか、システム設定を確認してください。", - "ERROR_CLIENT_20B": "リモートデスクトップサーバーが強制的に接続を切断しました。システム管理者に連絡するか、システムログを確認してください。", - "ERROR_CLIENT_301": "ログインに失敗しました。再接続してからもう一度お試しください。", - "ERROR_CLIENT_303": "リモートデスクトップサーバーがこの接続へのアクセスを拒否しました。アクセスが必要な場合は、システム管理者にアカウントのアクセスを許可を依頼するか、システム設定を確認してください。", - "ERROR_CLIENT_308": "ブラウザからの応答が十分でないため、Guacamoleサーバーが接続を切断しました。これは一般的にネットワークの問題が原因です。ネットワークの状態を確認して、もう一度やり直してください。 ", - "ERROR_CLIENT_31D": "同時接続の使用制限に達したため、Guacamoleサーバーはこの接続へのアクセスを拒否しています。1つ以上の接続を閉じてからやり直してください。", - "ERROR_CLIENT_DEFAULT": "Guacamoleサーバ内で内部エラーが発生し、接続が終了しました。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", - - "ERROR_TUNNEL_201": "アクティブな接続が多すぎるため、Guacamoleサーバーはこの接続を拒否しました。数分待ってからもう一度お試しください。", - "ERROR_TUNNEL_202": "サーバーの応答に時間がかかりすぎるため、接続が切断されました。通常はネットワーク問題によって引き起こされます。", - "ERROR_TUNNEL_203": "サーバーでエラーが発生し、接続を切断しました。再試行するかシステム管理者に連絡してください。", - "ERROR_TUNNEL_204": "指定された接続は存在しません。接続名を確認してもう一度やり直してください。", - "ERROR_TUNNEL_205": "この接続は現在使用中です。同時アクセスは許可されていません。後ほどやり直してください。", - "ERROR_TUNNEL_207": "現在Guacamoleサーバーにアクセスできません。ネットワークの状態を確認してもう一度やり直してください。", - "ERROR_TUNNEL_208": "Guacamoleサーバーは接続を受け付けていません。ネットワークの状態を確認してもう一度やり直してください。", - "ERROR_TUNNEL_301": "あなたはログインしていないため、この接続にアクセスする権限がありません。ログインしてからやり直してください。", - "ERROR_TUNNEL_303": "この接続にアクセスする権限がありません。アクセスが必要な場合は、システム管理者に許可を依頼するか、システム設定を確認してください。", - "ERROR_TUNNEL_308": "ブラウザからの応答がないため、Guacamoleサーバーが接続を切断しました。一般的にネットワークの問題が原因です。ネットワークの状態を確認して、もう一度やり直してください。 ", - "ERROR_TUNNEL_31D": "同時接続の使用制限に達したため、Guacamoleサーバーはこの接続へのアクセスを拒否しています。1つ以上の接続を閉じてからやり直してください。", - "ERROR_TUNNEL_DEFAULT": "Guacamoleサーバー内で内部エラーが発生し、接続が終了しました。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", - - "ERROR_UPLOAD_100": "ファイル転送がサポートされていないか有効になっていません。システム管理者に連絡するか、システムログを確認してください。", - "ERROR_UPLOAD_201": "現在転送中のファイルが多すぎます。転送が完了するのを待ってからやり直してください。", - "ERROR_UPLOAD_202": "リモートデスクトップサーバーの応答に時間がかかりすぎるため、ファイルを転送できません。やりなおすかシステム管理者に連絡してください。", - "ERROR_UPLOAD_203": "転送中にリモートデスクトップサーバーでエラーが発生しました。もう一度やり直すか、システム管理者に連絡してください。", - "ERROR_UPLOAD_204": "ファイル転送先が存在しません。宛先が存在することを確認してやり直してください。", - "ERROR_UPLOAD_205": "ファイル転送先は現在ロックされています。進行中のタスクが完了するのを待ってからやり直してください。 ", - "ERROR_UPLOAD_301": "あなたはログインしていないため、このファイルをアップロードする権限がありません。ログインしてからやり直してください。", - "ERROR_UPLOAD_303": "このファイルをアップロードする権限がありません。アクセスが必要な場合は、システム設定を確認するか、システム管理者に確認してください。", - "ERROR_UPLOAD_308": "ファイル転送が停止しています。これは一般的にネットワーク速度が非常に遅いなどのネットワークの問題が原因で発生します。", - "ERROR_UPLOAD_31D": "現在転送中のファイルが多すぎます。転送が完了するのを待ってからやり直してください。", - "ERROR_UPLOAD_DEFAULT": "Guacamoleサーバ内で内部エラーが発生し、接続が終了しました。それでも問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", - - "HELP_CLIPBOARD": "Guacamole内でコピー/カットされたテキストがここに表示されます。以下のテキストを変更するとリモートクリップボードに影響します。 ", - "HELP_INPUT_METHOD_NONE": "入力方法は指定されていません。キーボード入力は接続された物理的なキーボードから受け付けられます。 ", - "HELP_INPUT_METHOD_OSK": "内蔵のGuacamoleオンスクリーンキーボードからの入力を表示し、受け入れます。オンスクリーンキーボードを使用すると、不可能な場合もあるキーの組み合わせを入力できます(Ctrl-Alt-Delなど)。", - "HELP_INPUT_METHOD_TEXT": "テキストの入力を許可し、入力されたテキストに基づいてキーボードイベントをエミュレートします。これはスマートフォンのような物理的なキーボードがない機器に必要です。 ", - "HELP_MOUSE_MODE": "タッチに対するリモートマウスの動作を決定します。 ", - "HELP_MOUSE_MODE_ABSOLUTE": "タッチによってクリックを行います。タッチの位置でクリックしたとみなされます。 ", - "HELP_MOUSE_MODE_RELATIVE": "マウスポインタをドラッグしてからクリックします。マウスポインタの位置でクリックしたとみなされます。 ", - "HELP_SHARE_LINK": "現在の接続は共有されており、次の{LINKS、multiple、one {link} other {links}}を持つ人なら誰でもアクセスできます:", - - "INFO_CONNECTION_SHARED": "この接続は現在共有されています。", - "INFO_NO_FILE_TRANSFERS": "ファイル転送はありません。", - - - "NAME_INPUT_METHOD_NONE" : "なし", - "NAME_INPUT_METHOD_OSK" : "オンスクリーンキーボード", - "NAME_INPUT_METHOD_TEXT" : "テキストインプット", - "NAME_MOUSE_MODE_ABSOLUTE" : "タッチスクリーン", - "NAME_MOUSE_MODE_RELATIVE" : "タッチパッド", - - "SECTION_HEADER_CLIPBOARD" : "クリップボード", - "SECTION_HEADER_DEVICES" : "デバイス", - "SECTION_HEADER_DISPLAY" : "ディスプレイ", - "SECTION_HEADER_FILE_TRANSFERS" : "ファイル転送", - "SECTION_HEADER_INPUT_METHOD" : "インプットメソッド", - "SECTION_HEADER_MOUSE_MODE" : "マウスエミュレートモード", - - "TEXT_ZOOM_AUTO_FIT" : "自動的にブラウザのサイズに合わせる", - "TEXT_CLIENT_STATUS_IDLE" : "アイドル状態.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Guacamoleサーバに接続しています...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "切断されました。", - "TEXT_CLIENT_STATUS_UNSTABLE" : "Guacamoleサーバへのネットワーク接続が不安定です。", - "TEXT_CLIENT_STATUS_WAITING" : "Guacamoleサーバに接続しました。応答を待っています", - "TEXT_RECONNECT_COUNTDOWN" : "再接続しています... {REMAINING} {REMAINING, plural, one{second} other{seconds}}..." - - }, - - "FORM" : { - - "HELP_SHOW_PASSWORD" : "パスワードを見る", - "HELP_HIDE_PASSWORD" : "パスワードを隠す" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "最近の接続情報はありません。", - - "PASSWORD_CHANGED" : "パスワードが変更されました。", - - "SECTION_HEADER_ALL_CONNECTIONS" : "全ての接続情報", - "SECTION_HEADER_RECENT_CONNECTIONS" : "最近の接続情報" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "匿名" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "不正なログインです。", - - "FIELD_HEADER_USERNAME" : "ユーザ名", - "FIELD_HEADER_PASSWORD" : "パスワード" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "接続の削除", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "ロケーション:", - "FIELD_HEADER_NAME" : "名前:", - "FIELD_HEADER_PROTOCOL" : "プロトコル:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "アクティブにする", - "INFO_CONNECTION_NOT_USED" : "この接続はまだ使用されていません。", - - "SECTION_HEADER_EDIT_CONNECTION" : "接続の編集", - "SECTION_HEADER_HISTORY" : "使用履歴", - "SECTION_HEADER_PARAMETERS" : "パラメータ", - - "TABLE_HEADER_HISTORY_USERNAME" : "ユーザ名", - "TABLE_HEADER_HISTORY_START" : "開始時間", - "TABLE_HEADER_HISTORY_DURATION" : "期間", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "接続元", - - "TEXT_CONFIRM_DELETE" : "削除した接続は元に戻せません。この接続を削除してもよろしいですか?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "接続グループの削除", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "ロケーション:", - "FIELD_HEADER_NAME" : "名前:", - "FIELD_HEADER_TYPE" : "タイプ:", - - "NAME_TYPE_BALANCING" : "バランシング", - "NAME_TYPE_ORGANIZATIONAL" : "組織", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "接続グループの編集", - - "TEXT_CONFIRM_DELETE" : "接続グループを削除した後に復元することはできません。この接続グループを削除してもよろしいですか?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "共有プロファイルの削除", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "名前:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "プライマリ接続:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "共有プロファイルの編集", - "SECTION_HEADER_PARAMETERS" : "パラメータ", - - "TEXT_CONFIRM_DELETE" : "削除した共有プロファイルは復元できません。この共有プロファイルを削除してもよろしいですか?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "ユーザ削除", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "システム管理者:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "自身のパスワードの変更:", - "FIELD_HEADER_CREATE_NEW_USERS" : "ユーザの作成:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "ユーザグループの作成:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "接続の作成:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "接続グループの作成:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "共有プロファイルの作成:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "ログインの無効化:", - "FIELD_HEADER_USERNAME" : "ユーザ名:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "このユーザーは現在どのグループにも属していません。このセクションを展開してグループを追加してください。", - - "INFO_READ_ONLY" : "このユーザは編集できません。", - "INFO_NO_USER_GROUPS_AVAILABLE" : "利用可能なグループがありません。", - - "SECTION_HEADER_ALL_CONNECTIONS" : "すべての接続", - "SECTION_HEADER_CONNECTIONS" : "接続", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "現在の接続", - "SECTION_HEADER_EDIT_USER" : "ユーザの編集", - "SECTION_HEADER_PERMISSIONS" : "権限", - "SECTION_HEADER_USER_GROUPS" : "グループ", - - "TEXT_CONFIRM_DELETE" : "削除したユーザーは元に戻せません。このユーザーを削除してもよろしいですか?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "グループの削除", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "グループの無効化:", - "FIELD_HEADER_USER_GROUP_NAME" : "グループ名:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "このグループは現在どのグループにも属していません。グループを追加するにはこのセクションを展開してください。", - "HELP_NO_MEMBER_USER_GROUPS" : "このグループには現在グループが含まれていません。このセクションを展開してグループを追加してください。", - "HELP_NO_MEMBER_USERS" : "このグループには現在ユーザーが含まれていません。ユーザーを追加するにはこのセクションを展開してください。", - - "INFO_READ_ONLY" : "このグループは編集できません", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "利用可能なユーザがいません。", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "グループ編集", - "SECTION_HEADER_MEMBER_USERS" : "メンバーユーザ", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "メンバーグループ", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "親グループ", - - "TEXT_CONFIRM_DELETE" : "削除したグループは復元できません。このグループを削除してもよろしいですか?" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Backspaceキーの送信:", - "FIELD_HEADER_CA_CERT" : "認証局証明書:", - "FIELD_HEADER_CLIENT_CERT" : "クライアント証明書:", - "FIELD_HEADER_CLIENT_KEY" : "クライアントの秘密鍵:", - "FIELD_HEADER_COLOR_SCHEME" : "カラースキーマ:", - "FIELD_HEADER_CONTAINER" : "コンテナ名:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリを自動的に作成する:", - "FIELD_HEADER_DISABLE_COPY" : "端末からのコピーを無効化:", - "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", - "FIELD_HEADER_FONT_NAME" : "フォント名:", - "FIELD_HEADER_FONT_SIZE" : "フォントサイズ:", - "FIELD_HEADER_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_IGNORE_CERT" : "サーバ証明書を無視:", - "FIELD_HEADER_NAMESPACE" : "名前空間:", - "FIELD_HEADER_POD" : "ポッド名:", - "FIELD_HEADER_PORT" : "ポート:", - "FIELD_HEADER_READ_ONLY" : "読み取り専用:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", - "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", - "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", - "FIELD_HEADER_SCROLLBACK" : "スクロールバックサイズの最大値:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "タイプスクリプト名:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリ:", - "FIELD_HEADER_USE_SSL" : "SSL/TLS の利用", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "認証", - "SECTION_HEADER_BEHAVIOR" : "ターミナルのふるまい", - "SECTION_HEADER_CLIPBOARD" : "クリップボード", - "SECTION_HEADER_CONTAINER" : "コンテナ", - "SECTION_HEADER_DISPLAY" : "ディスプレイ", - "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", - "SECTION_HEADER_TYPESCRIPT" : "タイプスクリプト (テキストの記録)", - "SECTION_HEADER_NETWORK" : "ネットワーク" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "クライアント名:", - "FIELD_HEADER_COLOR_DEPTH" : "カラー深度:", - "FIELD_HEADER_CONSOLE" : "管理者コンソール:", - "FIELD_HEADER_CONSOLE_AUDIO" : "コンソールでの音声サポート:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "ドライブの自動作成:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", - "FIELD_HEADER_DISABLE_AUDIO" : "オーディオの無効化:", - "FIELD_HEADER_DISABLE_AUTH" : "認証の無効化:", - "FIELD_HEADER_DISABLE_COPY" : "リモートデスクトップからのコピーを無効化:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", - "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", - "FIELD_HEADER_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", - "FIELD_HEADER_DOMAIN" : "ドメイン:", - "FIELD_HEADER_DPI" : "解像度 (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "ドライブ名:", - "FIELD_HEADER_DRIVE_PATH" : "ドライブパス:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "入力オーディオ(マイク)の有効化:", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "デスクトップコンポジション(Aero)の有効化:", - "FIELD_HEADER_ENABLE_DRIVE" : "ドライブの有効化:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "クリアタイプフォントの有効化:", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "フルウィンドウドラッグの有効化:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "メニューアニメーションの有効化:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "ビットマップキャッシュの無効化:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "オフスクリーンキャッシュの無効化:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "グリフキャッシュの無効化:", - "FIELD_HEADER_ENABLE_PRINTING" : "印刷の有効化:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTPの有効化:", - "FIELD_HEADER_ENABLE_THEMING" : "テーマの有効化:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "壁紙の有効化:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "ドメイン:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "パスワード:", - "FIELD_HEADER_GATEWAY_PORT" : "ポート:", - "FIELD_HEADER_GATEWAY_USERNAME" : "ユーザ名:", - "FIELD_HEADER_HEIGHT" : "高さ:", - "FIELD_HEADER_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_IGNORE_CERT" : "サーバ証明書を無視する:", - "FIELD_HEADER_INITIAL_PROGRAM" : "初期化プログラム:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "ロードバランス情報/クッキー:", - "FIELD_HEADER_PASSWORD" : "パスワード:", - "FIELD_HEADER_PORT" : "ポート:", - "FIELD_HEADER_PRINTER_NAME" : "リダイレクトされたプリンタ名:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "事前接続BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDPソースID:", - "FIELD_HEADER_READ_ONLY" : "読み取り専用:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", - "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", - "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", - "FIELD_HEADER_RESIZE_METHOD" : "サイズ変更方法:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "パラメータ:", - "FIELD_HEADER_REMOTE_APP_DIR" : "作業ディレクトリ:", - "FIELD_HEADER_REMOTE_APP" : "プログラム:", - "FIELD_HEADER_SECURITY" : "セキュリティモード:", - "FIELD_HEADER_SERVER_LAYOUT" : "キーボードレイアウト:", - "FIELD_HEADER_SFTP_DIRECTORY" : "デフォルトアップロードディレクトリ:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", - "FIELD_HEADER_SFTP_HOST_KEY" : "パブリックホストキー (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTPキープアライブ間隔:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "パスフレーズ:", - "FIELD_HEADER_SFTP_PASSWORD" : "パスワード:", - "FIELD_HEADER_SFTP_PORT" : "ポート:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "秘密鍵:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "ファイルブラウザのルートディレクトリ:", - "FIELD_HEADER_SFTP_USERNAME" : "ユーザ名:", - "FIELD_HEADER_STATIC_CHANNELS" : "静的チャンネル名:", - "FIELD_HEADER_TIMEZONE" : "タイムゾーン:", - "FIELD_HEADER_USERNAME" : "ユーザ名:", - "FIELD_HEADER_WIDTH" : "幅:", - - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", - "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", - "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Lowカラー (16ビット)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Trueカラー (24ビット)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Trueカラー (32ビット)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256カラー", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"ディスプレイアップデート\" 仮想チャンネル (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "再接続", - - "SECTION_HEADER_AUTHENTICATION" : "認証", - "SECTION_HEADER_BASIC_PARAMETERS" : "基本設定", - "SECTION_HEADER_CLIPBOARD" : "クリップボード", - "SECTION_HEADER_DEVICE_REDIRECTION" : "デバイスリダイレクト", - "SECTION_HEADER_DISPLAY" : "ディスプレイ", - "SECTION_HEADER_GATEWAY" : "リモートデスクトップゲートウェイ", - "SECTION_HEADER_LOAD_BALANCING" : "ロードバラシング", - "SECTION_HEADER_NETWORK" : "ネットワーク", - "SECTION_HEADER_PERFORMANCE" : "パフォーマンス", - "SECTION_HEADER_PRECONNECTION_PDU" : "事前接続 PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", - "SECTION_HEADER_REMOTEAPP" : "リモートアプリケーション" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Backspaceキーの送信:", - "FIELD_HEADER_COLOR_SCHEME" : "カラースキーマ:", - "FIELD_HEADER_COMMAND" : "コマンドの実行:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリを自動的に作成する:", - "FIELD_HEADER_DISABLE_COPY" : "端末からのコピーを無効化:", - "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", - "FIELD_HEADER_FONT_NAME" : "フォント名:", - "FIELD_HEADER_FONT_SIZE" : "フォントサイズ:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTPの有効化:", - "FIELD_HEADER_HOST_KEY" : "公開鍵(Base64):", - "FIELD_HEADER_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_LOCALE" : "言語/ロケール ($LANG):", - "FIELD_HEADER_USERNAME" : "ユーザ名:", - "FIELD_HEADER_PASSWORD" : "パスワード:", - "FIELD_HEADER_PASSPHRASE" : "パスフレーズ:", - "FIELD_HEADER_PORT" : "ポート:", - "FIELD_HEADER_PRIVATE_KEY" : "秘密鍵:", - "FIELD_HEADER_SCROLLBACK" : "スクロールバックサイズの最大値:", - "FIELD_HEADER_READ_ONLY" : "読み取り専用:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", - "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", - "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "キープアライブ間隔:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "ファイルブラウザのルートディレクトリ:", - "FIELD_HEADER_TERMINAL_TYPE" : "ターミナルタイプ:", - "FIELD_HEADER_TIMEZONE" : "タイムゾーン ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "タイプスクリプト名:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリ:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", - "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", - "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", - - "SECTION_HEADER_AUTHENTICATION" : "認証", - "SECTION_HEADER_BEHAVIOR" : "ターミナルのふるまい", - "SECTION_HEADER_CLIPBOARD" : "クリップボード", - "SECTION_HEADER_DISPLAY" : "ディスプレイ", - "SECTION_HEADER_NETWORK" : "ネットワーク", - "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", - "SECTION_HEADER_SESSION" : "セッション / 環境", - "SECTION_HEADER_TYPESCRIPT" : "タイプスクリプト (テキストの記録)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Backspaceキーの送信:", - "FIELD_HEADER_COLOR_SCHEME" : "カラースキーマ:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリを自動的に作成する:", - "FIELD_HEADER_DISABLE_COPY" : "端末からのコピーを無効化:", - "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", - "FIELD_HEADER_FONT_NAME" : "フォント名:", - "FIELD_HEADER_FONT_SIZE" : "フォントサイズ:", - "FIELD_HEADER_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "ログイン失敗正規表現:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "ログイン成功正規表現:", - "FIELD_HEADER_USERNAME" : "ユーザ名:", - "FIELD_HEADER_USERNAME_REGEX" : "ユーザ名正規表現:", - "FIELD_HEADER_PASSWORD" : "パスワード:", - "FIELD_HEADER_PASSWORD_REGEX" : "パスワード正規表現:", - "FIELD_HEADER_PORT" : "ポート:", - "FIELD_HEADER_READ_ONLY" : "読み取り専用:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", - "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", - "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", - "FIELD_HEADER_SCROLLBACK" : "スクロールバックサイズの最大値:", - "FIELD_HEADER_TERMINAL_TYPE" : "ターミナルタイプ:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "タイプスクリプト名:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "タイプスクリプト保存ディレクトリ:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", - "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", - "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", - - "SECTION_HEADER_AUTHENTICATION" : "認証", - "SECTION_HEADER_BEHAVIOR" : "ターミナルのふるまい", - "SECTION_HEADER_CLIPBOARD" : "クリップボード", - "SECTION_HEADER_DISPLAY" : "ディスプレイ", - "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", - "SECTION_HEADER_TYPESCRIPT" : "タイプスクリプト (テキストの記録)", - "SECTION_HEADER_NETWORK" : "ネットワーク" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "オーディオサーバ名:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "エンコード:", - "FIELD_HEADER_COLOR_DEPTH" : "カラー深度:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する::", - "FIELD_HEADER_CURSOR" : "カーソル:", - "FIELD_HEADER_DEST_HOST" : "宛先ホスト:", - "FIELD_HEADER_DEST_PORT" : "宛先ポート:", - "FIELD_HEADER_DISABLE_COPY" : "リモートデスクトップからのコピーを無効化:", - "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", - "FIELD_HEADER_ENABLE_AUDIO" : "オーディオの有効化:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTPの有効化:", - "FIELD_HEADER_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_USERNAME" : "ユーザ名:", - "FIELD_HEADER_PASSWORD" : "パスワード:", - "FIELD_HEADER_PORT" : "ポート:", - "FIELD_HEADER_READ_ONLY" : "読み取り専用:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", - "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", - "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", - "FIELD_HEADER_SFTP_DIRECTORY" : "デフォルトアップロードディレクトリ:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", - "FIELD_HEADER_SFTP_HOST_KEY" : "公開鍵 (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "ホスト名:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTPキープアライブ間隔:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "パスフレーズ:", - "FIELD_HEADER_SFTP_PASSWORD" : "パスワード:", - "FIELD_HEADER_SFTP_PORT" : "ポート:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "秘密鍵:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "ファイルブラウザのルートディレクトリ:", - "FIELD_HEADER_SFTP_USERNAME" : "ユーザ名:", - "FIELD_HEADER_SWAP_RED_BLUE" : "レッド・ブルー コンポーネントスワップ:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", - "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", - "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256カラー", - "FIELD_OPTION_COLOR_DEPTH_16" : "Lowカラー (16ビット)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Trueカラー (24ビット)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Trueカラー (32ビット)", - - "FIELD_OPTION_CURSOR_LOCAL" : "ローカル", - "FIELD_OPTION_CURSOR_REMOTE" : "リモート", - - "SECTION_HEADER_AUDIO" : "オーティオ", - "SECTION_HEADER_AUTHENTICATION" : "認証", - "SECTION_HEADER_CLIPBOARD" : "クリップボード", - "SECTION_HEADER_DISPLAY" : "ディスプレイ", - "SECTION_HEADER_NETWORK" : "ネットワーク", - "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", - "SECTION_HEADER_REPEATER" : "VNCリピーター" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "設定" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "過去の接続履歴はここに表示されています。列の見出しをクリックしてソートすることができます。特定のレコードを検索するにはフィルタに検索キーワードを入力して、検索ボタンをクリックしてください。", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "一致するレコードがありません。", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "接続名", - "TABLE_HEADER_SESSION_DURATION" : "期間", - "TABLE_HEADER_SESSION_REMOTEHOST" : "接続元", - "TABLE_HEADER_SESSION_STARTDATE" : "開始時間", - "TABLE_HEADER_SESSION_USERNAME" : "ユーザ名", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "接続の追加", - "ACTION_NEW_CONNECTION_GROUP" : "グループの追加", - "ACTION_NEW_SHARING_PROFILE" : "共有プロファイルの追加", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "接続をクリックまたはタップすることで、管理画面が表示されます。権限に応じて接続のプロパティが変更できます。", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "接続" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "表示言語:", - "FIELD_HEADER_PASSWORD" : "パスワード:", - "FIELD_HEADER_PASSWORD_OLD" : "現在のパスワード:", - "FIELD_HEADER_PASSWORD_NEW" : "新しいパスワード:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "新しいパスワード(確認):", - "FIELD_HEADER_TIMEZONE" : "タイムゾーン:", - "FIELD_HEADER_USERNAME" : "ユーザ名:", - - "HELP_DEFAULT_INPUT_METHOD" : "デフォルトの入力メソッドは、Guacamoleがどのようにキーボード入力を受け取るかを設定します。この設定の変更は、モバイルデバイスまたはIMEを通して入力を行う際に必要です。", - "HELP_DEFAULT_MOUSE_MODE" : "デフォルトのマウスエミュレーションモードは、タッチに関して新しい接続でリモートマウスがどのように動作するかを決定します。この設定は、Guacamoleメニュー内で接続ごとに上書きすることができます。", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Guacamoleの言語を変更するには、下の言語を選択してください。選択可能な言語は、インストールされている言語によって異なります。", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "パスワードを変更する場合は、下に現在のパスワードと新しいパスワードを入力して、[パスワードの更新]をクリックしてください。変更はすぐに有効になります。", - - "INFO_PASSWORD_CHANGED" : "パスワードが変更されました。", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "デフォルトの入力方法", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "デフォルトのマウスエミュレーションモード", - "SECTION_HEADER_UPDATE_PASSWORD" : "パスワード変更" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "ユーザ追加", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "ユーザをクリックまたはタップすることで、ユーザを管理できます。権限に応じてユーザ情報の変更を行うことができます。", - - "SECTION_HEADER_USERS" : "ユーザ", - - "TABLE_HEADER_FULL_NAME" : "フルネーム", - "TABLE_HEADER_LAST_ACTIVE" : "最後にアクティブになった時期", - "TABLE_HEADER_ORGANIZATION" : "組織", - "TABLE_HEADER_USERNAME" : "ユーザ名" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "グループ追加", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "グループをクリックまたはタップすることで、グループを管理できます。権限に応じてグループ情報の変更を行うことができます。", - - "SECTION_HEADER_USER_GROUPS" : "グループ", - - "TABLE_HEADER_USER_GROUP_NAME" : "グループ名" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "強制切断", - - "DIALOG_HEADER_CONFIRM_DELETE" : "セッションの強制切断", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Guacamoleのアクティブなセッションが全て表示されています。 もしセッションを強制切断したい場合、 チェックボックスにチェックを入れて、強制切断ボタンをクリックしてください。", - - "INFO_NO_SESSIONS" : "アクティブセッションはありません", - - "SECTION_HEADER_SESSIONS" : "アクティブセッション", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "接続名", - "TABLE_HEADER_SESSION_REMOTEHOST" : "接続元", - "TABLE_HEADER_SESSION_USERNAME" : "ユーザ名", - - "TEXT_CONFIRM_DELETE" : "選択したすべてのセッションを強制終了しますか?これらのセッションを使用しているユーザーは直ちに切断されます。" - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "メールアドレス:", - "FIELD_HEADER_GUAC_FULL_NAME" : "名前:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "組織:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "役職/役割:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/ko.json b/guacamole/src/main/frontend/src/translations/ko.json deleted file mode 100644 index e5c4da5353..0000000000 --- a/guacamole/src/main/frontend/src/translations/ko.json +++ /dev/null @@ -1,997 +0,0 @@ -{ - - "NAME" : "한국어", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "확인", - "ACTION_CANCEL" : "취소", - "ACTION_CLONE" : "복제", - "ACTION_CONTINUE" : "계속", - "ACTION_DELETE" : "삭제", - "ACTION_DELETE_SESSIONS" : "세션 종료", - "ACTION_DOWNLOAD" : "다운로드", - "ACTION_LOGIN" : "로그인", - "ACTION_LOGOUT" : "로그아웃", - "ACTION_MANAGE_CONNECTIONS" : "연결", - "ACTION_MANAGE_PREFERENCES" : "기본 설정", - "ACTION_MANAGE_SETTINGS" : "세팅", - "ACTION_MANAGE_SESSIONS" : "활성화된 세션", - "ACTION_MANAGE_USERS" : "사용자", - "ACTION_MANAGE_USER_GROUPS" : "그룹", - "ACTION_NAVIGATE_BACK" : "뒤로가기", - "ACTION_NAVIGATE_HOME" : "홈", - "ACTION_SAVE" : "저장", - "ACTION_SEARCH" : "검색", - "ACTION_SHARE" : "공유", - "ACTION_UPDATE_PASSWORD" : "패스워드 업데이트", - "ACTION_VIEW_HISTORY" : "히스토리", - - "DIALOG_HEADER_ERROR" : "에러", - - "ERROR_PAGE_UNAVAILABLE" : "에러가 발생해 동작이 완료될 수 없습니다. 문제가 계속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - "ERROR_PASSWORD_BLANK" : "패스워드는 공백이 될 수 없습니다.", - "ERROR_PASSWORD_MISMATCH" : "패스워드가 일치하지 않습니다.", - - "FIELD_HEADER_PASSWORD" : "패스워드:", - "FIELD_HEADER_PASSWORD_AGAIN" : "패스워드 재입력:", - - "FIELD_PLACEHOLDER_FILTER" : "필터", - - "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "현재 {USERS} 사용자에 의해 사용중입니다.}.", - - "TEXT_ANONYMOUS_USER" : "익명", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{초} minute{분} hour{시} day{일} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "지우기", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "연결 해제", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "다시 연결", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_UPLOAD_FILES" : "파일 업로드", - - "DIALOG_HEADER_CONNECTING" : "연결 중", - "DIALOG_HEADER_CONNECTION_ERROR" : "연결 오류", - "DIALOG_HEADER_DISCONNECTED" : "연결 끊김", - - "ERROR_CLIENT_201" : "서버 사용량이 많아 연결이 종료되었습니다. 몇 분 후에 다시 시도하십시요.", - "ERROR_CLIENT_202" : "원격 데스크톱이 응답하는데 너무 오래걸려서 Guacamole 서버가 연결을 닫았습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", - "ERROR_CLIENT_203" : "원격 데스크톱 서버에 오류가 발생해서 연결을 닫았습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", - "ERROR_CLIENT_207" : "원격 데스크톱 서버에 현재 연결할 수 없습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - "ERROR_CLIENT_208" : "원격 데스크톱 서버를 현재 사용 할 수 없습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - "ERROR_CLIENT_209" : "다른 연결과 충돌해서 원격 데스크톱 서버가 연결을 닫았습니다. 나중에 다시 시도하십시오.", - "ERROR_CLIENT_20A" : "원격 데스크톱이 비활성화 상태로 보이기 때문에 서버 연결을 닫았습니다. 원치 않거나 예기치 않은 경우, 시스템 관리자에게 문의하거나 시스템 세팅을 확인하십시오.", - "ERROR_CLIENT_20B" : "원격 데스크톱 서버가 강제로 연결을 끊었습니다. 원치 않거나 예기치 않은 경우, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - "ERROR_CLIENT_301" : "로그인이 실패했습니다. 다시 연결한 다음 다시 시도하십시오", - "ERROR_CLIENT_303" : "원격 데스크톱 서버가 이 연결에 대한 액세스를 거부했습니다. 액세스 권한이 필요하면, 시스템 관리자에게 계정 액세스 권한을 부여하도록 요청하거나 시스템 설정을 확인하십시오.", - "ERROR_CLIENT_308" : "브라우저에서 연결이 끊긴 것처럼 보일 정도로 오랫동안 응답이 없었기 때문에 Guacamole 서버가 연결을 닫았습니다. 이는 보통 불안정한 무선 신호나 단지 네트워크의 느린 속도같은 네트워크 문제로 일어납니다. 네트워크 상태를 확인 후에 다시 시도 하십시오.", - "ERROR_CLIENT_31D" : "개별 사용자의 동시 연결 사용 제한을 초과했기 때문에 Guacamole 서버가 이 연결에 대한 액세스를 거부했습니다. 하나 이상의 연결을 닫고 다시 시도 하십시오.", - "ERROR_CLIENT_DEFAULT" : "Guacamole 서버 내에서 내부 오류가 발생해서 연결이 종료되었습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - - "ERROR_TUNNEL_201" : "활성 연결이 너무 많기 때문에 Guacamole 서버에서 이 연결 시도를 거부했습니다. 잠시 후에 다시 시도하십시오", - "ERROR_TUNNEL_202" : "서버 응답시간이 너무 길어 연결을 닫았습니다. 이것은 보통 불안정한 무선 신호나, 네트워크의 느린 속도같은 네트워크의 문제입니다. 네트워크 연결을 확인해 주시거나 시스템 관리자에게 문의하십시오.", - "ERROR_TUNNEL_203" : "서버에 오류가 발생해서 연결을 닫았습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", - "ERROR_TUNNEL_204" : "요청한 연결이 존재하지 않습니다. 연결 이름을 확인하고 다시 시도하십시오", - "ERROR_TUNNEL_205" : "이 연결은 현재 사용 중이며 이 연결에 대한 동시 액세스가 허용되지 않습니다. 나중에 다시 시도하십시오.", - "ERROR_TUNNEL_207" : "Guacamole 서버에 현재 접근할 수 없습니다. 네트워크 상태를 확인 후에 다시 시도하십시오.", - "ERROR_TUNNEL_208" : "Guacamole 서버가 연결을 허용하지 않습니다. 네트워크 상태를 확인 후에 다시 시도하십시오.", - "ERROR_TUNNEL_301" : "로그인하지 않았기 때문에, 이 연결에 접근할 수 있는 권한이 없습니다. 로그인 후에 다시 시도하십시오.", - "ERROR_TUNNEL_303" : "이 연결에 접근할 수 있는 권한이 없습니다. 접근 권한이 필요하다면, 허가 사용자 목록에 당신을 추가하도록 시스템 관리자에게 요청하거나 시스템 설정을 확인하십시오.", - "ERROR_TUNNEL_308" : "브라우저에서 연결이 끊긴 것처럼 보일 정도로 오랫동안 응답이 없었기 때문에 Guacamole server가 연결을 닫았습니다. 이는 보통 불안정한 무선 신호나 단지 네트워크의 느린 속도같은 네트워크 문제로 일어납니다. 네트워크 상태를 확인 후에 다시 시도 하십시오", - "ERROR_TUNNEL_31D" : "개별 사용자의 동시 연결 사용 제한을 초과했기 때문에 Guacamole server가 이 연결에 대한 액세스를 거부하고 있습니다. 하나 이상의 연결을 닫고 다시 시도하십시오.", - "ERROR_TUNNEL_DEFAULT" : "Guacamole 서버 내에서 내부 오류가 발생해서 연결이 종료되었습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "ERROR_UPLOAD_100" : "파일 전송이 지원되지 않거나 활성화되지 않았습니다. 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - "ERROR_UPLOAD_201" : "현재 너무 많은 파일이 전송되고 있습니다. 기존 전송이 완료될 때까지 기다린 후 다시 시도하십시오.", - "ERROR_UPLOAD_202" : "원격 데스크톱 서버가 응답하는 데 너무 오래 걸리기 때문에 파일을 전송할 수 없습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", - "ERROR_UPLOAD_203" : "전송하는 동안 원격 데스크톱 서버에 오류가 발생했습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", - "ERROR_UPLOAD_204" : "파일 전송 대상이 없습니다. 대상이 있는지 확인하고 다시 시도하십시오.", - "ERROR_UPLOAD_205" : "파일 전송 대상이 현재 잠겨 있습니다. 진행 중인 작업이 완료될 때까지 기다린 후 다시 시도하십시오.", - "ERROR_UPLOAD_301" : "로그인하지 않았기 때문에 이 파일을 업로드할 권한이 없습니다. 로그인 한 후 다시 시도하십시오.", - "ERROR_UPLOAD_303" : "이 파일을 업로드 할 권한이 없습니다. 액세스가 필요한 경우 시스템 설정을 확인하거나 시스템 관리자에게 확인하십시오.", - "ERROR_UPLOAD_308" : "파일 전송이 중단되었습니다. 이는 일반적으로 무선 신호가 불안정하거나 네트워크 속도가 매우 느린 것과 같은 네트워크 문제로 인해 발생합니다. 네트워크를 확인하고 다시 시도하십시오.", - "ERROR_UPLOAD_31D" : "현재 너무 많은 파일이 전송되고 있습니다. 기존 전송이 완료될 때까지 기다린 후 다시 시도하십시오.", - "ERROR_UPLOAD_DEFAULT" : "Guacamole 서버 내에서 내부 오류가 발생해서 연결이 종료되었습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", - - - "HELP_CLIPBOARD" : "Guacamole에서 복사하거나 잘라낸 텍스트가 여기에 표시됩니다. 텍스트 변경 사항은 원격 클립보드에 직접 적용됩니다.", - "HELP_INPUT_METHOD_NONE" : "사용중인 입력 방법이 없습니다. 키보드 입력은 연결된 물리적 키보드에서 받아들여집니다.", - "HELP_INPUT_METHOD_OSK" : "내장된 Guacamole 화상 키보드의 입력을 표시하고 허용합니다. 화상 키보드는 다른 방법으로는 불가능할 수 있는 키 조합을 입력할 수 있습니다. (Ctrl-Alt-Del 등)", - "HELP_INPUT_METHOD_TEXT" : "텍스트 입력을 허용하고, 입력된 텍스트를 바탕으로 키보드 이벤트를 에뮬레이트 합니다. 이것은 물리적 키보드가 없는 휴대폰과 같은 장치에 필요합니다.", - "HELP_MOUSE_MODE" : "터치와 관련하여 원격 마우스가 어떻게 동작하는지 결정합니다.", - "HELP_MOUSE_MODE_ABSOLUTE" : "탭하여 클릭합니다. 클릭은 터치 위치에서 발생합니다.", - "HELP_MOUSE_MODE_RELATIVE" : "드래그하여 마우스 포인터를 움직이고 탭하여 클릭합니다. 클릭은 마우스 포인터 위치에서 발생합니다.", - "HELP_SHARE_LINK" : "현재 연결이 공유되고 있으며, 다음 링크를 가진 사람이라면 누구나 접근할 수 있습니다:", - "INFO_CONNECTION_SHARED" : "이 연결은 이제 공유됩니다.", - "INFO_NO_FILE_TRANSFERS" : "파일 전송이 없습니다.", - - "NAME_INPUT_METHOD_NONE" : "없음", - "NAME_INPUT_METHOD_OSK" : "화상 키보드", - "NAME_INPUT_METHOD_TEXT" : "텍스트 입력", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "터치 스크린", - "NAME_MOUSE_MODE_RELATIVE" : "터치 패드", - - "SECTION_HEADER_CLIPBOARD" : "클립보드", - "SECTION_HEADER_DEVICES" : "장치", - "SECTION_HEADER_DISPLAY" : "디스플레이", - "SECTION_HEADER_FILE_TRANSFERS" : "파일 전송", - "SECTION_HEADER_INPUT_METHOD" : "입력 방법", - "SECTION_HEADER_MOUSE_MODE" : "마우스 에뮬레이션 모드", - - "TEXT_ZOOM_AUTO_FIT" : "브라우저 창에 자동으로 맞춤", - "TEXT_CLIENT_STATUS_IDLE" : "유휴 상태.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Guacamole에 연결 중...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "연결이 끊어졌습니다.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "Guacamole 서버에 대한 네트워크 연결이 불안정합니다.", - "TEXT_CLIENT_STATUS_WAITING" : "Guacamole에 연결됐습니다. 응답을 기다리는 중...", - "TEXT_RECONNECT_COUNTDOWN" : "다시 연결하는 중 {REMAINING}초...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}" - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "숨기기", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "표시", - - "FIELD_HEADER_BACKGROUND" : "배경색", - "FIELD_HEADER_FOREGROUND" : "전경색", - - "FIELD_OPTION_CUSTOM" : "사용자 지정...", - - "SECTION_HEADER_DETAILS" : "세부 정보:" - - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "기본 (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "클릭하여 패스워드 표시", - "HELP_HIDE_PASSWORD" : "클릭하여 패스워드 숨기기" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "최근 연결이 없습니다.", - - "PASSWORD_CHANGED" : "패스워드가 변경되었습니다.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "모든 연결", - "SECTION_HEADER_RECENT_CONNECTIONS" : "최근 연결" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "익명" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "잘못된 로그인", - - "FIELD_HEADER_USERNAME" : "사용자 이름", - "FIELD_HEADER_PASSWORD" : "패스워드" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "연결 삭제", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "위치:", - "FIELD_HEADER_NAME" : "이름:", - "FIELD_HEADER_PROTOCOL" : "프로토콜:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "현재 활성화", - "INFO_CONNECTION_NOT_USED" : "이 연결은 아직 사용되지 않았습니다.", - - "SECTION_HEADER_EDIT_CONNECTION" : "연결 편집", - "SECTION_HEADER_HISTORY" : "사용 기록", - "SECTION_HEADER_PARAMETERS" : "매개변수", - "TABLE_HEADER_HISTORY_USERNAME" : "사용자 이름", - "TABLE_HEADER_HISTORY_START" : "시작 시간", - "TABLE_HEADER_HISTORY_DURATION" : "기간", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "원격 호스트", - - "TEXT_CONFIRM_DELETE" : "연결을 삭제한 후에는 복원할 수 없습니다. 이 연결을 삭제하겠습니까?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "연결 그룹 삭제", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "위치:", - "FIELD_HEADER_NAME" : "이름:", - "FIELD_HEADER_TYPE" : "타입:", - - "NAME_TYPE_BALANCING" : "부하 분산", - "NAME_TYPE_ORGANIZATIONAL" : "조직", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "연결 그룹 편집", - - "TEXT_CONFIRM_DELETE" : "연결 그룹을 삭제한 후에는 복원할 수 없습니다. 이 연결 그룹을 삭제하겠습니까?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "공유 프로필 삭제", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "이름:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "기본 연결:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "공유 프로필 편집", - "SECTION_HEADER_PARAMETERS" : "매개 변수", - - "TEXT_CONFIRM_DELETE" : "공유 프로필을 삭제한 후에는 복원할 수 없습니다. 이 공유 프로필을 삭제하겠습니까?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "사용자 삭제", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "관리자 시스템", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "자신의 패스워드 변경:", - "FIELD_HEADER_CREATE_NEW_USERS" : "새로운 사용자 생성:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "새로운 사용자 그룹 생성:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "새로운 연결 생성", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "새로운 연결 그룹 생성:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "새로운 공유 프로파일 생성", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "로그인 비활성화:", - "FIELD_HEADER_USERNAME" : "사용자 이름:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "이 사용자는 현재 어떤 그룹에도 속하지 않습니다. 그룹을 추가하려면이 섹션을 확장하십시오.", - - "INFO_READ_ONLY" : "죄송합니다.이 사용자 계정은 수정할 수 없습니다.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "사용 가능한 그룹이 없습니다.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "모든 연결", - "SECTION_HEADER_CONNECTIONS" : "연결", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "현재 연결", - "SECTION_HEADER_EDIT_USER" : "사용자 편집", - "SECTION_HEADER_PERMISSIONS" : "권한", - "SECTION_HEADER_USER_GROUPS" : "그룹", - - "TEXT_CONFIRM_DELETE" : "사용자를 삭제한 후에는 복원 할 수 없습니다. 이 사용자를 삭제 하시겠습니까?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "그룹 삭제", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_USER_GROUP_DISABLED" : "비활성화:", - "FIELD_HEADER_USER_GROUP_NAME" : "그룹 이름:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "이 그룹은 현재 어떤 그룹에도 소속되지 않았습니다. 이 섹션을 확장하여 그룹을 추가하십시오.", - "HELP_NO_MEMBER_USER_GROUPS" : "이 그룹은 현재 어떤 그룹도 포함하고 있지 않습니다. 이 섹션을 확장하여 그룹을 추가하십시오.", - "HELP_NO_MEMBER_USERS" : "이 그룹은 어떤 사용자도 포함 하고 있지 않습니다. 이 섹션을 확장하여 사용자를 추가하십시오. ", - - "INFO_READ_ONLY" : "이 그룹은 편집할 수 없습니다.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "사용가능한 사용자가 없습니다.", - - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "그룹 편집", - "SECTION_HEADER_MEMBER_USERS" : "맴버 사용자", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "맴버 그룹", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "상위 그룹", - - "TEXT_CONFIRM_DELETE" : "그룹을 삭제한 후에는 복원 할 수 없습니다. 이 그룹을 삭제 하시겠습니까?" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Backspace 키 전송:", - "FIELD_HEADER_CA_CERT" : "인증 기관 인증서:", - "FIELD_HEADER_CLIENT_CERT" : "클라이언트 인증서:", - "FIELD_HEADER_CLIENT_KEY" : "클라이언트 키:", - "FIELD_HEADER_COLOR_SCHEME" : "색상 구성표:", - "FIELD_HEADER_CONTAINER" : "컨테이너 이름 :", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "자동으로 레코드 경로 생성 :", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "자동으로 typescript 경로 생성 :", - "FIELD_HEADER_DISABLE_COPY" : "터미널에서 복사 비활성화:", - "FIELD_HEADER_DISABLE_PASTE" : "클라이언트에서 붙여넣기 비활성화:", - "FIELD_HEADER_EXEC_COMMAND" : "명령어 (exec):", - "FIELD_HEADER_FONT_NAME" : "글꼴 이름 :", - "FIELD_HEADER_FONT_SIZE" : "글꼴 크기 :", - "FIELD_HEADER_HOSTNAME" : "호스트 이름 :", - "FIELD_HEADER_IGNORE_CERT" : "서버 인증서 무시 :", - "FIELD_HEADER_NAMESPACE" : "네임 스페이스 :", - "FIELD_HEADER_POD" : "파드 (Pod) 이름:", - "FIELD_HEADER_PORT" : "포트:", - "FIELD_HEADER_READ_ONLY" : "읽기 전용:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", - "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", - "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", - "FIELD_HEADER_SCROLLBACK" : "스크롤 백 (scrollback) 최대 크기:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 이름:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 경로:", - "FIELD_HEADER_USE_SSL" : "SSL/TLS 사용", - - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "흰색 바탕에 검정색", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "검은색 바탕에 회색", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "검은색 바탕에 녹색", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "검은색 바탕에 흰색", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - - "NAME" : "Kubernetes", - "SECTION_HEADER_AUTHENTICATION" : "인증", - "SECTION_HEADER_BEHAVIOR" : "터미널 동작", - "SECTION_HEADER_CLIPBOARD" : "클립보드", - "SECTION_HEADER_CONTAINER" : "컨테이너", - "SECTION_HEADER_DISPLAY" : "디스플레이", - "SECTION_HEADER_RECORDING" : "스크린 레코드", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (텍스트 세션 레코드)", - "SECTION_HEADER_NETWORK" : "네트워크" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "클라이언트 이름:", - "FIELD_HEADER_COLOR_DEPTH" : "색심도:", - "FIELD_HEADER_CONSOLE" : "관리자 콘솔:", - "FIELD_HEADER_CONSOLE_AUDIO" : "콘솔 내 오디오 지원:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "드라이브 자동 생성:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", - "FIELD_HEADER_DISABLE_AUDIO" : "오디오 비활성화:", - "FIELD_HEADER_DISABLE_AUTH" : "인증 비활성화:", - "FIELD_HEADER_DISABLE_COPY" : "원격 데스크톱으로 부터의 복사 비활성화:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", - "FIELD_HEADER_DISABLE_PASTE" : "클라이언트로 부터의 붙여넣기 비활성화:", - "FIELD_HEADER_DISABLE_UPLOAD" : "파일 업로드 비활성화:", - "FIELD_HEADER_DOMAIN" : "도메인:", - "FIELD_HEADER_DPI" : "해상도 (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "드라이브 이름:", - "FIELD_HEADER_DRIVE_PATH" : "드라이브 주소:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "오디오 입력 활성화 (마이크):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "바탕화면 구성 활성화 (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "드라이브 활성화:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "글꼴 다듬기 활성화 (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "전체 창 끌기 활성화:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "메뉴 에니메이션 활성화:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "비트맵 캐싱 비활성화:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "화면 밖 캐싱 비활성화:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "문자 모양 캐싱 비활성화:", - "FIELD_HEADER_ENABLE_PRINTING" : "프린팅 활성화:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTP 활성화:", - "FIELD_HEADER_ENABLE_THEMING" : "테마 활성화:", - "FIELD_HEADER_ENABLE_TOUCH" : "멀티 터치 활성화:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "바탕화면 활성화:", - "FIELD_HEADER_FORCE_LOSSLESS" : "무손실 압축 강제:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "도메인:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "호스트 이름:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "패스워드:", - "FIELD_HEADER_GATEWAY_PORT" : "포트:", - "FIELD_HEADER_GATEWAY_USERNAME" : "사용자 이름:", - "FIELD_HEADER_HEIGHT" : "높이:", - "FIELD_HEADER_HOSTNAME" : "호스트 이름:", - "FIELD_HEADER_IGNORE_CERT" : "서버 인증서 무시:", - "FIELD_HEADER_INITIAL_PROGRAM" : "시작 프로그램:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "부하분산 정보/쿠키:", - "FIELD_HEADER_PASSWORD" : "패스워드:", - "FIELD_HEADER_PORT" : "포트:", - "FIELD_HEADER_PRINTER_NAME" : "리디렉션 프린터 문서:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDP 소스 ID:", - "FIELD_HEADER_READ_ONLY" : "읽기 전용:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", - "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", - "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", - "FIELD_HEADER_RESIZE_METHOD" : "Resize 메서드:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "매개 변수:", - "FIELD_HEADER_REMOTE_APP_DIR" : "작업 디렉터리:", - "FIELD_HEADER_REMOTE_APP" : "프로그램:", - "FIELD_HEADER_SECURITY" : "안전 모드:", - "FIELD_HEADER_SERVER_LAYOUT" : "자판 배열:", - "FIELD_HEADER_SFTP_DIRECTORY" : "기본 업로드 디렉토리:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", - "FIELD_HEADER_SFTP_HOST_KEY" : "호스트 공개 키 (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "호스트 이름:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive 간격:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "암호 (Passphrase):", - "FIELD_HEADER_SFTP_PASSWORD" : "암호 (Password):", - "FIELD_HEADER_SFTP_PORT" : "포트:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "개인 키:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "루트 디렉토리 파일 브라우저:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "파일 업로드 비활성화:", - "FIELD_HEADER_SFTP_USERNAME" : "사용자 이름:", - "FIELD_HEADER_STATIC_CHANNELS" : "스태틱 채널 이름:", - "FIELD_HEADER_TIMEZONE" : "시간대:", - "FIELD_HEADER_USERNAME" : "사용자 이름:", - "FIELD_HEADER_WIDTH" : "너비:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷의 브로드케스트 주소:", - "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 어드레스", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", - "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", - - - "FIELD_OPTION_COLOR_DEPTH_16" : "로우 컬러 (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "트루 컬러 (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "트루 컬러 (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"디스플레이 업데이트\" 가상 채널 (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "다시 연결", - - "FIELD_OPTION_SECURITY_ANY" : "Any", - "FIELD_OPTION_SECURITY_NLA" : "NLA (네트워크 수준 인증)", - "FIELD_OPTION_SECURITY_RDP" : "RDP 암호화", - "FIELD_OPTION_SECURITY_TLS" : "TLS 암호화", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Czech (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Swiss German (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK English (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Swiss French (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanese (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguese Brazilian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguese (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turkish-Q (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "인증", - "SECTION_HEADER_BASIC_PARAMETERS" : "기본 설정", - "SECTION_HEADER_CLIPBOARD" : "클립보드", - "SECTION_HEADER_DEVICE_REDIRECTION" : "디바이스 리디렉션", - "SECTION_HEADER_DISPLAY" : "디스플레이", - "SECTION_HEADER_GATEWAY" : "원격 데스크톱 게이트웨이", - "SECTION_HEADER_LOAD_BALANCING" : "부하 분산 (Load Balancing)", - "SECTION_HEADER_NETWORK" : "네트워크", - "SECTION_HEADER_PERFORMANCE" : "성능", - "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "스크린 레코드", - "SECTION_HEADER_REMOTEAPP" : "리모트 앱", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : " 키가 보내는 문자:", - "FIELD_HEADER_COLOR_SCHEME" : "색상 구성표:", - "FIELD_HEADER_COMMAND" : "명령 실행:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Typescript 경로 자동 생성:", - "FIELD_HEADER_DISABLE_COPY" : "터미널에서 복사 비활성화:", - "FIELD_HEADER_DISABLE_PASTE" : "클라이언트에서 붙여넣기 비활성화:", - "FIELD_HEADER_FONT_NAME" : "글꼴 이름:", - "FIELD_HEADER_FONT_SIZE" : "글꼴 크기:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTP 활성화:", - "FIELD_HEADER_HOST_KEY" : "공개 호스트 키 (Base64):", - "FIELD_HEADER_HOSTNAME" : "호스트 이름:", - "FIELD_HEADER_LOCALE" : "언어/지역 ($LANG):", - "FIELD_HEADER_USERNAME" : "사용자 이름:", - "FIELD_HEADER_PASSWORD" : "암호 (Password):", - "FIELD_HEADER_PASSPHRASE" : "암호 (Passphrase):", - "FIELD_HEADER_PORT" : "포트:", - "FIELD_HEADER_PRIVATE_KEY" : "개인 키 (Private Key):", - "FIELD_HEADER_SCROLLBACK" : "최대 스크롤 백 사이즈:", - "FIELD_HEADER_READ_ONLY" : "읽기 전용:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", - "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", - "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "서버 keepalive 간격:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "루트 디렉토리 파일 브라우저:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "파일 업로드 비활성화:", - "FIELD_HEADER_TERMINAL_TYPE" : "터미널 타입:", - "FIELD_HEADER_TIMEZONE" : "시간대 ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 이름:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 경로:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷의 브로드케스트 주소:", - "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 어드레스:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", - "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", - - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "흰색 바탕에 검정색", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "검은색 바탕에 회색", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "검은색 바탕에 녹색", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "검은색 바탕에 흰색", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "인증", - "SECTION_HEADER_BEHAVIOR" : "터미널 동작", - "SECTION_HEADER_CLIPBOARD" : "클립보드", - "SECTION_HEADER_DISPLAY" : "디스플레이", - "SECTION_HEADER_NETWORK" : "네트워크", - "SECTION_HEADER_RECORDING" : "스크린 레코드", - "SECTION_HEADER_SESSION" : "세션 / 환경", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (텍스트 세션 레코드)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - "FIELD_HEADER_BACKSPACE" : "Backspace 키 전송:", - "FIELD_HEADER_COLOR_SCHEME" : "색상 구성표:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Typescript 경로 자동 생성:", - "FIELD_HEADER_DISABLE_COPY" : "터미널에서 복사 비활성화:", - "FIELD_HEADER_DISABLE_PASTE" : "클라이언트에서 붙여넣기 비활성화:", - "FIELD_HEADER_FONT_NAME" : "글꼴 이름:", - "FIELD_HEADER_FONT_SIZE" : "글꼴 크기:", - "FIELD_HEADER_HOSTNAME" : "호스트 이름:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "로그인 실패 정규식:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "로그인 성공 정규식:", - "FIELD_HEADER_USERNAME" : "사용자 이름:", - "FIELD_HEADER_USERNAME_REGEX" : "사용자 이름 정규식:", - "FIELD_HEADER_PASSWORD" : "패스워드:", - "FIELD_HEADER_PASSWORD_REGEX" : "패스워드 정규식:", - "FIELD_HEADER_PORT" : "포트:", - "FIELD_HEADER_READ_ONLY" : "읽기 전용:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", - "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", - "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", - "FIELD_HEADER_SCROLLBACK" : "스크롤 백 (scrollback) 최대 크기:", - "FIELD_HEADER_TERMINAL_TYPE" : "터미널 타입:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 이름:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 경로:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷의 브로드캐스트 주소:", - "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 주소:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", - "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", - - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "흰색 바탕에 검정색", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "검은색 바탕에 회색", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "검은색 바탕에 녹색", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "검은색 바탕에 흰색", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "인증", - "SECTION_HEADER_BEHAVIOR" : "터미널 동작", - "SECTION_HEADER_CLIPBOARD" : "클립보드", - "SECTION_HEADER_DISPLAY" : "디스플레이", - "SECTION_HEADER_RECORDING" : "스크린 레코드", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (텍스트 세션 레코드)", - "SECTION_HEADER_NETWORK" : "네트워크", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - "FIELD_HEADER_AUDIO_SERVERNAME" : "오디오 서버 이름:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "인코딩:", - "FIELD_HEADER_COLOR_DEPTH" : "색심도:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", - "FIELD_HEADER_CURSOR" : "커서:", - "FIELD_HEADER_DEST_HOST" : "대상 호스트:", - "FIELD_HEADER_DEST_PORT" : "대상 포트:", - "FIELD_HEADER_DISABLE_COPY" : "데스크톱에서 복사 비활성화:", - "FIELD_HEADER_DISABLE_PASTE" : "클라이언트에서 붙여넣기 비활성화:", - "FIELD_HEADER_ENABLE_AUDIO" : "오디오 활성화:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTP 활성화:", - "FIELD_HEADER_FORCE_LOSSLESS" : "무손실 압축 강제:", - "FIELD_HEADER_HOSTNAME" : "호스트 이름:", - "FIELD_HEADER_USERNAME" : "사용자 이름:", - "FIELD_HEADER_PASSWORD" : "패스워드:", - "FIELD_HEADER_PORT" : "포트:", - "FIELD_HEADER_READ_ONLY" : "읽기 전용:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", - "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", - "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", - "FIELD_HEADER_SFTP_DIRECTORY" : "기본 업로드 디렉터리:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", - "FIELD_HEADER_SFTP_HOST_KEY" : "공개 호스트 키 (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "호스트 이름:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP 유지 간격:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "암호 (Passphrase):", - "FIELD_HEADER_SFTP_PASSWORD" : "암호 (Password):", - "FIELD_HEADER_SFTP_PORT" : "포트:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "개인 키:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "파일 브라우저 루트 디렉터리:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "파일 업로드 비활성화:", - "FIELD_HEADER_SFTP_USERNAME" : "사용자 이름:", - "FIELD_HEADER_SWAP_RED_BLUE" : "red/blue 컴포넌트 스왑:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷 브로드캐스트 주소:", - "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 주소:", - "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", - "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_16" : "로우 컬러 (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "트루 컬러 (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "트루 컬러 (32-bit)", - - "FIELD_OPTION_CURSOR_LOCAL" : "로컬", - "FIELD_OPTION_CURSOR_REMOTE" : "원격", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "오디오", - "SECTION_HEADER_AUTHENTICATION" : "인증", - "SECTION_HEADER_CLIPBOARD" : "클립보드", - "SECTION_HEADER_DISPLAY" : "디스플레이", - "SECTION_HEADER_NETWORK" : "네트워크", - "SECTION_HEADER_RECORDING" : "스크린 레코드", - "SECTION_HEADER_REPEATER" : "VNC 리피터", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "설정" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "과거 연결 기록은 여기에 나열되며 열 헤더 (column header)를 클릭하여 정렬할 수 있습니다. 특정 기록을 검색하려면, 필터 문자열을 입력하고 \"검색\"을 클릭하십시오. 제공된 필터 문자열과 일치하는 기록만 나열됩니다.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "일치하는 기록 없음", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "연결 이름", - "TABLE_HEADER_SESSION_DURATION" : "기간", - "TABLE_HEADER_SESSION_REMOTEHOST" : "원격 호스트", - "TABLE_HEADER_SESSION_STARTDATE" : "시작 시간", - "TABLE_HEADER_SESSION_USERNAME" : "사용자 이름", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "새 연결", - "ACTION_NEW_CONNECTION_GROUP" : "새 그룹", - "ACTION_NEW_SHARING_PROFILE" : "새 공유 프로필", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "아래 연결을 클릭하거나 탭하여 해당 연결을 관리합니다. 엑세스 레벨에 따라 연결을 추가하고 삭제할 수 있으며, 속성 (프로토콜, 호스트 이름, 포트 등)을 변경할 수 있습니다.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "연결" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "표시 언어:", - "FIELD_HEADER_PASSWORD" : "패스워드:", - "FIELD_HEADER_PASSWORD_OLD" : "현재 패스워드:", - "FIELD_HEADER_PASSWORD_NEW" : "새 패스워드:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "새 패스워드 확인:", - "FIELD_HEADER_TIMEZONE" : "시간대:", - "FIELD_HEADER_USERNAME" : "사용자 이름:", - - "HELP_DEFAULT_INPUT_METHOD" : "기본 입력 방법은 키보드 이벤트가 Guacamole에 의해 수신되는 방법을 결정합니다. 모바일 장치를 사용하거나 IME를 통해 입력할 때 이 설정을 변경해야 할 수도 있습니다. 이 세팅은 Guacamole 메뉴 내에서 연결마다 재정의할 수 있습니다.", - "HELP_DEFAULT_MOUSE_MODE" : "기본 마우스 에뮬레이션 방법은 원격 마우스가 터치와 관련해서 새 연결에서 어떻게 작동할지 결정합니다. 이 세팅은 Guacamole 메뉴 내에서 연결마다 재정의할 수 있습니다.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "아래의 옵션은 사용자의 지역과 관련이 있으며 인터페이스의 여러 부분이 표시되는 방법에 영향을 줄 것입니다.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "패스워드를 변경하려면 현재 패스워드와 새 패스워드를 아래에 입력하고, \"패스워드 변경\"을 클릭하십시오. 변경사항은 즉시 적용될 것입니다.", - - "INFO_PASSWORD_CHANGED" : "패스워드가 변경되었습니다.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "기본 입력 방법", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "기본 마우스 에뮬레이션 방법", - "SECTION_HEADER_UPDATE_PASSWORD" : "패스워드 변경" - - }, - - "SETTINGS_USERS" : { - - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "새 사용자", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "아래 사용자를 클릭하거나 탭하여 해당 사용자를 관리합니다. 엑세스 레벨에 따라 사용자를 추가하고 삭제할 수 있으며, 패스워드를 변경할 수 있습니다.", - - "SECTION_HEADER_USERS" : "사용자", - - "TABLE_HEADER_FULL_NAME" : "전체 이름", - "TABLE_HEADER_LAST_ACTIVE" : "마지막 활성", - "TABLE_HEADER_ORGANIZATION" : "조직", - "TABLE_HEADER_USERNAME" : "사용자 이름" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "새 그룹", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "아래 그룹을 클릭하거나 탭하여 해당 그룹을 관리합니다. 엑세스 레벨에 따라 그룹을 추가하고 삭제할 수 있으며, 구성원 사용자들과 그룹을 변경할 수 있습니다.", - - "SECTION_HEADER_USER_GROUPS" : "그룹", - - "TABLE_HEADER_USER_GROUP_NAME" : "그룹 이름" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "세션 종료", - - "DIALOG_HEADER_CONFIRM_DELETE" : "세션 종료", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "이 페이지는 현재 활성화된 연결로 이루어져 있습니다. 세션을 하나 이상 종료하려면, 해당 세션 옆의 체크 박스를 선택하고 \"세션 종료\"를 클릭하십시오. 세션을 종료하면 관련된 사용자의 연결이 즉시 끊어질 것입니다.", - - "INFO_NO_SESSIONS" : "활성 세션 없음", - - "SECTION_HEADER_SESSIONS" : "활성 세션", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "연결 이름", - "TABLE_HEADER_SESSION_REMOTEHOST" : "원격 호스트", - "TABLE_HEADER_SESSION_STARTDATE" : "활성화된 시간", - "TABLE_HEADER_SESSION_USERNAME" : "사용자 이름", - - "TEXT_CONFIRM_DELETE" : "선택한 세션을 모두 종료하시겠습니까? 이 세션을 사용 중인 사용자의 연결이 즉시 끊어질 것입니다." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "이메일 주소:", - "FIELD_HEADER_GUAC_FULL_NAME" : "전체 이름:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "조직:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "역할:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/nl.json b/guacamole/src/main/frontend/src/translations/nl.json deleted file mode 100644 index ef03dc36e2..0000000000 --- a/guacamole/src/main/frontend/src/translations/nl.json +++ /dev/null @@ -1,692 +0,0 @@ -{ - - "NAME" : "Nederlands", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Annuleer", - "ACTION_CLONE" : "Kloon", - "ACTION_CONTINUE" : "Verder", - "ACTION_DELETE" : "Verwijder", - "ACTION_DELETE_SESSIONS" : "Verwijder Sessies", - "ACTION_LOGIN" : "Inloggen", - "ACTION_LOGOUT" : "Uitloggen", - "ACTION_MANAGE_CONNECTIONS" : "Verbindingen", - "ACTION_MANAGE_PREFERENCES" : "Voorkeuren", - "ACTION_MANAGE_SETTINGS" : "Instellingen", - "ACTION_MANAGE_SESSIONS" : "Actieve Sessies", - "ACTION_MANAGE_USERS" : "Gebruikers", - "ACTION_NAVIGATE_BACK" : "Terug", - "ACTION_NAVIGATE_HOME" : "Home", - "ACTION_SAVE" : "Opslaan", - "ACTION_SEARCH" : "Zoeken", - "ACTION_UPDATE_PASSWORD" : "Wijzig Wachtwoord", - "ACTION_VIEW_HISTORY" : "Gebruikgeschiedenis", - - "DIALOG_HEADER_ERROR" : "Fout", - - "ERROR_PASSWORD_BLANK" : "Uw wachtwoord mag niet leeg zijn.", - "ERROR_PASSWORD_MISMATCH" : "De opgegeven wachtwoorden komen niet overeen.", - - "FIELD_HEADER_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Nogmaals uw wachtwoord:", - - "FIELD_PLACEHOLDER_FILTER" : "Filter", - - "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Op dit moment in gebruik door {USERS} {USERS, plural, one{gebruiker} other{gebruikers}}.", - - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{seconde} other{seconden}}} minute{{VALUE, plural, one{minuut} other{minuten}}} hour{{VALUE, plural, one{uur} other{uren}}} day{{VALUE, plural, one{dag} other{dagen}}} other{}}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Wis lijst", - "ACTION_DISCONNECT" : "Verbreek Verbinding", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Verbind Opnieuw", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_UPLOAD_FILES" : "Upload Bestanden", - - "DIALOG_HEADER_CONNECTING" : "Aan Het Verbinden", - "DIALOG_HEADER_CONNECTION_ERROR" : "Verbindingsfout", - "DIALOG_HEADER_DISCONNECTED" : "Niet Verbonden", - - "ERROR_CLIENT_201" : "Deze verbinding is gesloten omdat de server druk is. Wacht een paar minuten en probeer het opnieuw.", - "ERROR_CLIENT_202" : "De Guacamole server heeft de verbinding gesloten omdat het externe bureaublad te lang niet heeft gereageerd. Probeer het altublieft opnieuw of neem contact op met uw systeembeheerder.", - "ERROR_CLIENT_203" : "Er is een fout opgetreden bij de externe bureaublad server en heeft de verbinding gesloten. Probeer het alstublieft opnieuw of neem contact op met uw systeembeheerder.", - "ERROR_CLIENT_205" : "Deze verbinding is beeindigd omdat het conflicteerd met een andere verbinding. Probeer het alstublieft later nog eens.", - "ERROR_CLIENT_301" : "Inloggen is mislukt. Verbind opnieuw en probeer het nog eens.", - "ERROR_CLIENT_303" : "U heeft geen toestemming om deze verbinding tot stand te brengen. Heeft u toegang nodig, vraag dan aan uw systeembeheerder om u toe te voegen aan de lijst van geauthoriseerde gebruikers of controleer uw systeem instellingen.", - "ERROR_CLIENT_308" : "De Guacamole server heeft de sessie gesloten omdat uw browser zo lang niet heeft gereageerd dat het er op leek dat uw verbinding verbroken was. Dit komt in de regel door netwerk problemen zoals een slecht draadloos signaal of een erg langzame netwerk snelheid. Controleer uw netwerk en probeer het opnieuw.", - "ERROR_CLIENT_31D" : "De Guacamole server geeft geen toegang tot deze verbinding omdat u de limiet heeft bereikt van het aantal toegestane gelijktijdige verbindingen door een individuele gebruiker. Sluit u alstublieft een of meer verbindingen en probeer het opnieuw.", - "ERROR_CLIENT_DEFAULT" : "Een interne fout is opgetreden op de Guacamole server en de connectie is beeindigd. Als dit probleem zich voor blijft doen, neem dan contact op met uw systeembeheerder of controleer uw systeem logs.", - - "ERROR_TUNNEL_201" : "De Guacamole server heeft deze verbinding geweigerd omdat er al te veel actieve verbindingen zijn. Wacht u alstublieft een paar minuten en probeer het opnieuw.", - "ERROR_TUNNEL_202" : "De verbinding is gesloten omdat de server niet op tijd reageerd. Dit komt in de regel door netwerk problemen zoals een slecht draadloos signaal of langzame netwerk snelheden. Controleer alstublieft uw netwerk verbinding en probeer het opnieuw of neem contact op met uw systeembeheerde.", - "ERROR_TUNNEL_203" : "Er heeft een fout plaats gevonden op de server en deze heeft de verbinding gesloten. Probeert u het nog eens of neem contact op met uw systeembeheerder.", - "ERROR_TUNNEL_204" : "De gevraagde verbinding bestaat niet. Controleert u altublieft de verbindingsnaam en probeer het nog eens.", - "ERROR_TUNNEL_205" : "Deze verbinding is op dit moment in gebruik en gelijktijdige toegang is niet toegestaan. Probeert u het later nog eens.", - "ERROR_TUNNEL_301" : "U heeft geen toestemming deze verbinding te gebruiken omdat u niet ingelogd bent. Log eerst in en probeer het nog eens.", - "ERROR_TUNNEL_303" : "U heeft geen toestemming deze verbinding te gebruiken. Als u toegang nodig heeft, vraag dan aan de systeembeheerder om u toe te voegen aan de lijst van geauthoriseerde gebruikers of controleer uw systeem instellingen.", - "ERROR_TUNNEL_308" : "De Guacamole server heeft de sessie gesloten omdat uw browser zo lang niet heeft gereageerd dat het er op leek dat uw verbinding verbroken was. Dit komt in de regel door netwerk problemen zoals een slecht draadloos signaal of een erg langzame netwerk snelheid. Controleer uw netwerk en probeer het opnieuw.", - "ERROR_TUNNEL_31D" : "De Guacamole server geeft geen toegang tot deze verbinding omdat u de limiet heeft bereikt van het aantal toegestane gelijktijdige verbindingen door een individuele gebruiker. Sluit u alstublieft een of meer verbindingen en probeer het opnieuw.", - "ERROR_TUNNEL_DEFAULT" : "Een interne fout is opgetreden op de Guacamole server en de connectie is beeindigd. Als dit probleem zich voor blijft doen, neem dan contact op met uw systeembeheerder of controleer uw systeem logs.", - - "ERROR_UPLOAD_100" : "Bestandsoverdracht is ofwel niet ondersteund of niet ingeschakeld. Neem contact op met uw systeembeheerder of kijk in uw systeem logs.", - "ERROR_UPLOAD_201" : "Er worden momenteel te veel bestanden overdragen. Gelieve te wachten tot de bestaande bestandsoverdracht is voltooid, en probeer het opnieuw.", - "ERROR_UPLOAD_202" : "Het bestand kan niet worden overgedragen, omdat de extern bureaublad server te lang niet reageert. Probeer het opnieuw of neem contact op met uw systeembeheerder.", - "ERROR_UPLOAD_203" : "Er is een fout opgetreden op de extern bureaublad server tijdens de overdracht. Probeer het opnieuw of neem contact op met uw systeembeheerder.", - "ERROR_UPLOAD_204" : "De bestemming voor de overdracht van bestanden bestaat niet. Controleer of de bestemming bestaat en probeer het opnieuw.", - "ERROR_UPLOAD_205" : "De bestemming voor de overdracht van bestanden is momenteel vergrendeld. Gelieve te wachten tot alle taken zijn voltooid en probeer het opnieuw.", - "ERROR_UPLOAD_301" : "U heeft geen toestemming om dit bestand te uploaden, omdat u niet ingelogd bent. Gelieve in te loggen en probeer het opnieuw.", - "ERROR_UPLOAD_303" : "U heeft geen toestemming om dit bestand te uploaden. Als u toegang nodig heeft, controleer dan uw systeeminstellingen of neem contact op met uw systeembeheerder.", - "ERROR_UPLOAD_308" : "De bestandsoverdracht is vastgelopen. Dit wordt meestal veroorzaakt door netwerkproblemen, zoals een instabiel draadloos signaal of gewoon een erg trage netwerkverbinding. Controleer uw netwerk en probeer het opnieuw.", - "ERROR_UPLOAD_31D" : "Er worden momenteel te veel bestanden overdragen. Gelieve te wachten tot de bestaande bestandsoverdracht is voltooid, en probeer het opnieuw.", - "ERROR_UPLOAD_DEFAULT" : "Er is een interne fout opgetreden op de Guacamole server, en de verbinding is beëindigd. Als het probleem aanhoudt, neem dan contact op met uw systeembeheerder of kijk in uw systeem logs.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Tekst gekopieerd / geknipt binnen Guacamole zal hier verschijnen. Wijzigingen in onderstaande tekst zal externe klembord beïnvloeden.", - "HELP_INPUT_METHOD_NONE" : "Geen invoer methode gebruiken. Toetsenbord invoer wordt geaccepteerd van een aangesloten, fysiek toetsenbord.", - "HELP_INPUT_METHOD_OSK" : "Weergave en accepteren van invoer via het ingebouwde Guacamole on-screen toetsenbord. Dit toetsenbord op het scherm maakt toetscombinaties mogelijk die anders onmogelijk zijn (zoals Ctrl-Alt-Del).", - "HELP_INPUT_METHOD_TEXT" : "Laat het typen van tekst en het emuleren toetsenbord gebeurtenissen toe gebaseerd op de getypte tekst. Dit is nodig voor apparaten zoals mobiele telefoons die geen fysiek toetsenbord hebben.", - "HELP_MOUSE_MODE" : "Bepaalt hoe de muis met aanraak-klikken omgaat.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Tik om te klikken. De klik vindt plaats op de locatie van de tik.", - "HELP_MOUSE_MODE_RELATIVE" : "Sleep om de aanwijzer te bewegen en tik om te klikken. De klik vindt plaats op de locatie van de aanwijzer.", - - "INFO_NO_FILE_TRANSFERS" : "Geen bestandsoverdrachten.", - - "NAME_INPUT_METHOD_NONE" : "Geen", - "NAME_INPUT_METHOD_OSK" : "Scherm toetsenbord", - "NAME_INPUT_METHOD_TEXT" : "Text invoer", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Aanraakscherm", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIPBOARD" : "Klembord", - "SECTION_HEADER_DEVICES" : "Apparaten", - "SECTION_HEADER_DISPLAY" : "Scherm", - "SECTION_HEADER_FILE_TRANSFERS" : "Bestandsoverdrachten", - "SECTION_HEADER_INPUT_METHOD" : "Invoer methode", - "SECTION_HEADER_MOUSE_MODE" : "Muis emulatie modus", - - "TEXT_ZOOM_AUTO_FIT" : "Automatisch aan browser venster aanpassen", - "TEXT_CLIENT_STATUS_IDLE" : "Inactief.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Verbinden met Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "De verbinding is verbroken.", - "TEXT_CLIENT_STATUS_WAITING" : "Verbonden met Guacamole. Aan het wachten op reactie...", - "TEXT_RECONNECT_COUNTDOWN" : "Opnieuw verbinden over {REMAINING} {REMAINING, plural, one{seconde} other{seconden}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/nl-nl-qwerty.json" - - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Standaard (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Klik om wachtwoord te tonen", - "HELP_HIDE_PASSWORD" : "Klik om wachtwoord te verbergen" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Geen recente verbindingen.", - - "PASSWORD_CHANGED" : "Wachtwoord gewijzigd.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Alle Verbindingen", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Recente Verbindingen" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Ongeldige Login", - - "FIELD_HEADER_USERNAME" : "Gebruikersnaam", - "FIELD_HEADER_PASSWORD" : "Wachtwoord" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Verwijder Verbinding", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Locatie:", - "FIELD_HEADER_NAME" : "Naam:", - "FIELD_HEADER_PROTOCOL" : "Protocol:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Nu Actief", - "INFO_CONNECTION_NOT_USED" : "Deze verbinding is nog niet gebruikt.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Bewerk Verbinding", - "SECTION_HEADER_HISTORY" : "Gebruikgeschiedenis", - "SECTION_HEADER_PARAMETERS" : "Parameters", - - "TABLE_HEADER_HISTORY_USERNAME" : "Gebruikersnaam", - "TABLE_HEADER_HISTORY_START" : "Starttijd", - "TABLE_HEADER_HISTORY_DURATION" : "Tijdsduur", - - "TEXT_CONFIRM_DELETE" : "Verbindingen kunnen niet worden hersteld nadat ze zijn verwijderd. Weet u zeker dat u deze verbinding wilt verwijderen?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Verwijder Verbindingsgroep", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Locatie:", - "FIELD_HEADER_NAME" : "Naam:", - "FIELD_HEADER_TYPE" : "Soort:", - - "NAME_TYPE_BALANCING" : "Verdeling", - "NAME_TYPE_ORGANIZATIONAL" : "Organizatorisch", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Bewerk Verbindingsgroep", - - "TEXT_CONFIRM_DELETE" : "Verbindingsgroepen kunnen niet worden hersteld nadat ze zijn verwijderd. Weet u zeker dat u deze verbindingsgroep wilt verwijderen?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Naam:", - - "SECTION_HEADER_PARAMETERS" : "Parameters" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Verwijder Gebruiker", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Systeem Beheer:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Wijzigen eigen wachtwoord:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Nieuwe gebruikers aanmaken:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Nieuwe verbindingen aanmaken:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Nieuwe verbindingsgroepen aanmaken:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_READ_ONLY" : "Sorry, maar dit gebruikers account kan niet gewijzigd worden", - - "SECTION_HEADER_CONNECTIONS" : "Verbindingen", - "SECTION_HEADER_EDIT_USER" : "Bewerk Gebruiker", - "SECTION_HEADER_PERMISSIONS" : "Rechten", - - "TEXT_CONFIRM_DELETE" : "Gebruikers kunnen niet worden hersteld nadat ze zijn verwijderd. Weet u zeker dat u deze gebruiker wilt verwijderen?" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Client naam:", - "FIELD_HEADER_COLOR_DEPTH" : "Kleurdiepte:", - "FIELD_HEADER_CONSOLE" : "Administrator console:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Support audio in console:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automatisch genereren station:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", - "FIELD_HEADER_DISABLE_AUDIO" : "Uitschakelen geluid:", - "FIELD_HEADER_DISABLE_AUTH" : "Uitschakelen authenticatie:", - "FIELD_HEADER_DOMAIN" : "Domein:", - "FIELD_HEADER_DPI" : "Resolutie (DPI):", - "FIELD_HEADER_DRIVE_PATH" : "Station map:", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Inschakelen bureaublad compositie (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Inschakelen station:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Inschakelen font smoothing (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Inschakelen verslepen compleet venster:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Inschakelen menu animaties:", - "FIELD_HEADER_ENABLE_PRINTING" : "Printen mogelijk maken:", - "FIELD_HEADER_ENABLE_SFTP" : "Inschakelen SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Inschakelen thema's:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Inschakelen achtergrond:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Domein:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Servernaam:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Password:", - "FIELD_HEADER_GATEWAY_PORT" : "Poort:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Gebruikersnaam:", - "FIELD_HEADER_HEIGHT" : "Hoogte:", - "FIELD_HEADER_HOSTNAME" : "Servernaam:", - "FIELD_HEADER_IGNORE_CERT" : "Negeer server certificaat:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Eerste programma:", - "FIELD_HEADER_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_PORT" : "Poort:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Voor te bereiden BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDP bron ID:", - "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", - "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", - "FIELD_HEADER_RECORDING_PATH" : "Opname map:", - "FIELD_HEADER_RESIZE_METHOD" : "Schaal methode:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameters:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Werk map:", - "FIELD_HEADER_REMOTE_APP" : "Programma:", - "FIELD_HEADER_SECURITY" : "Beveiligings modus:", - "FIELD_HEADER_SERVER_LAYOUT" : "Toetsenbord lay-out:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Standaard upload map:", - "FIELD_HEADER_SFTP_HOSTNAME" : "Servernaam:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Wachtwoordzin:", - "FIELD_HEADER_SFTP_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_SFTP_PORT" : "Poort:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Persoonlijke sleutel:", - "FIELD_HEADER_SFTP_USERNAME" : "Gebruikersnaam:", - "FIELD_HEADER_STATIC_CHANNELS" : "Vaste kanaalnamen:", - "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", - "FIELD_HEADER_WIDTH" : "Breedte:", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Minder Kleuren (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Echte Kleuren (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Echte Kleuren (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 kleuren", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Ververs scherm\" virtueel kanaal (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Verbind opnieuw", - - "FIELD_OPTION_SECURITY_ANY" : "Ieder", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", - "FIELD_OPTION_SECURITY_RDP" : "RDP encryptie", - "FIELD_OPTION_SECURITY_TLS" : "TLS encryptie", - - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Duits (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Amerikaans Engels (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Frans (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiaans (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japans (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Poolse (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Zweeds (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", - "SECTION_HEADER_BASIC_PARAMETERS" : "Basis Instellingen", - "SECTION_HEADER_CLIPBOARD" : "Klembord", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Apparaat Verbindingen", - "SECTION_HEADER_DISPLAY" : "Scherm", - "SECTION_HEADER_NETWORK" : "Netwerk", - "SECTION_HEADER_PERFORMANCE" : "Prestatie instellingen", - "SECTION_HEADER_PRECONNECTION_PDU" : "Voor te bereiden PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Scherm Opname", - "SECTION_HEADER_REMOTEAPP" : "ExterneApp", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_COLOR_SCHEME" : "Kleuren combinatie:", - "FIELD_HEADER_COMMAND" : "Uitvoeren opdracht:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatisch genereren typescript map:", - "FIELD_HEADER_FONT_NAME" : "Fontnaam:", - "FIELD_HEADER_FONT_SIZE" : "Fontgrootte:", - "FIELD_HEADER_ENABLE_SFTP" : "SFTP mogelijk maken:", - "FIELD_HEADER_HOSTNAME" : "Servernaam:", - "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", - "FIELD_HEADER_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_PASSPHRASE" : "Wachtwoordzin:", - "FIELD_HEADER_PORT" : "Poort:", - "FIELD_HEADER_PRIVATE_KEY" : "Persoonlijke sleutel:", - "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", - "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", - "FIELD_HEADER_RECORDING_PATH" : "Opname map:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript naam:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript map:", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Zwart op wit", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grijs op zwart", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Groen op zwart", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Wit op zwart", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", - "SECTION_HEADER_CLIPBOARD" : "Klembord", - "SECTION_HEADER_DISPLAY" : "Scherm", - "SECTION_HEADER_NETWORK" : "Netwerk", - "SECTION_HEADER_RECORDING" : "Scherm Opname", - "SECTION_HEADER_SESSION" : "Sessie / Omgeving", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Tekst sessie opname)", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_COLOR_SCHEME" : "Kleuren combinatie:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatisch genereren typescript map:", - "FIELD_HEADER_FONT_NAME" : "Fontnaam:", - "FIELD_HEADER_FONT_SIZE" : "Fontgrootte:", - "FIELD_HEADER_HOSTNAME" : "Servernaam:", - "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", - "FIELD_HEADER_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_PASSWORD_REGEX" : "Wachtwoord reguliere expressie:", - "FIELD_HEADER_PORT" : "Poort:", - "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", - "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", - "FIELD_HEADER_RECORDING_PATH" : "Opname map:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript naam:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript map:", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Zwart op wit", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grijs op zwart", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Groen op zwart", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Wit op zwart", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", - "SECTION_HEADER_CLIPBOARD" : "Klembord", - "SECTION_HEADER_DISPLAY" : "Scherm", - "SECTION_HEADER_RECORDING" : "Scherm Opname", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Tekst Sessie Opname)", - "SECTION_HEADER_NETWORK" : "Netwerk" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Audio server naam:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Encodering:", - "FIELD_HEADER_COLOR_DEPTH" : "Kleurdiepte:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", - "FIELD_HEADER_CURSOR" : "Cursor:", - "FIELD_HEADER_DEST_HOST" : "Externe server:", - "FIELD_HEADER_DEST_PORT" : "Externe poort:", - "FIELD_HEADER_ENABLE_AUDIO" : "Inschakelen geluid:", - "FIELD_HEADER_ENABLE_SFTP" : "Inschakelen SFTP:", - "FIELD_HEADER_HOSTNAME" : "Servernaam:", - "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", - "FIELD_HEADER_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_PORT" : "Poort:", - "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", - "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", - "FIELD_HEADER_RECORDING_PATH" : "Opname map:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Standaard upload map:", - "FIELD_HEADER_SFTP_HOSTNAME" : "Servernaam:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Wachtwoordzin:", - "FIELD_HEADER_SFTP_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_SFTP_PORT" : "Poort:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Persoonlijke sleutel:", - "FIELD_HEADER_SFTP_USERNAME" : "Gebruikersnaam:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Verwissel rood/blauw componenten:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 kleuren", - "FIELD_OPTION_COLOR_DEPTH_16" : "Minder kleuren (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Echte kleuren (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Echte kleuren (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Lokaal", - "FIELD_OPTION_CURSOR_REMOTE" : "Extern", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Geluid", - "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", - "SECTION_HEADER_CLIPBOARD" : "Klembord", - "SECTION_HEADER_DISPLAY" : "Scherm", - "SECTION_HEADER_NETWORK" : "Netwerk", - "SECTION_HEADER_RECORDING" : "Scherm Opname", - "SECTION_HEADER_REPEATER" : "VNC Repeater", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Instellingen" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "De gebruikgeschiedenis van verbindingen wordt hier onder getoond en kan gesorteerd worden door op de titel van de kolom te klikken. Voer een zoekterm in en klik op \"Zoeken\", om op specifieke resultaten te zoeken. Alleen de resultaten die voldoen aan de zoekterm zullen dan getoond worden.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Geen resultaten gevonden", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindingsnaam", - "TABLE_HEADER_SESSION_DURATION" : "Tijdsduur", - "TABLE_HEADER_SESSION_STARTDATE" : "Starttijd", - "TABLE_HEADER_SESSION_USERNAME" : "Gebruikersnaam", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "Nieuwe Verbinding", - "ACTION_NEW_CONNECTION_GROUP" : "Nieuwe Verbindingsgroep", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Klik of tik op een verbinding hieronder om die verbinding te beheren. Afhankelijk van uw toegangsniveau kunnen verbindingen worden toegevoegd en verwijderd en hun eigenschappen (protocol, hostname, port, etc.) worden gewijzigd. ", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Verbindingen" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Taal Keuze:", - "FIELD_HEADER_PASSWORD" : "Wachtwoord:", - "FIELD_HEADER_PASSWORD_OLD" : "Huidig Wachtwoord:", - "FIELD_HEADER_PASSWORD_NEW" : "Nieuw Wachtwoord:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Bevestig Nieuw Wachtwoord:", - "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", - - "HELP_DEFAULT_INPUT_METHOD" : "De standaard invoer methode bepaalt hoe toetsenbord gebeurtenissen ontvangen worden door Guacamole. Het veranderen van deze instelling kan nodig zijn bij gebruik van een mobiel apparaat of wanneer er via een IME getypt wordt. Deze instelling kan per verbinding worden overschreven via het Guacamole menu.", - "HELP_DEFAULT_MOUSE_MODE" : "De standaard muis emulatie modus bepaalt hoe de externe muis in nieuwe verbindingen omgaat met touch. Deze instelling kan per verbinding worden overschreven via het Guacamole menu.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LANGUAGE" : "Selecteer onderstaand een andere taal om alle text in Guacamole hieraan aan te passen. De beschikbare keuzes zijn afhankelijk van welke talen er geinstalleerd zijn.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Als u uw wachtwoord wilt wijzigen, voer dan uw huidige wachtwoord en uw nieuwe wachtwoord hieronder in en klik op \"Wijzig Wachtwoord\". Deze wijziging zal meteen actief zijn.", - - "INFO_PASSWORD_CHANGED" : "Wachtwoord gewijzigd.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Standaard Invoer Methode", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Standaard Muis Emulatie Modus", - "SECTION_HEADER_UPDATE_PASSWORD" : "Wijzig Wachtwoord" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Nieuwe Gebruiker", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Klik of tik op een van de onderstaande gebruikers om die te beheren. Afhankelijk van uw toegangsniveau kunnen gebruikers worden toegevoegd, verwijderd en hun wachtwoorden gewijzigd.", - - "SECTION_HEADER_USERS" : "Gebruikers", - - "TABLE_HEADER_USERNAME" : "Gebruikersnaam" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Beeindig Sessies", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Beeindig Sessie", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Deze pagina wordt gevuld met momenteel actieve verbindingen. De vermelde verbindingen en de mogelijkheid om die verbindingen te doden, zijn afhankelijk van uw toegangsniveau. Als u een of meerdere sessies wilt beeindigen, vink die sessie(s) dan aan en klik op \"Beeindig Sessies\". Door het verbreken van een sessie verliest de gebruiker ogenblikkelijk het contact met die sessie(s).", - - "INFO_NO_SESSIONS" : "Geen actieve sessies", - - "SECTION_HEADER_SESSIONS" : "Actieve Sessies", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindingnaam", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Servernaam", - "TABLE_HEADER_SESSION_STARTDATE" : "Actief sinds", - "TABLE_HEADER_SESSION_USERNAME" : "Gebruikersnaam", - - "TEXT_CONFIRM_DELETE" : "Weet u zeker dat u alle geselecteerde sessies wilt beeindigen? De gebruikers van deze sessies zullen ogenblikkelijk hun verbinding met deze sessies verliezen." - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/no.json b/guacamole/src/main/frontend/src/translations/no.json deleted file mode 100644 index 2ddd389320..0000000000 --- a/guacamole/src/main/frontend/src/translations/no.json +++ /dev/null @@ -1,673 +0,0 @@ -{ - - "NAME" : "Norsk Bokmål", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Avbryt", - "ACTION_CLONE" : "Klone", - "ACTION_CONTINUE" : "Fortsett", - "ACTION_DELETE" : "Slett", - "ACTION_DELETE_SESSIONS" : "Avslutt Sesjoner", - "ACTION_LOGIN" : "Logg inn", - "ACTION_LOGOUT" : "Logg ut", - "ACTION_MANAGE_CONNECTIONS" : "Forbindelser", - "ACTION_MANAGE_PREFERENCES" : "Mine valg", - "ACTION_MANAGE_SETTINGS" : "Innstillinger", - "ACTION_MANAGE_SESSIONS" : "Aktive Sesjoner", - "ACTION_MANAGE_USERS" : "Brukere", - "ACTION_NAVIGATE_BACK" : "Tilbake", - "ACTION_NAVIGATE_HOME" : "Hjem", - "ACTION_SAVE" : "Lagre", - "ACTION_SEARCH" : "Søk", - "ACTION_UPDATE_PASSWORD" : "Oppdater Passord", - "ACTION_VIEW_HISTORY" : "Historie", - - "DIALOG_HEADER_ERROR" : "Feil", - - "ERROR_PASSWORD_BLANK" : "Passordet ditt kan ikke være blankt.", - "ERROR_PASSWORD_MISMATCH" : "Passordene er ikke like.", - - "FIELD_HEADER_PASSWORD" : "Passord:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Gjenta Passord:", - - "FIELD_PLACEHOLDER_FILTER" : "Filter", - - "FORMAT_DATE_TIME_PRECISE" : "ååå-mm-dd TT:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Blir brukt av {USERS} {USERS, plural, one{user} other{users}}.", - - "NAME" : "Guacamole ${project.version}", - - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{second} other{seconds}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{hour} other{hours}}} day{{VALUE, plural, one{day} other{days}}} other{}}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Tøm", - "ACTION_DISCONNECT" : "Koble fra", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Koble til på nytt", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_UPLOAD_FILES" : "Last Opp Filer", - - "DIALOG_HEADER_CONNECTING" : "Kobler til", - "DIALOG_HEADER_CONNECTION_ERROR" : "Feil ved tilkobling", - "DIALOG_HEADER_DISCONNECTED" : "Frakoblet", - - "ERROR_CLIENT_201" : "Denne tilkoblingen har blitt lukket fordi server er opptatt. Vent noen minutter og prøv igjen.", - "ERROR_CLIENT_202" : "Guacamole har lukket forbindelsen fordi serveren bruker for lang tid på å svare. Prøv igjen eller kontakt systemansvarlig.", - "ERROR_CLIENT_203" : "Det har oppstått en feil på terminalserveren og forbindelsen er lukket. Prøv igjen eller kontakt systemansvarlig.", - "ERROR_CLIENT_205" : "Denne forbindelsen er lukket fordi den er i konflikt med en annen forbindelse. Prøv igjen senere.", - "ERROR_CLIENT_301" : "Innlogging feilet. Koble til på nytt og prøv igjen.", - "ERROR_CLIENT_303" : "Du har ikke tilgang til denne forbindelsen. Kontakt systemansvarlig eller sjekk dine systeminnstillinger dersom du trenger tilgang.", - "ERROR_CLIENT_308" : "Guacamole har lukket forbindelsen fordi nettleseren din ikke har svart og virker frakoblet. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen.", - "ERROR_CLIENT_31D" : "Guacamole nekter tilgang til denne forbindelsen fordi du har brukt opp maks antall samtidige forbindelser for en bruker. Avslutt en eller flere forbindelser og prøv igjen.", - "ERROR_CLIENT_DEFAULT" : "Det har oppstått en intern feil i Guacamole og forbindelsen er terminert. Kontakt systemansvarlig dersom problemet fortsetter eller sjekk systemlogger.", - - "ERROR_TUNNEL_201" : "Guacamole har avvist oppkoblingen fordi det er for mange aktive forbindelser. Vent noen minutter og prøv igjen.", - "ERROR_TUNNEL_202" : "Forbindelsen er lukket fordi server bruker for lang tid på å svare. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen eller kontakt systemadministrator.", - "ERROR_TUNNEL_203" : "Serveren støtte på en feil og har lukket forbindelsen. Prøv igjen eller kontakt systemadministrator.", - "ERROR_TUNNEL_204" : "Den etterspurte tilkoblingen eksisterer ikke. Sjekk navnet på tilkoblingen og prøv igjen.", - "ERROR_TUNNEL_205" : "Denne tilkoblingen er i bruk og flere forbindelser til denne tilkoblingen er ikke lov. Prøv igjen senere.", - "ERROR_TUNNEL_301" : "Du har ikke tilgang til denne tilkoblingen fordi du er ikke pålogget. Logg inn og prøv igjen.", - "ERROR_TUNNEL_303" : "Du har ikke tilgang til denne tilkoblingen. Be systemadministrator legge deg til i listen over godkjente brukere dersom du skal ha tilgang eller sjekk systeminstillingene dine.", - "ERROR_TUNNEL_308" : "Guacamole har lukket forbindelsen fordi nettleseren din ikke svarer og virker frakoblet. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen.", - "ERROR_TUNNEL_31D" : "Guacamole nekter tilgang til denne forbindelsen fordi du har brukt opp maks antall samtidige forbindelser for en bruker. Avslutt en eller flere forbindelser og prøv igjen.", - "ERROR_TUNNEL_DEFAULT" : "En intern feil har oppstått i Guacamole og forbindelsen er terminert. Kontakt systemadministrator dersom problemet fortsetter eller sjekk systemloggene dine.", - - "ERROR_UPLOAD_100" : "Filoverføring er enten ikke støttet eller ikke aktivert. Kontakt systemadministrator eller sjekk systemlogger.", - "ERROR_UPLOAD_201" : "For mange filer blir overført. Vent til aktive overføringer fullfører og prøv igjen.", - "ERROR_UPLOAD_202" : "Filen kan ikke overføres fordi terminalserveren bruker for lang tid på å svare. Prøv igjen eller kontakt systemadministrator.", - "ERROR_UPLOAD_203" : "Det oppstod en feil på terminalserveren under overføring. Prøv igjen eller kontakt systemansvarlig.", - "ERROR_UPLOAD_204" : "Målmappen for filoverføringen eksisterer ikke. Sjekk målmappe og prøv igjen.", - "ERROR_UPLOAD_205" : "Målet til filoverføringen er låst. Vent til aktive jobber fullfører og prøv igjen.", - "ERROR_UPLOAD_301" : "Du har ikke tillatelse til å laste opp denne filen fordi du er ikke logget inn. Logg inn og prøv igjen.", - "ERROR_UPLOAD_303" : "Du har ikke tillatelse til å laste opp denne filen. Sjekk systeminnstillingene dine eller kontakt systemadministrator dersom du skal ha tilgang.", - "ERROR_UPLOAD_308" : "Filoverføringen har stoppet. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen.", - "ERROR_UPLOAD_31D" : "For mange filer blir overført. Vent til aktive overføringer fullfører og prøv igjen.", - "ERROR_UPLOAD_DEFAULT" : "En intern feil har oppstått i Guacamole og forbindelsen er terminert. Kontakt systemadministrator dersom problemet fortsetter eller sjekk systemloggene dine.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Tekst som er kopiert eller klippet i Guacamole vises her. Endringer i teksten under vil påvirke den eksterne utklippstavlen.", - "HELP_INPUT_METHOD_NONE" : "Ingen innenhet er brukt. Tastetrykk fra et fysisk tilkoblet tastatur blir akseptert.", - "HELP_INPUT_METHOD_OSK" : "Vis og aksepter tastetrykk fra det innebygde skjermtastaturet i Guacamole. Skjermtastaturet tillater tasting av tastekombinasjoner som ellers kan være umulig (f.eks. Ctrl-Alt-Del).", - "HELP_INPUT_METHOD_TEXT" : "Tillat tasting av tekst og emuler hendinger basert på tastet tekst. Dette er nødvendig for enheter som mobiltelefoner som mangler fysisk tastatur.", - "HELP_MOUSE_MODE" : "Bestemmer hvordan den fjernstyrte musen reagerer på berøringer.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Trykk for å klikke. Klikket oppstår der man berører.", - "HELP_MOUSE_MODE_RELATIVE" : "Dra for å flytte musemarkøren og trykk for å klikke. Klikket oppstår på plasseringen til musepekeren.", - - "INFO_NO_FILE_TRANSFERS" : "Ingen filoverføringer.", - - "NAME_INPUT_METHOD_NONE" : "Ingen", - "NAME_INPUT_METHOD_OSK" : "Skjermtastatur", - "NAME_INPUT_METHOD_TEXT" : "Inntasting", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Touch-skjerm", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", - "SECTION_HEADER_DEVICES" : "Enheter", - "SECTION_HEADER_DISPLAY" : "Skjerm", - "SECTION_HEADER_FILE_TRANSFERS" : "Filoverføringer", - "SECTION_HEADER_INPUT_METHOD" : "Standard Innenhet", - "SECTION_HEADER_MOUSE_MODE" : "Metode for musemulering", - - "TEXT_ZOOM_AUTO_FIT" : "Skaler automatisk til nettleservindu.", - "TEXT_CLIENT_STATUS_IDLE" : "Passiv.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Kobler til Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Du er frakoblet.", - "TEXT_CLIENT_STATUS_WAITING" : "Tilkoblet Guacamole. Venter på svar...", - "TEXT_RECONNECT_COUNTDOWN" : "Kobler til på nytt om {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}" - - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Default (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Klikk for å vise passord", - "HELP_HIDE_PASSWORD" : "Klikk for å skjule passord" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Ingen nylige tilkoblinger.", - - "PASSWORD_CHANGED" : "Passord endret.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Alle tilkoblinger", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Nylige tilkoblinger" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Ugyldig Pålogging", - - "FIELD_HEADER_USERNAME" : "Brukernavn", - "FIELD_HEADER_PASSWORD" : "Passord" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Slett tilkobling", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Lokasjon:", - "FIELD_HEADER_NAME" : "Navn:", - "FIELD_HEADER_PROTOCOL" : "Protokoll:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Aktiv Nå", - "INFO_CONNECTION_NOT_USED" : "Denne tilkoblingen har ikke blitt brukt enda.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Rediger Tilkobling", - "SECTION_HEADER_HISTORY" : "Brukslogg", - "SECTION_HEADER_PARAMETERS" : "Parametre", - - "TABLE_HEADER_HISTORY_USERNAME" : "Brukernavn", - "TABLE_HEADER_HISTORY_START" : "Starttid", - "TABLE_HEADER_HISTORY_DURATION" : "Varighet", - - "TEXT_CONFIRM_DELETE" : "Tilkoblinger kan ikke gjennopprettes etter at de er slettet. Er du sikker på at du vil slette denne tilkoblingen?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Slett Tilkoblingsgruppe", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Lokasjon:", - "FIELD_HEADER_NAME" : "Navn:", - "FIELD_HEADER_TYPE" : "Type:", - - "NAME_TYPE_BALANCING" : "Balansert", - "NAME_TYPE_ORGANIZATIONAL" : "Organisasjon", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Rediger Tilkoblingsgruppe", - - "TEXT_CONFIRM_DELETE" : "Tilkoblingsgrupper kan ikke gjennopprettes etter at de er slettet. Er du sikker på at du vil slette denne tilkoblingsgruppen?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Slett Bruker", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrer systemet:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Endre eget passord:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Opprett ny bruker:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Opprett ny tilkobling:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Opprett ny tilkoblingsgruppe:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USERNAME" : "Brukernavn:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_READ_ONLY" : "Beklager, denne brukerkontoen kan ikke redigeres.", - - "SECTION_HEADER_CONNECTIONS" : "Tilkoblinger", - "SECTION_HEADER_EDIT_USER" : "Rediger Bruker", - "SECTION_HEADER_PERMISSIONS" : "Tillatelser", - - "TEXT_CONFIRM_DELETE" : "Brukere kan ikke gjenopprettes etter at de er slettet. Er du sikker på du vil slette denne brukeren?" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Klientnavn:", - "FIELD_HEADER_COLOR_DEPTH" : "Fargedybde:", - "FIELD_HEADER_CONSOLE" : "Administratorkonsoll:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Støtte for lyd i konsoll:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Opprett disk automatisk:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", - "FIELD_HEADER_DISABLE_AUDIO" : "Deaktiver lyd:", - "FIELD_HEADER_DISABLE_AUTH" : "Deaktiver autentisering:", - "FIELD_HEADER_DOMAIN" : "Domene:", - "FIELD_HEADER_DPI" : "Oppløsning (DPI):", - "FIELD_HEADER_DRIVE_PATH" : "Sti til disk:", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Aktiver skrivebordssammensetning (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Aktiver disk:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Aktiver fontutjevning (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Vis innhold i vindu ved flytting:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Aktiver menyanimasjoner:", - "FIELD_HEADER_ENABLE_PRINTING" : "Aktiver utskrift:", - "FIELD_HEADER_ENABLE_SFTP" : "Aktiver SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Aktiver tema:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Ativer bakgrunnsbilde:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Domene:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Vertsnavn:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Passord:", - "FIELD_HEADER_GATEWAY_PORT" : "Port:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Brukernavn:", - "FIELD_HEADER_HEIGHT" : "Høyde:", - "FIELD_HEADER_HOSTNAME" : "Vertsnavn:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorer serversertifikat:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Oppstartsprogram:", - "FIELD_HEADER_PASSWORD" : "Passord:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Pre-tilkoblings BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDP kilde-ID:", - "FIELD_HEADER_RECORDING_NAME" : "Navn på opptak:", - "FIELD_HEADER_RECORDING_PATH" : "Sti for opptak:", - "FIELD_HEADER_RESIZE_METHOD" : "Metode for reskalering:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameter:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Arbeidsmappe:", - "FIELD_HEADER_REMOTE_APP" : "Program:", - "FIELD_HEADER_SECURITY" : "Sikkerhetsmodus:", - "FIELD_HEADER_SERVER_LAYOUT" : "Tastaturutforming:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Standard mappe for opplasting:", - "FIELD_HEADER_SFTP_HOSTNAME" : "Vertsnavn:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passfrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Passord:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privat nøkkel:", - "FIELD_HEADER_SFTP_USERNAME" : "Brukernavn:", - "FIELD_HEADER_STATIC_CHANNELS" : "Statiske kanalnavn:", - "FIELD_HEADER_USERNAME" : "Brukernavn:", - "FIELD_HEADER_WIDTH" : "Bredde:", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Tusener av farger (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Ekte farger (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Ekte farger (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 farger", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Display Update\" virtual channel (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Koble til på nytt", - - "FIELD_OPTION_SECURITY_ANY" : "Alle", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", - "FIELD_OPTION_SECURITY_RDP" : "RDP kryptering", - "FIELD_OPTION_SECURITY_TLS" : "TLS kryptering", - - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Tysk (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US Engelsk (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Fransk (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiensk (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japansk (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polsk (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Svensk (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Autentisering", - "SECTION_HEADER_BASIC_PARAMETERS" : "Grunnleggende Innstillinger", - "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Enhet omdirigering", - "SECTION_HEADER_DISPLAY" : "Skjerm", - "SECTION_HEADER_NETWORK" : "Nettverk", - "SECTION_HEADER_PERFORMANCE" : "Ytelse", - "SECTION_HEADER_PRECONNECTION_PDU" : "Pre-tilkobling PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Skjermopptak", - "SECTION_HEADER_REMOTEAPP" : "Eksternt Program", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_COLOR_SCHEME" : "Fargeskjema:", - "FIELD_HEADER_COMMAND" : "Kjør kommando:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Opprett sti for typescript automatisk:", - "FIELD_HEADER_FONT_NAME" : "Fontnavn:", - "FIELD_HEADER_FONT_SIZE" : "Fontstørrelse:", - "FIELD_HEADER_ENABLE_SFTP" : "Aktiver SFTP:", - "FIELD_HEADER_HOSTNAME" : "Servernavn:", - "FIELD_HEADER_USERNAME" : "Brukernavn:", - "FIELD_HEADER_PASSWORD" : "Passord:", - "FIELD_HEADER_PASSPHRASE" : "Passfrase:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRIVATE_KEY" : "Privat nøkkel:", - "FIELD_HEADER_RECORDING_NAME" : "Navm på opptak:", - "FIELD_HEADER_RECORDING_PATH" : "Sti til opptak:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript navn:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript sti:", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Svart på hvit", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grå på svart", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grønn på svart", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Hvit på svart", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Autentisering", - "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", - "SECTION_HEADER_DISPLAY" : "Skjerm", - "SECTION_HEADER_NETWORK" : "Nettverk", - "SECTION_HEADER_RECORDING" : "Skjermopptak", - "SECTION_HEADER_SESSION" : "Sesjon / Miljø", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Opptak av tekstsesjon)", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_COLOR_SCHEME" : "Fargeskjema:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Opprett sti for typescript automatisk:", - "FIELD_HEADER_FONT_NAME" : "Fontnavn:", - "FIELD_HEADER_FONT_SIZE" : "Fontstørrelse:", - "FIELD_HEADER_HOSTNAME" : "Servernavn:", - "FIELD_HEADER_USERNAME" : "Brukernavn:", - "FIELD_HEADER_PASSWORD" : "Passord:", - "FIELD_HEADER_PASSWORD_REGEX" : "Passord regulært uttrykk:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_RECORDING_NAME" : "Navn på opptak:", - "FIELD_HEADER_RECORDING_PATH" : "Sti til opptak:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript navn:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript sti:", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Svart på hvit", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grå på svart", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grønn på svart", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Hvit på svart", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Autentisering", - "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", - "SECTION_HEADER_DISPLAY" : "Skjerm", - "SECTION_HEADER_RECORDING" : "Skjermopptak", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (Opptak av tekstsesjon)", - "SECTION_HEADER_NETWORK" : "Nettverk" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Lydserver:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Koding:", - "FIELD_HEADER_COLOR_DEPTH" : "Fargedybde:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", - "FIELD_HEADER_CURSOR" : "Peker:", - "FIELD_HEADER_DEST_HOST" : "Målserver:", - "FIELD_HEADER_DEST_PORT" : "Målport:", - "FIELD_HEADER_ENABLE_AUDIO" : "Aktiver lyd:", - "FIELD_HEADER_ENABLE_SFTP" : "Aktiver SFTP:", - "FIELD_HEADER_HOSTNAME" : "Servernavn:", - "FIELD_HEADER_USERNAME" : "Brukernavn:", - "FIELD_HEADER_PASSWORD" : "Passord:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Skrivebeskyttet:", - "FIELD_HEADER_RECORDING_NAME" : "Navn på opptak:", - "FIELD_HEADER_RECORDING_PATH" : "Sti til opptak:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Standard mappe for opplasting:", - "FIELD_HEADER_SFTP_HOSTNAME" : "Servernavn:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Passfrase:", - "FIELD_HEADER_SFTP_PASSWORD" : "Passord:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privat nøkkel:", - "FIELD_HEADER_SFTP_USERNAME" : "Brukernavn:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Bytt røde/blå komponenter:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 farger", - "FIELD_OPTION_COLOR_DEPTH_16" : "Tusener av farger (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "Ekte farger (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "Ekte farger (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Lokal", - "FIELD_OPTION_CURSOR_REMOTE" : "Ekstern", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Lyd", - "SECTION_HEADER_AUTHENTICATION" : "Autentisering", - "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", - "SECTION_HEADER_DISPLAY" : "Skjerm", - "SECTION_HEADER_NETWORK" : "Nettverk", - "SECTION_HEADER_RECORDING" : "Skjermopptak", - "SECTION_HEADER_REPEATER" : "VNC Repeater", - "SECTION_HEADER_SFTP" : "SFTP" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Innstillinger" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "Tidligere forbindelser er listet her historisk og kan sorteres ved å klikke kolonneoverskriftene. For å lete etter spesifikke poster kan du legge inn en filtreringstekst og klikke \"Søk\". Bare poster som passer filtreringsteksten vil bli listet opp.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Ingen poster funnet", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Navn på tilkobling", - "TABLE_HEADER_SESSION_DURATION" : "Varighet", - "TABLE_HEADER_SESSION_STARTDATE" : "Starttidspunkt", - "TABLE_HEADER_SESSION_USERNAME" : "Brukernavn", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "Ny Forbindelse", - "ACTION_NEW_CONNECTION_GROUP" : "Ny Gruppe", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Klikk eller berør en forbindelse under for å administrere forbindelsen. Avhengig av ditt tilgangsnivå kan forbindelser opprettes, slettes og egenskaper (protokoll, server, port, m.m.) kan endres.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Forbindelser" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Visningsspråk:", - "FIELD_HEADER_PASSWORD" : "Passord:", - "FIELD_HEADER_PASSWORD_OLD" : "Nåværende Passord:", - "FIELD_HEADER_PASSWORD_NEW" : "Nytt Passord:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Verifiser Nytt Passord:", - "FIELD_HEADER_USERNAME" : "Brukernavn:", - - "HELP_DEFAULT_INPUT_METHOD" : "Standard inndatametode bestemmer hvordan tastetrykk mottas av Guacamole. Det kan være nødvendig å endre på dette når du bruker mobile enheter eller IME. Denne instillingen kan overstyres på hver forbindelse i Guacamolemenyen.", - "HELP_DEFAULT_MOUSE_MODE" : "Standard musemulering bestemmer hvordan den eksterne musen vil oppføre seg med hensyn til berøringer. Denne instillingen kan overstyres på hver forbindelse i Guacamolemenyen.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LANGUAGE" : "Velg et språk under for å endre språket på all tekst i Guacamole. Tilgjengelige valg er avhengig av hvilke språk som er installert.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Skriv inn ditt gamle passord og det nye passordet under dersom du ønsker å endre passord. Klikk \"Oppdater Passord\". Endringen trer i kraft umiddelbart.", - - "INFO_PASSWORD_CHANGED" : "Passord endret.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Standard Innenhet", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Standard Metode For Musemulering", - "SECTION_HEADER_UPDATE_PASSWORD" : "Endre Passord" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Ny Bruker", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Klikk på en bruker under for å administrere den brukeren. Avhengig av din tilgang kan brukere legges til, slettes og passordet kan endres.", - - "SECTION_HEADER_USERS" : "Brukere", - - "TABLE_HEADER_USERNAME" : "Brukernavn" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Avbryt sesjoner", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Avbryt Sesjoner", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Denne siden vil bli fylt med nåværende aktive forbindelser. Tilkoblingene oppført og evnen til å drepe disse tilkoblingene er avhengig av tilgangsnivået ditt. Dersom du ønsker å avbryte en eller flere sesjoner haker du av boksen ved siden av sesjonen og klikker \"Avbryt sesjoner\". Avbrytes en sesjon vil brukeren umiddelbart kobles av den aktuelle sesjonen.", - - "INFO_NO_SESSIONS" : "Ingen aktive sesjoner", - - "SECTION_HEADER_SESSIONS" : "Aktive Sesjoner", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Navn på forbindelse", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Server", - "TABLE_HEADER_SESSION_STARTDATE" : "Aktiv siden", - "TABLE_HEADER_SESSION_USERNAME" : "Brukernavn", - - "TEXT_CONFIRM_DELETE" : "Er du sikker på at du vil avslutte valgte sesjoner? Brukere av disse sesjonene vil bli frakoblet umiddelbart." - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/pl.json b/guacamole/src/main/frontend/src/translations/pl.json deleted file mode 100644 index a01724d323..0000000000 --- a/guacamole/src/main/frontend/src/translations/pl.json +++ /dev/null @@ -1,1058 +0,0 @@ -{ - - "NAME" : "Polski", - - "APP" : { - - "NAME" : "Apache Guacamole", - "VERSION" : "${project.version}", - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Anuluj", - "ACTION_CLONE" : "Klonuj", - "ACTION_CONTINUE" : "Kontynuuj", - "ACTION_DELETE" : "Usuń", - "ACTION_DELETE_SESSIONS" : "Zakończ Sesję", - "ACTION_DOWNLOAD" : "Pobierz", - "ACTION_LOGIN" : "Zaloguj", - "ACTION_LOGIN_AGAIN" : "Zaloguj Ponownie", - "ACTION_LOGOUT" : "Wyloguj", - "ACTION_MANAGE_CONNECTIONS" : "Połączenia", - "ACTION_MANAGE_PREFERENCES" : "Preferencje", - "ACTION_MANAGE_SETTINGS" : "Ustawienia", - "ACTION_MANAGE_SESSIONS" : "Aktywne Sesje", - "ACTION_MANAGE_USERS" : "Użytkownicy", - "ACTION_MANAGE_USER_GROUPS" : "Grupy", - "ACTION_NAVIGATE_BACK" : "Wstecz", - "ACTION_NAVIGATE_HOME" : "Główna", - "ACTION_PAUSE" : "Pauza", - "ACTION_PLAY" : "Odtwórz", - "ACTION_SAVE" : "Zapisz", - "ACTION_SEARCH" : "Szukaj", - "ACTION_SHARE" : "Udostępnij", - "ACTION_UPDATE_PASSWORD" : "Zmień Hasło", - "ACTION_VIEW_HISTORY" : "Historia", - "ACTION_VIEW_RECORDING" : "Obejrzyj", - - "DIALOG_HEADER_ERROR" : "Błąd", - - "ERROR_PAGE_UNAVAILABLE" : "Wystąpił błąd i ta akcja nie może zostać zakończona. Jeśli problem nie zniknie, powiadom administratora systemu.", - "ERROR_PASSWORD_BLANK" : "Hasło nie może być puste.", - "ERROR_PASSWORD_MISMATCH" : "Podane hasła nie pasują do siebie.", - - "FIELD_HEADER_PASSWORD" : "Hasło:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Powtórz Hasło:", - - "FIELD_PLACEHOLDER_FILTER" : "Filtruj", - - "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Aktualnie w użyciu przez {USERS} {USERS, plural, one{użytkownika} other{użytkowników}}.", - "INFO_LOGGED_OUT" : "Zostałeś wylogowany.", - - "TEXT_ANONYMOUS_USER" : "Anonimowy", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{sekunda} other{sekund(-y)}}} minute{{VALUE, plural, one{minuta} other{minut(y)}}} hour{{VALUE, plural, one{godzina} other{godzin(y)}}} day{{VALUE, plural, one{dzień} other{dni}}} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Wyczyść", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "Rozłącz", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Połącz Ponownie", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_UPLOAD_FILES" : "Wyślij Pliki", - - "DIALOG_HEADER_CONNECTING" : "Łączenie", - "DIALOG_HEADER_CONNECTION_ERROR" : "Błąd Połączenia", - "DIALOG_HEADER_DISCONNECTED" : "Rozłączono", - - "ERROR_CLIENT_201" : "Połączenie zostało zamknięte, ponieważ serwer jest zajęty. Odczekaj kilka minut i spróbuj ponownie.", - "ERROR_CLIENT_202" : "Serwer Guacamole zamknął połączenie, ponieważ zdalny pulpit nie odpowiada przez zbyt długi czas. Spróbuj ponownie lub skontaktuj się z administratorem.", - "ERROR_CLIENT_203" : "Serwer zdalnego pulpitu napotkał błąd i zamknął połączenie. Spróbuj ponownie lub skontaktuj się z administratorem.", - "ERROR_CLIENT_207" : "Serwer zdalnego pulpitu jest aktualnie nieosiągalny. Jeśli problem nie zniknie powiadom administratora systemu lub sprawdź log systemu.", - "ERROR_CLIENT_208" : "Serwer zdalnego pulpitu jest aktualnie nieosiągalny. Jeśli problem nie zniknie powiadom administratora systemu lub sprawdź log systemu.", - "ERROR_CLIENT_209" : "Serwer zdalnego pulpitu zamknął połączenie, ponieważ koliduje z innym połączeniem. Spróbuj ponownie później.", - "ERROR_CLIENT_20A" : "Serwer zdalnego pulpitu zamknął połączenie, ponieważ wydaje się być nieaktywne. Jeśli nie jest to pożądane zachowanie powiadom administratora systemu lub sprawdź ustawienia.", - "ERROR_CLIENT_20B" : "Serwer zdalnego pulpitu wymusił zamknięcie połączenia. Jeśli nie jest to pożądane zachowanie powiadom administratora systemu lub sprawdź log systemu.", - "ERROR_CLIENT_301" : "Logowanie nieudane. Spróbuj ponownie.", - "ERROR_CLIENT_303" : "Serwer zdalnego pulpitu nie zezwolił na połączenie. Poproś administratora systemu o nadanie uprawnień dla Twojego konta lub sprawdź ustawienia.", - "ERROR_CLIENT_308" : "Serwer Guacamole zamknął połączenie, ponieważ nie otrzymał odpowiedzi od Twojej przeglądarki przez zbyt długi czas. Zazwyczaj jest to spowodowane niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie.", - "ERROR_CLIENT_31D" : "Serwer Guacamole nie zezwolił na połączenie, ponieważ wykorzystałeś limit jednoczesnych połączeń dla pojedynczego użytkownika. Zamknij jedno lub kilka połączeń i spróbuj ponownie.", - "ERROR_CLIENT_DEFAULT" : "Wystąpił błąd wewnętrzny serwera Guacamole i połączenie zostało zakończone. Jeśli problem nie zniknie, powiadom administratora systemu lub sprawdź log systemu.", - - "ERROR_TUNNEL_201" : "Serwer Guacamole odrzucił tę próbę połączenia, ponieważ istnieje zbyt wiele aktywnych połączeń. Poczekaj kilka minut i spróbuj ponownie.", - "ERROR_TUNNEL_202" : "Połączenie zostało zamknięte, ponieważ serwer nie odpowiada przez zbyt długo czas. Zazwyczaj spowodowane jest to niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie lub poinformuj administratora systemu.", - "ERROR_TUNNEL_203" : "Serwer napotkał błąd i zamknął połączenie. Spróbuj ponownie lub skontaktuj się z administratorem systemu", - "ERROR_TUNNEL_204" : "Żądane połączenie nie istnieje. Sprawdź nazwę połączenia i spróbuj ponownie", - "ERROR_TUNNEL_205" : "To połączenie jest aktualnie w użyciu oraz jednoczesny dostęp dla tego połączenia nie jest dozwolony. Spróbuj ponownie później.", - "ERROR_TUNNEL_207" : "Serwer Guacamole jest aktualnie nieosiągalny. Sprawdź swoją sieć i spróbuj ponownie.", - "ERROR_TUNNEL_208" : "Serwer Guacamole nie akceptuje połączeń. Sprawdź swoją sieć i spróbuj ponownie.", - "ERROR_TUNNEL_301" : "Nie masz dostępu do tego połączenia, ponieważ nie jesteś zalogowany. Zaloguj się i spróbuj ponownie.", - "ERROR_TUNNEL_303" : "Nie masz uprawnień do tego połączenia. Jeśli potrzebujesz uprawnień poproś administratora systemu o dodanie Cię do listy użytkowników z zezwoleniem lub sprawdź ustawienia systemu. ", - "ERROR_TUNNEL_308" : "Serwer Guacamole zamknął połączenie, ponieważ nie otrzymał odpowiedzi od Twojej przeglądarki przez zbyt długi czas. Zazwyczaj jest to spowodowane niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie.", - "ERROR_TUNNEL_31D" : "Serwer Guacamole nie zezwolił na połączenie, ponieważ wykorzystałeś limit jednoczesnych połączeń dla pojedynczego użytkownika. Zamknij jedno lub kilka połączeń i spróbuj ponownie.", - "ERROR_TUNNEL_DEFAULT" : "Wystąpił błąd wewnętrzny serwera Guacamole i połączenie zostało zakończone. Jeśli problem nie zniknie, powiadom administratora systemu lub sprawdź log systemu.", - - "ERROR_UPLOAD_100" : "Transfer plików jest nie wspierany lub wyłączony. Skontaktuj się z administratorem systemu lub sprawdź log systemu.", - "ERROR_UPLOAD_201" : "Zbyt wiele plików jest aktualnie transferowanych. Poczekaj na zakończenie trwających transferów i spróbuj ponownie.", - "ERROR_UPLOAD_202" : "Plik nie może zostać przesłany, ponieważ Serwer zdalnego pulpitu nie odpowiada przez zbyt długi czas. Spróbuj ponownie lub skontaktuj się z administratorem systemu", - "ERROR_UPLOAD_203" : "Serwer zdalnego pulpitu napotkał na błąd podczas transferu. Spróbuj ponownie lub skontaktuj się z administratorem systemu", - "ERROR_UPLOAD_204" : "Docelowa ścieżka transferu pliku nie istnieje. Upewnij się, że ścieżka docelowa istnieje i spróbuj ponownie.", - "ERROR_UPLOAD_205" : "Lokalizacja docelowa dla transferu pliku jest aktualnie zablokowana. Poczekaj na zakończenie trwający zadań i spróbuj ponownie.", - "ERROR_UPLOAD_301" : "Nie masz uprawnień do przesłania tego pliku, ponieważ jest nie zalogowany. Zaloguj się i spróbuj ponownie.", - "ERROR_UPLOAD_303" : "Nie masz uprawnień do przesłania tego pliku. Jeśli potrzebujesz dostępu sprawdź ustawienia systemu lub skontaktuj się z administratorem systemu.", - "ERROR_UPLOAD_308" : "Transfer pliku utknął w martwym punkcie. Zazwyczaj jest to spowodowane niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie.", - "ERROR_UPLOAD_31D" : "Zbyt wiele plików jest aktualnie transferowanych. Poczekaj na zakończenie trwających transferów i spróbuj ponownie.", - "ERROR_UPLOAD_DEFAULT" : "Wystąpił błąd wewnętrzny serwera Guacamole i połączenie zostało zakończone. Jeśli problem nie zniknie, powiadom administratora systemu lub sprawdź log systemu.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Tekst skopiowany/wycięty wewnątrz serwera Guacamole pojawi się tutaj. Zmiany dokonane w tym miejscu będą miały wpływ na zawartość zdalnego schowka", - "HELP_INPUT_METHOD_NONE" : "Żadna metoda wejścia nie jest w użyciu. Wejście klawiatury jest akceptowane z podłączonej fizycznej klawiatury.", - "HELP_INPUT_METHOD_OSK" : "Wyświetl i zaakceptuj dane wejściowe z wbudowanej klawiatury ekranowej Guacamole. Klawiatura ekranowa umożliwia wpisywanie kombinacji klawiszy, które w innym przypadku byłyby niemożliwe (takich jak Ctrl-Alt-Del)", - "HELP_INPUT_METHOD_TEXT" : "Zezwalaj na pisanie tekstu i emuluj zdarzenia klawiatury na podstawie wpisanego tekstu. Jest to konieczne w przypadku urządzeń takich jak telefony komórkowe, które nie mają fizycznej klawiatury.", - "HELP_MOUSE_MODE" : "Określa zachowanie zdalnej myszy w odniesieniu do dotknięć.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Dotknij, aby kliknąć. Kliknięcie następuje w miejscu dotknięcia.", - "HELP_MOUSE_MODE_RELATIVE" : "Przeciągnij, aby przesunąć wskaźnik myszy i dotknij, aby kliknąć. Kliknięcie następuje w miejscu, w którym znajduje się wskaźnik.", - "HELP_SHARE_LINK" : "Aktualne połączenie jest udostępniane, dostęp może uzyskać każdy posiadający {LINKS, plural, one{link} other{linki}}:", - - "INFO_CONNECTION_SHARED" : "To połączenie jest teraz udostępniane.", - "INFO_NO_FILE_TRANSFERS" : "Brak transferów plików.", - - "NAME_INPUT_METHOD_NONE" : "Brak", - "NAME_INPUT_METHOD_OSK" : "Klawiatura ekranowa", - "NAME_INPUT_METHOD_TEXT" : "Pole tekstowe", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Ekran dotykowy", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIPBOARD" : "Schowek", - "SECTION_HEADER_DEVICES" : "Urządzenia", - "SECTION_HEADER_DISPLAY" : "Wyświetlanie", - "SECTION_HEADER_FILE_TRANSFERS" : "Transfer Plików", - "SECTION_HEADER_INPUT_METHOD" : "Metoda wejścia", - "SECTION_HEADER_MOUSE_MODE" : "Tryb emulacji myszy", - - "TEXT_ZOOM_AUTO_FIT" : "Automatycznie dopasuj do okna przeglądarki", - "TEXT_CLIENT_STATUS_IDLE" : "Bezczynne.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Łączenie z Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Zostałeś rozłączony.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "Połączenie sieciowe z serwerem Guacamole wydaje się być niestabilne.", - "TEXT_CLIENT_STATUS_WAITING" : "Połączono z Guacamole. Czekanie na odpowiedź...", - "TEXT_RECONNECT_COUNTDOWN" : "Ponowne połączenie za {REMAINING} {REMAINING, plural, one{sekundę} other{sekund(-y)}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Ukryj", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Pokaż", - - "FIELD_HEADER_BACKGROUND" : "Drugi plan", - "FIELD_HEADER_FOREGROUND" : "Pierwszy plan", - - "FIELD_OPTION_CUSTOM" : "Niestandardowy...", - - "SECTION_HEADER_DETAILS" : "Szczegóły:" - - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Domyślny (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Naciśnij aby pokazać hasło", - "HELP_HIDE_PASSWORD" : "Naciśnij aby ukryć hasło" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Brak ostatnich połączeń.", - - "PASSWORD_CHANGED" : "Hasło zmienione.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Wszystkie połączenia", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Ostatnie połączenia" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "Anonimowy" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Niepoprawny Login", - - "FIELD_HEADER_USERNAME" : "Użytkownik", - "FIELD_HEADER_PASSWORD" : "Hasło" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Połączenie", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Lokalizacja:", - "FIELD_HEADER_NAME" : "Nazwa:", - "FIELD_HEADER_PROTOCOL" : "Protokół:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Aktywne Teraz", - "INFO_CONNECTION_NOT_USED" : "To połączenie nie zostało jeszcze użyte.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Edytuj Połączenie", - "SECTION_HEADER_HISTORY" : "Historia Użycia", - "SECTION_HEADER_PARAMETERS" : "Parametry", - - "TABLE_HEADER_HISTORY_USERNAME" : "Użytkownik", - "TABLE_HEADER_HISTORY_START" : "Czas Rozpoczęcia", - "TABLE_HEADER_HISTORY_DURATION" : "Czas Trwania", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Zdalny Host", - - "TEXT_CONFIRM_DELETE" : "Połączenia nie mogą zostać przywrócone po ich usunięciu. Czy na pewno chcesz usunąć to połączenie?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Grupę Połączeń", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Lokalizacja:", - "FIELD_HEADER_NAME" : "Nazwa:", - "FIELD_HEADER_TYPE" : "Typ:", - - "NAME_TYPE_BALANCING" : "Równoważący obciążenie", - "NAME_TYPE_ORGANIZATIONAL" : "Organizacyjny", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Edytuj Grupę Połączeń", - - "TEXT_CONFIRM_DELETE" : "Grupy połączeń nie mogą zostać przywrócone po tym jak zostaną usunięte. Czy na pewno chcesz usunąć tę grupę połączeń?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Profil Udostępniania", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Nazwa:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Podstawowe Połączenie:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Edytuj Profil Udostępniania", - "SECTION_HEADER_PARAMETERS" : "Parametry", - - "TEXT_CONFIRM_DELETE" : "Profile udostępniania nie mogą zostać przywrócone po tym jak zostaną usunięte. Czy na pewno chcesz usunąć ten profil udostępniania?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Użytkownika", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administracja systemem:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Zmiana własnego hasła:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Tworzenie nowych użytkowników:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Tworzenie nowych grup użytkowników:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Tworzenie nowych połączeń:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Tworzenie nowych grup połączeń:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Tworzenie nowych profili udostępniania:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "Logowanie zablokowane:", - "FIELD_HEADER_USERNAME" : "Nazwa użytkownika:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Ten użytkownik nie należy obecnie do żadnej grupy. Rozwiń tę sekcje aby dodać do grupy.", - - "INFO_READ_ONLY" : "Ten użytkownik nie może być edytowany", - "INFO_NO_USER_GROUPS_AVAILABLE" : "Brak dostępnych grup.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Wszystkie Połączenia", - "SECTION_HEADER_CONNECTIONS" : "Połączenia", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Obecne Połączenia", - "SECTION_HEADER_EDIT_USER" : "Edytuj Użytkownika", - "SECTION_HEADER_PERMISSIONS" : "Uprawnienia", - "SECTION_HEADER_USER_GROUPS" : "Grupy", - - "TEXT_CONFIRM_DELETE" : "Użytkownicy nie mogą zostać przywróceni po tym jak zostaną usunięci. Czy na pewno chcesz usunąć tego użytkownika?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń grupę", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_DISABLED" : "Wyłączona:", - "FIELD_HEADER_USER_GROUP_NAME" : "Nazwa grupy:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "To grupa nie należy do żadnej grupy. Rozwiń tę sekcje aby dodać do grupy.", - "HELP_NO_MEMBER_USER_GROUPS" : "Ta grupa nie zawiera żadnych grup. Rozwiń tę sekcje aby dodać grupy.", - "HELP_NO_MEMBER_USERS" : "Ta grupa nie zawiera żadnych użytkowników. Rozwiń tę sekcje aby dodać użytkowników do grupy.", - - "INFO_READ_ONLY" : "Ta grupa nie może być edytowana", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "Brak dostępnych użytkowników.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Edytuj Grupę", - "SECTION_HEADER_MEMBER_USERS" : "Należący użytkownicy", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Należące grupy", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Grupy nadrzędne", - - "TEXT_CONFIRM_DELETE" : "Grupy nie mogą zostać przywrócone po tym jak zostaną usunięte. Czy na pewno chcesz usunąć tę grupę?" - - }, - - "PLAYER" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", - "ACTION_PLAY" : "@:APP.ACTION_PLAY", - - "INFO_LOADING_RECORDING" : "Twoje nagranie jest właśnie ładowane. Proszę czekać...", - "INFO_SEEK_IN_PROGRESS" : "Szukanie żądanej pozycji. Proszę czekać..." - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Klawisz Backspace wysyła:", - "FIELD_HEADER_CA_CERT" : "Certyfikat CA:", - "FIELD_HEADER_CLIENT_CERT" : "Certyfikat klienta:", - "FIELD_HEADER_CLIENT_KEY" : "Klucz klienta:", - "FIELD_HEADER_COLOR_SCHEME" : "Schemat kolorów:", - "FIELD_HEADER_CONTAINER" : "Nazwa kontenera:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatycznie utwórz ścieżkę maszynopisu:", - "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie z terminala:", - "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", - "FIELD_HEADER_EXEC_COMMAND" : "Komenda (exec):", - "FIELD_HEADER_FONT_NAME" : "Nazwa czcionki:", - "FIELD_HEADER_FONT_SIZE" : "Rozmiar czcionki:", - "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", - "FIELD_HEADER_IGNORE_CERT" : "Ignoruj certyfikat serwera:", - "FIELD_HEADER_NAMESPACE" : "Przestrzeń nazw:", - "FIELD_HEADER_POD" : "Nazwa pod'a:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", - "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", - "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", - "FIELD_HEADER_SCROLLBACK" : "Maksymalny rozmiar przewijania:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nazwa maszynopisu:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ścieżka maszynopisu:", - "FIELD_HEADER_USE_SSL" : "Użyj SSL/TLS", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Czarny na białym", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Szary na czarnym", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zielony na czarnym", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Biały na czarnym", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", - "SECTION_HEADER_BEHAVIOR" : "Zachowanie terminala", - "SECTION_HEADER_CLIPBOARD" : "Schowek", - "SECTION_HEADER_CONTAINER" : "Kontener", - "SECTION_HEADER_DISPLAY" : "Wyświetlanie", - "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", - "SECTION_HEADER_TYPESCRIPT" : "Maszynopis (Tekstowe nagranie sesji)", - "SECTION_HEADER_NETWORK" : "Sieć" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Nazwa klienta:", - "FIELD_HEADER_COLOR_DEPTH" : "Głębia kolorów:", - "FIELD_HEADER_CONSOLE" : "Konsola administratora:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Wspieraj dźwięk w konsoli:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automatycznie utwórz dysk:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", - "FIELD_HEADER_DISABLE_AUDIO" : "Wyłącz dźwięk:", - "FIELD_HEADER_DISABLE_AUTH" : "Wyłącz uwierzytelnianie:", - "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie ze zdalnego pulpitu:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", - "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", - "FIELD_HEADER_DOMAIN" : "Domena:", - "FIELD_HEADER_DPI" : "Rozdzielczość (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Nazwa dysku:", - "FIELD_HEADER_DRIVE_PATH" : "Ścieżka dysku:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Włącz wejście dźwięku (mikrofon):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Włącz kompozycje pulpitu (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Włącz dysk:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Włącz wygładzanie czcionek (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Włącz przeciąganie w pełnym oknie:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Włącz animacje menu:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Wyłącz bitmap caching:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Wyłącz off-screen caching:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Wyłącz glyph caching:", - "FIELD_HEADER_DISABLE_GFX" : "Wyłącz Rozszerzenie Potoku Graficznego:", - "FIELD_HEADER_ENABLE_PRINTING" : "Włącz drukowanie:", - "FIELD_HEADER_ENABLE_SFTP" : "Włącz SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Włącz motyw:", - "FIELD_HEADER_ENABLE_TOUCH" : "Włącz multi-touch:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Włącz tapetę:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Wymuś bezstratną kompresję:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Domena:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nazwa hosta:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Hasło:", - "FIELD_HEADER_GATEWAY_PORT" : "Port:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Użytkownik:", - "FIELD_HEADER_HEIGHT" : "Wysokość:", - "FIELD_HEADER_HOSTNAME" : "Nazwa hosta:", - "FIELD_HEADER_IGNORE_CERT" : "Ignoruj certyfikat serwera:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Program początkowy:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Load balance info/cookie:", - "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Zakończenie linii:", - "FIELD_HEADER_PASSWORD" : "Hasło:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRINTER_NAME" : "Nazwa przekierowanej drukarki:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "Źródłowe ID RDP:", - "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Wyklucz zdarzenia dotykowe:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", - "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", - "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", - "FIELD_HEADER_RESIZE_METHOD" : "Metoda zmiany rozmiaru:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parametry:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Katalog roboczy:", - "FIELD_HEADER_REMOTE_APP" : "Program:", - "FIELD_HEADER_SECURITY" : "Tryb bezpieczeństwa:", - "FIELD_HEADER_SERVER_LAYOUT" : "Układ klawiatury:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Domyślny katalog dla przesyłania:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Publiczny klucz hosta (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nazwa Hosta:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interwał utrzymania aktywności (keepalive) SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Hasło klucza:", - "FIELD_HEADER_SFTP_PASSWORD" : "Hasło:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Klucz prywatny:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Katalog nadrzędny przeglądarki plików:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", - "FIELD_HEADER_SFTP_USERNAME" : "Użytkownik:", - "FIELD_HEADER_STATIC_CHANNELS" : "Nazwy statycznych kanałów:", - "FIELD_HEADER_TIMEZONE" : "Strefa czasowa:", - "FIELD_HEADER_USERNAME" : "Użytkownik:", - "FIELD_HEADER_WIDTH" : "Szerokość:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", - - "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Zachowaj tak, jak jest", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Aktualizacja Wyświetlania\" kanał wirtualny (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Połącz Ponownie", - - "FIELD_OPTION_SECURITY_ANY" : "Dowolny", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Uwierzytelnianie Na Poziomie Sieci)", - "FIELD_OPTION_SECURITY_RDP" : "szyfrowanie RDP", - "FIELD_OPTION_SECURITY_TLS" : "szyfrowanie TLS", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Czeski (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Duński (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Szwajcarski Niemiecki (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Niemiecki (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK Angielski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US Angielski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Hiszpański (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latynoamerykański (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgijski Francuski (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Kanadyjski Francuski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Szwajcarski Francuski (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francuski (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Węgierski (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Włoski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japoński (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norweski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugalski Brazylijski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugalski (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Szwecki (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turecki-Q (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", - "SECTION_HEADER_BASIC_PARAMETERS" : "Ustawienia Podstawowe", - "SECTION_HEADER_CLIPBOARD" : "Schowek", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Przekierowanie Urządzeń", - "SECTION_HEADER_DISPLAY" : "Wyświetlanie", - "SECTION_HEADER_GATEWAY" : "Remote Desktop Gateway", - "SECTION_HEADER_LOAD_BALANCING" : "Load Balancing", - "SECTION_HEADER_NETWORK" : "Sieć", - "SECTION_HEADER_PERFORMANCE" : "Wydajność", - "SECTION_HEADER_PRECONNECTION_PDU" : "Wstępne połączenie PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", - "SECTION_HEADER_REMOTEAPP" : "RemoteApp", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Klawisz Backspace wysyła:", - "FIELD_HEADER_COLOR_SCHEME" : "Schemat kolorów:", - "FIELD_HEADER_COMMAND" : "Wykonaj polecenie:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatycznie utwórz ścieżkę maszynopisu:", - "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie z terminala:", - "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", - "FIELD_HEADER_FONT_NAME" : "Nazwa czcionki:", - "FIELD_HEADER_FONT_SIZE" : "Rozmiar czcionki:", - "FIELD_HEADER_ENABLE_SFTP" : "Włącz SFTP:", - "FIELD_HEADER_HOST_KEY" : "Publiczny klucz hosta (Base64):", - "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", - "FIELD_HEADER_LOCALE" : "Język/Ustawienia regionalne ($LANG):", - "FIELD_HEADER_USERNAME" : "Użytkownik:", - "FIELD_HEADER_PASSWORD" : "Hasło:", - "FIELD_HEADER_PASSPHRASE" : "Hasło klucza:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_PRIVATE_KEY" : "Klucz prywatny:", - "FIELD_HEADER_SCROLLBACK" : "Maksymalny rozmiar przewijania:", - "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", - "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", - "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Interwał utrzymywania aktywności serwera (keepalive):", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Katalog nadrzędny przeglądarki plików:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", - "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminala:", - "FIELD_HEADER_TIMEZONE" : "Strefa czasowa ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nazwa maszynopisu:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ścieżka maszynopisu:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Czarny na białym", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Szary na czarnym", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zielony na czarnym", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Biały na czarnym", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", - "SECTION_HEADER_BEHAVIOR" : "Zachowanie Terminala", - "SECTION_HEADER_CLIPBOARD" : "Schowek", - "SECTION_HEADER_DISPLAY" : "Wyświetlanie", - "SECTION_HEADER_NETWORK" : "Sieć", - "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", - "SECTION_HEADER_SESSION" : "Sesja / Środowisko", - "SECTION_HEADER_TYPESCRIPT" : "Maszynopis (Tekstowe Nagranie Sesji)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Klawisz Backspace wysyła:", - "FIELD_HEADER_COLOR_SCHEME" : "Schemat kolorów:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatycznie utwórz ścieżkę maszynopisu:", - "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie z terminala:", - "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", - "FIELD_HEADER_FONT_NAME" : "Nazwa czcionki:", - "FIELD_HEADER_FONT_SIZE" : "Rozmiar czcionki:", - "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Wyrażenie regularne nieudanego logowania:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Wyrażenie regularne udanego logowania:", - "FIELD_HEADER_USERNAME" : "Użytkownik:", - "FIELD_HEADER_USERNAME_REGEX" : "Wyrażenie regularne użytkownika:", - "FIELD_HEADER_PASSWORD" : "Hasło:", - "FIELD_HEADER_PASSWORD_REGEX" : "Wyrażenie regularne hasła", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz wciśnięcia klawiszy:", - "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", - "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", - "FIELD_HEADER_SCROLLBACK" : "Maksymalny rozmiar przewijania:", - "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminala:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nazwa maszynopisu:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Ścieżka maszynopisu:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Czarny na białym", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Szary na czarnym", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zielony na czarnym", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Biały na czarnym", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", - "SECTION_HEADER_BEHAVIOR" : "Zachowanie Terminala", - "SECTION_HEADER_CLIPBOARD" : "Schowek", - "SECTION_HEADER_DISPLAY" : "Wyświetlanie", - "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", - "SECTION_HEADER_TYPESCRIPT" : "Maszynopis (Tekstowe Nagranie Sesji)", - "SECTION_HEADER_NETWORK" : "Sieć", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Nazwa serwera audio:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Kodowanie:", - "FIELD_HEADER_COLOR_DEPTH" : "Głębia kolorów:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", - "FIELD_HEADER_CURSOR" : "Kursor:", - "FIELD_HEADER_DEST_HOST" : "Docelowy host:", - "FIELD_HEADER_DEST_PORT" : "Docelowy port:", - "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie ze zdalnego pulpitu:", - "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", - "FIELD_HEADER_ENABLE_AUDIO" : "Włącz dźwięk:", - "FIELD_HEADER_ENABLE_SFTP" : "Włącz SFTP:", - "FIELD_HEADER_FORCE_LOSSLESS" : "Wymuś bezstratną kompresję:", - "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", - "FIELD_HEADER_USERNAME" : "Użytkownik:", - "FIELD_HEADER_PASSWORD" : "Hasło:", - "FIELD_HEADER_PORT" : "Port:", - "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", - "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", - "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Domyślny katalog przesyłania:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Publiczny klucz hosta (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nazwa Hosta:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interwał utrzymania aktywności (keepalive) SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Hasło klucza:", - "FIELD_HEADER_SFTP_PASSWORD" : "Hasło:", - "FIELD_HEADER_SFTP_PORT" : "Port:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Klucz prywatny:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Katalog nadrzędny przeglądarki plików:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", - "FIELD_HEADER_SFTP_USERNAME" : "Użytkownik:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Zamień czerwone/niebieskie komponenty:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", - "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Lokalny", - "FIELD_OPTION_CURSOR_REMOTE" : "Zdalny", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Dźwięk", - "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", - "SECTION_HEADER_CLIPBOARD" : "Schowek", - "SECTION_HEADER_DISPLAY" : "Wyświetlanie", - "SECTION_HEADER_NETWORK" : "Sieć", - "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", - "SECTION_HEADER_REPEATER" : "Przekaźnik VNC", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Ustawienia" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "Rekordy historii poprzednich połączeń są wylistowane tutaj i można je sortować klikając nagłówki kolumn. Aby wyszukać określone rekordy wprowadź ciąg filtru i kliknij \"Szukaj\". Tylko rekordy pasujące do podanego filtru zostaną wyświetlone.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Brak pasujących rekordów", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nazwa połączenia", - "TABLE_HEADER_SESSION_DURATION" : "Czas trwania", - "TABLE_HEADER_SESSION_LOGS" : "Logi", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Zdalny host", - "TABLE_HEADER_SESSION_STARTDATE" : "Czas rozpoczęcia", - "TABLE_HEADER_SESSION_USERNAME" : "Użytkownik", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "Nowe Połączenie", - "ACTION_NEW_CONNECTION_GROUP" : "Nowa Grupa", - "ACTION_NEW_SHARING_PROFILE" : "Nowy Profil Udostępniania", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Kliknij lub naciśnij połączenie poniżej, aby nim zarządzać. W zależności od poziomu dostępu, połączenia mogą być dodawane i usuwane, a ich właściwości (protokół, nazwa hosta, port itp.) mogą być zmieniane.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Połączenia" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Język:", - "FIELD_HEADER_PASSWORD" : "Hasło:", - "FIELD_HEADER_PASSWORD_OLD" : "Obecne Hasło:", - "FIELD_HEADER_PASSWORD_NEW" : "Nowe Hasło:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Powtórz Nowe Hasło:", - "FIELD_HEADER_TIMEZONE" : "Strefa Czasowa:", - "FIELD_HEADER_USERNAME" : "Użytkownik:", - - "HELP_DEFAULT_INPUT_METHOD" : "Domyślna metoda wprowadzania określa sposób odbierania zdarzeń klawiatury przez Guacamole. Zmiana tego ustawienia może być konieczna w przypadku korzystania z urządzenia mobilnego lub pisania w edytorze IME. To ustawienie można zmienić dla każdego połączenia w menu Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "Domyślny tryb emulacji myszy określa, jak zdalna mysz będzie się zachowywać w nowych połączeniach w odniesieniu do dotknięć. To ustawienie można zmienić dla każdego połączenia w menu Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Poniższe opcje są związane z ustawieniami regionalnymi użytkownika i wpłyną na sposób wyświetlania różnych części interfejsu", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Jeśli chcesz zmienić swoje hasło, wprowadź poniżej obecne hasło i żądane nowe hasło, a następnie kliknij \"Zmień Hasło\". Zmiana będzie miała efekt natychmiastowy.", - - "INFO_PASSWORD_CHANGED" : "Hasło zmienione.", - "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "Ustawienia użytkownika zapisane.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Domyślna Metoda Wprowadzania", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Domyślny Tryb Emulacji Myszy", - "SECTION_HEADER_UPDATE_PASSWORD" : "Zmień Hasło" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Nowy Użytkownik", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Kliknij lub dotknij użytkownika poniżej, aby nim zarządzać. W zależności od Twojego poziomu dostępu, użytkowników można dodawać i usuwać, a także zmieniać ich hasła.", - - "SECTION_HEADER_USERS" : "Użytkownicy", - - "TABLE_HEADER_FULL_NAME" : "Imię i Nazwisko", - "TABLE_HEADER_LAST_ACTIVE" : "Ostatnio aktywny", - "TABLE_HEADER_ORGANIZATION" : "Organizacja", - "TABLE_HEADER_USERNAME" : "Nazwa użytkownika" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "Nowa Grupa", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Kliknij lub naciśnij grupę poniżej, aby nią zarządzać. W zależności od Twojego poziomu dostępu, grupy mogą być dodawane i usuwane, a ich użytkownicy i grupy mogą być edytowane.", - - "SECTION_HEADER_USER_GROUPS" : "Grupy", - - "TABLE_HEADER_USER_GROUP_NAME" : "Nazwa Grupy" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Zakończ sesję", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Zakończ Sesję", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Ta strona zostanie wypełniona aktualnie aktywnymi połączeniami. Lista połączeń i możliwość ich zakończenia zależy od Twojego poziomu dostępu. Jeśli chcesz zakończyć jedną lub więcej sesji, zaznacz pola obok tych sesji i kliknij \"Zakończ sesję\". Zakończenie sesji spowoduje natychmiastowe rozłączenie użytkownika z powiązanym połączeniem.", - - - "INFO_NO_SESSIONS" : "Brak aktywnych połączeń", - - "SECTION_HEADER_SESSIONS" : "Aktywne Połączenia", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nazwa połączenia", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Zdalny host", - "TABLE_HEADER_SESSION_STARTDATE" : "Aktywne od", - "TABLE_HEADER_SESSION_USERNAME" : "Użytkownik", - - "TEXT_CONFIRM_DELETE" : "Czy na pewno chcesz zakończyć wszystkie wybrane sesje? Użytkownicy korzystający z tych sesji zostaną natychmiast rozłączeni." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Adres email:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Imię i Nazwisko:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organizacja:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Rola:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/pt.json b/guacamole/src/main/frontend/src/translations/pt.json deleted file mode 100644 index bfd95e92a1..0000000000 --- a/guacamole/src/main/frontend/src/translations/pt.json +++ /dev/null @@ -1,1017 +0,0 @@ -{ - - "NAME" : "Português", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "OK", - "ACTION_CANCEL" : "Cancelar", - "ACTION_CLONE" : "Clonar", - "ACTION_CONTINUE" : "Continuar", - "ACTION_DELETE" : "Apagar", - "ACTION_DELETE_SESSIONS" : "Fechar sessões", - "ACTION_DOWNLOAD" : "Download", - "ACTION_LOGIN" : "Entrar", - "ACTION_LOGOUT" : "Sair", - "ACTION_MANAGE_CONNECTIONS" : "Conexões", - "ACTION_MANAGE_PREFERENCES" : "Preferências", - "ACTION_MANAGE_SETTINGS" : "Configurações", - "ACTION_MANAGE_SESSIONS" : "Sessões Ativas", - "ACTION_MANAGE_USERS" : "Usuários", - "ACTION_MANAGE_USER_GROUPS" : "Grupos", - "ACTION_NAVIGATE_BACK" : "Voltar", - "ACTION_NAVIGATE_HOME" : "Principal", - "ACTION_SAVE" : "Salvar", - "ACTION_SEARCH" : "Procurar", - "ACTION_SHARE" : "Compartilhar", - "ACTION_UPDATE_PASSWORD" : "Alterar senha", - "ACTION_VIEW_HISTORY" : "Histórico", - - "DIALOG_HEADER_ERROR" : "Erro", - - "ERROR_PAGE_UNAVAILABLE" : "Um erro ocorreu e esta ação não pode ser completada. Se o problema persistir, por favor contacte o administrador do sistema ou verifique os logs do sistema.", - "ERROR_PASSWORD_BLANK" : "Sua senha não pode ficar em branco.", - "ERROR_PASSWORD_MISMATCH" : "As senhas são diferentes.", - - "FIELD_HEADER_PASSWORD" : "Senha:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Repita a senha:", - - "FIELD_PLACEHOLDER_FILTER" : "Filtro", - - "FORMAT_DATE_TIME_PRECISE" : "dd/MM/yyyy HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Atualmente em uso por {USERS} {USERS, plural, one{usuário} other{usuários}}.", - - "TEXT_ANONYMOUS_USER" : "Anônimo", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{segundo} other{segundos}}} minute{{VALUE, plural, one{minuto} other{minutos}}} hour{{VALUE, plural, one{hora} other{horas}}} day{{VALUE, plural, one{dia} other{dias}}} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Limpar", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "Desconectar", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Reconectar", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_UPLOAD_FILES" : "Enviar Arquivos", - - "DIALOG_HEADER_CONNECTING" : "Conectando", - "DIALOG_HEADER_CONNECTION_ERROR" : "Erro na conexão", - "DIALOG_HEADER_DISCONNECTED" : "Desconectado", - - "ERROR_CLIENT_201" : "Essa conexão foi fechada porque o servidor está ocupado. Por favor aguarde alguns minutos e tente novamente.", - "ERROR_CLIENT_202" : "O Servidor Guacamole fechou a sessão porque a estação remota estava levando muito tempo para responder. Por favor tente novamente ou contate o administrador do sistema.", - "ERROR_CLIENT_203" : "A estação remota encontrou um erro e fechou a conexão. Por favor, tente novamente mais tarde ou contate o administrador do sistema.", - "ERROR_CLIENT_207" : "A estação remota não pode ser encontrada. Caso o problema persista, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", - "ERROR_CLIENT_208" : "A estação remota não está disponível no momento. Caso o problema persista, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", - "ERROR_CLIENT_209" : "A estação remota encerrou a conexão devido a conflitos com outra conexão. Por favor tente novamente mais tarde.", - "ERROR_CLIENT_20A" : "A estação remota encerrou a conexão pois a mesma parecia estar inativa. Caso isto seja inexperado ou indesejável, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", - "ERROR_CLIENT_20B" : "A estação remota encerrou a conexão forçadamente. Caso isto seja inexperado ou indesejável, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", - "ERROR_CLIENT_301" : "Erro de autenticação. Por favor reconecte e tente novamente.", - "ERROR_CLIENT_303" : "A estação remota negou o acesso a esta conexão. Se você precisa deste acesso, por favor peça ao administrador do sistema, ou verifique as configurações do sistema.", - "ERROR_CLIENT_308" : "O servidor do Guacamole encerrou a conexão porque não houve resposta do seu navegador por tempo suficiente para parecer desconectado. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente.", - "ERROR_CLIENT_31D" : "O servidor do Guacamole está negando acesso a esta conexão porque você esgotou o limite de uso de conexões simultâneas para um único usuário. Por favor, feche uma ou mais conexões e tente novamente.", - "ERROR_CLIENT_DEFAULT" : "Um erro interno ocorreu no servidor do Guacamole e a conexão foi finalizada. Se o problema persistir, por favor informe o administrador do sistema, ou verifique os logs do sistema.", - - "ERROR_TUNNEL_201" : "O servidor de Guacamole rejeitou essa tentativa de conexão porque há muitas conexões ativas. Por favor, aguarde alguns minutos e tente novamente.", - "ERROR_TUNNEL_202" : "A conexão foi encerrada porque o servidor está demorando muito par responder. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente ou contate o administrador do sistema.", - "ERROR_TUNNEL_203" : "O servidor encontrou um erro e encerrou a conexão. Por favor, tente novamente ou informe o administrador do sistema.", - "ERROR_TUNNEL_204" : "A conexão solicitada não existe. Por favor, verifique o nome da conexão e tente novamente.", - "ERROR_TUNNEL_205" : "Essa conexão está atualmente em uso e o acesso concorrente a ela não é permitido. Por favor, tente mais tarde.", - "ERROR_TUNNEL_207" : "O servidor de Guacamole não está acessível neste momento. Por favor, verifique a sua rede e tente novamente.", - "ERROR_TUNNEL_208" : "O servidor de Guacamole não está aceitando conexões. Por favor, verifique a sua rede e tente novamente.", - "ERROR_TUNNEL_301" : "Você não tem permissão para acessar essa conexão porque você não está logado. Por favor, logue-se e tente novamente.", - "ERROR_TUNNEL_303" : "Você não tem permissão para acessar essa conexão. Se você precisa do acesso, por favor solicite ao administrador do sistema a inclusão do seu usuário da lista de usuários permitidos, ou verifique as configurações do sistema.", - "ERROR_TUNNEL_308" : "O servidor do Guacamole encerrou a conexão porque não houve resposta do seu navegador por tempo suficiente para parecer desconectado. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente.", - "ERROR_TUNNEL_31D" : "O servidor do Guacamole está negando acesso a esta conexão porque você esgotou o limite de uso de conexões simultâneas para um único usuário. Por favor feche uma ou mais conexões e tente novamente.", - "ERROR_TUNNEL_DEFAULT" : "Um erro interno ocorreu no servidor do Guacamole e a conexão foi finalizada. Se o problema persistir, por favor informe o administrador do sistema, ou verifique os logs do sistema.", - - "ERROR_UPLOAD_100" : "A transferência de arquivos não é suportada ou não foi habilitada. Por favor contate o administrador do sistema ou verifique os logs do sistema", - "ERROR_UPLOAD_201" : "Muitos arquivos estão sendo transferidos ao mesmo tempo. Por favor aguarde que as transferências atuais terminem e tente novamente.", - "ERROR_UPLOAD_202" : "O arquivo não pode ser transferido porque o servidor remoto está levando muito tempo para responder. Por favor tente mais tarde ou contate administrador do sistema.", - "ERROR_UPLOAD_203" : "A estação remota encontrou erro durante a transferência. Por favort tente novamente ou contate administrador do sistema.", - "ERROR_UPLOAD_204" : "O destino da transferência de arquivo não existe. Por favor verifique se o destino existe e tente novamente.", - "ERROR_UPLOAD_205" : "O destino da transferência de arquivo está bloqueado. Por favor aguarde as tarefas em curso terminarem e tente noavmente.", - "ERROR_UPLOAD_301" : "Você não tem permissão para enviar este arquivo porque não está logado. Por favor logue-se e tente novamente.", - "ERROR_UPLOAD_303" : "Você não tem permissão para enviar este arquivo. Se já solicitou esta permisssão verifique as configurações de sistema, ou contate o administrador do sistema.", - "ERROR_UPLOAD_308" : "A transferência do arquivo está parada. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente.", - "ERROR_UPLOAD_31D" : "Muitos arquivos estão sendo transferidos ao mesmo tempo. Por favor aguarde que as transferências atuais terminem e tente novamente.", - "ERROR_UPLOAD_DEFAULT" : "Um erro interno ocorreu no servidor do Guacamole e a conexão foi finalizada. Se o problema persistir, por favor informe o administrador do sistema, ou verifique os logs do sistema.", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "Texto copiado/cortado dentro do Guacamole será mostrado aqui. Mudanças no text abaixo afetarão a área de transferência remota.", - "HELP_INPUT_METHOD_NONE" : "Nenhum método de entrada está sendo usado. A entrada do teclado é aceita a partir de um teclado físico conectado.", - "HELP_INPUT_METHOD_OSK" : "Mostrar e aceitar entrada de dados a partir do teclado virtual integrado do Guacamole. O teclado virtual possibilita digitar combinações de teclas que, de outra forma, seriam impossíveis (como Ctrl-Alt-Del).", - "HELP_INPUT_METHOD_TEXT" : "Permite digitação do texto e emulaçao dos eventos de teclado baseado no texto digitado. Isto é necessário para dispositivos como telefones celulares que não possuem teclado físico.", - "HELP_MOUSE_MODE" : "Determina como o mouse remoto se comportará em ralção aos toques.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Toque para clicar. O clique ocorre no local do toque.", - "HELP_MOUSE_MODE_RELATIVE" : "Arraste para mover o ponteiro do mouse e toque para clicar. O clique ocorre no local em que o mouse aponta.", - "HELP_SHARE_LINK" : "A conexão atual está sendo compartilhada e pode ser acessado com qualquer um que possuir o seguinte {LINKS, plural, one{link} other{links}}:", - - "INFO_CONNECTION_SHARED" : "Está conexão agora está compartilhada.", - "INFO_NO_FILE_TRANSFERS" : "Nenhuma transferência de arquivo.", - - "NAME_INPUT_METHOD_NONE" : "Nenhum", - "NAME_INPUT_METHOD_OSK" : "Teclado virtual", - "NAME_INPUT_METHOD_TEXT" : "Entrada de texto", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "Tela de toque", - "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", - - "SECTION_HEADER_CLIPBOARD" : "Área de transferência", - "SECTION_HEADER_DEVICES" : "Aparelhos", - "SECTION_HEADER_DISPLAY" : "Tela", - "SECTION_HEADER_FILE_TRANSFERS" : "Transferências de Arquivos", - "SECTION_HEADER_INPUT_METHOD" : "Método de entrada", - "SECTION_HEADER_MOUSE_MODE" : "Modo de emulação do mouse", - - "TEXT_ZOOM_AUTO_FIT" : "Ajustar automaticamente à janela do navegador", - "TEXT_CLIENT_STATUS_IDLE" : "Ocioso.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Conectando ao Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Você foi desconectado.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "A conexão de rede ao servidor do Guacamole parece instável.", - "TEXT_CLIENT_STATUS_WAITING" : "Conectado ao Guacamole. Aguardando resposta...", - "TEXT_RECONNECT_COUNTDOWN" : "Reconectando em {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Ocultar", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Mostrar", - - "FIELD_HEADER_BACKGROUND" : "Fundo", - "FIELD_HEADER_FOREGROUND" : "Primeiro plano", - - "FIELD_OPTION_CUSTOM" : "Customizar...", - - "SECTION_HEADER_DETAILS" : "Detalhes:" - - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "Default (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "DD/MM/YYYY", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Clique para mostrar a senha", - "HELP_HIDE_PASSWORD" : "Clique para ocultar a senha" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Nenhuma conexão recente.", - - "PASSWORD_CHANGED" : "Senha alterada.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Todas as Conexões", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Conexões Recentes" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "Anônimo" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Autenticação Inválida", - - "FIELD_HEADER_USERNAME" : "Usuário", - "FIELD_HEADER_PASSWORD" : "Senha" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Remover conexão", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Localização:", - "FIELD_HEADER_NAME" : "Nome:", - "FIELD_HEADER_PROTOCOL" : "Protocolo:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Ativa agora", - "INFO_CONNECTION_NOT_USED" : "Essa conexão ainda não foi utilizada.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Editar Conexão", - "SECTION_HEADER_HISTORY" : "Histórico de Uso", - "SECTION_HEADER_PARAMETERS" : "Parâmetros", - - "TABLE_HEADER_HISTORY_USERNAME" : "Usuário", - "TABLE_HEADER_HISTORY_START" : "Hora de Início", - "TABLE_HEADER_HISTORY_DURATION" : "Duração", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Estação Remota", - - "TEXT_CONFIRM_DELETE" : "Conexões não podem ser restauradas depois de removidas. Tem certeza que deseja remover esta conexão?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Connection Group", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Localização:", - "FIELD_HEADER_NAME" : "Nome:", - "FIELD_HEADER_TYPE" : "Tipo:", - - "NAME_TYPE_BALANCING" : "Balanceamento", - "NAME_TYPE_ORGANIZATIONAL" : "Organização", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Editar Grupo de Conexão", - - "TEXT_CONFIRM_DELETE" : "Grupos de conexão não podem ser restaurados depois de removidos. Tem certeza que deseja remover este grupo de conexão?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Remover Perfil de Compartilhamento", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Nome:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Conexão Primária:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Editar Perfil de Compartilhamento", - "SECTION_HEADER_PARAMETERS" : "Parâmetros", - - "TEXT_CONFIRM_DELETE" : "Perfis de compartilhamento não podem ser restaurados depois de removidos. Tem certeza que deseja remover este perfil de compartilhamento?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Remover Usuário", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrar o sistema:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Alterar a própria senha:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Criar novos usuários:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Criar novos grupos de usuário:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Criar novas conexões:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Criar novos grupos de conexão:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Criar novos perfis de compartilhamento:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "Login desativado:", - "FIELD_HEADER_USERNAME" : "Usuário:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Este usuário não pertence a nenhum grupo no momento. Expanda esta seção para adicionar grupos.", - - "INFO_READ_ONLY" : "Desculpe, mas esta conta de usuário não pode ser editada.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "Nenhum grupo disponível.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Todas as Conexões", - "SECTION_HEADER_CONNECTIONS" : "Conexões", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Conexões Atuais", - "SECTION_HEADER_EDIT_USER" : "Editar Usuário", - "SECTION_HEADER_PERMISSIONS" : "Permissões", - "SECTION_HEADER_USER_GROUPS" : "Grupos", - - "TEXT_CONFIRM_DELETE" : "Usuários não podem ser restaurados depois de removidos. Tem certeza que deseja remover este usuário?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Remover Grupo", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "Desativado:", - "FIELD_HEADER_USER_GROUP_NAME" : "Nome do grupo:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Este grupo não pertence a nenhum outro grupo atualmente. Expanda esta seção para adicionar grupos.", - "HELP_NO_MEMBER_USER_GROUPS" : "Este grupo não contém nenhum outro grupo atualmente. Expanda esta seção para adicionar grupos.", - "HELP_NO_MEMBER_USERS" : "Este grupo não contém nenhum usuário atualmente. Expanda esta seção para adicionar usuários.", - - "INFO_READ_ONLY" : "Desculpe, mas este grupo não pode ser editado.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "Nenhum usuário disponível.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Editar Grupo", - "SECTION_HEADER_MEMBER_USERS" : "Usuários Membros", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Grupos Membros", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Grupos Pai", - - "TEXT_CONFIRM_DELETE" : "Grupos não podem ser restaurados depois de removidos. Tem certeza que deseja remover este grupos?" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Tecla de Backspace envia:", - "FIELD_HEADER_CA_CERT" : "Certificar autoridade certificadora:", - "FIELD_HEADER_CLIENT_CERT" : "Certificado do client:", - "FIELD_HEADER_CLIENT_KEY" : "Chave do cliente:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de cor:", - "FIELD_HEADER_CONTAINER" : "Nome do container:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Criar caminho de transcrição automaticamente:", - "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar do terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", - "FIELD_HEADER_FONT_NAME" : "Nome da fonte:", - "FIELD_HEADER_FONT_SIZE" : "Tamanho da fonte:", - "FIELD_HEADER_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado do servidor:", - "FIELD_HEADER_NAMESPACE" : "Namespace:", - "FIELD_HEADER_POD" : "Nome do pod:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", - "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", - "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", - "FIELD_HEADER_SCROLLBACK" : "Tamanho máximo de retrocesso:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nome da transcrição:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Caminho da transcrição:", - "FIELD_HEADER_USE_SSL" : "Usar SSL/TLS", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Preto sobre branco", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Cinza sobre preto", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre preto", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Branco sobre preto", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticação", - "SECTION_HEADER_BEHAVIOR" : "Comportamento do terminal", - "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", - "SECTION_HEADER_CONTAINER" : "Container", - "SECTION_HEADER_DISPLAY" : "Tela", - "SECTION_HEADER_RECORDING" : "Gravação da Tela", - "SECTION_HEADER_TYPESCRIPT" : "Transcrição (Gravação do Texto da Sessão)", - "SECTION_HEADER_NETWORK" : "Rede" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Nome do cliente:", - "FIELD_HEADER_COLOR_DEPTH" : "Profundidade de cores:", - "FIELD_HEADER_CONSOLE" : "Console de administração:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Suportar audio no console:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Criar unidade automaticamente:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", - "FIELD_HEADER_DISABLE_AUDIO" : "Desabilitar áudio:", - "FIELD_HEADER_DISABLE_AUTH" : "Desabilitar autenticação:", - "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar da estação remota:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", - "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", - "FIELD_HEADER_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", - "FIELD_HEADER_DOMAIN" : "Domínio:", - "FIELD_HEADER_DPI" : "Resolução (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Nome da unidade:", - "FIELD_HEADER_DRIVE_PATH" : "Caminho da unidade:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Habilitar entrada de áudio (microfone):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Habilitar composição do desktop (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Habilitar unidade:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Habilitar suavização de fonte (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Habilitar arrastar a janela inteira:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Habilitar animação de menus:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Desabilitar cache de bitmap:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Desabilitar cache off-screen:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Desabilitar cache de glyph:", - "FIELD_HEADER_ENABLE_PRINTING" : "Habilitar impressão:", - "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Habilitar tema:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Habilitar papel de parede:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Domínio:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Senha:", - "FIELD_HEADER_GATEWAY_PORT" : "Porta:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Usuário:", - "FIELD_HEADER_HEIGHT" : "Altura:", - "FIELD_HEADER_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado do servidor:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Programa inicial:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Info/cookie de balanceamento de carga:", - "FIELD_HEADER_PASSWORD" : "Senha:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_PRINTER_NAME" : "Nome da impressora redirecionada:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "BLOB (VM ID) de pré-conexão:", - "FIELD_HEADER_PRECONNECTION_ID" : "ID de origem do RDP:", - "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", - "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", - "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", - "FIELD_HEADER_RESIZE_METHOD" : "Método de redimensionamento:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Parâmetros:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Diretório de trabalho:", - "FIELD_HEADER_REMOTE_APP" : "Programa:", - "FIELD_HEADER_SECURITY" : "Modo de segurança:", - "FIELD_HEADER_SERVER_LAYOUT" : "Layout do teclado:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Diretório padrão de envios:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Chave pública (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo de keepalive do SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase-senha:", - "FIELD_HEADER_SFTP_PASSWORD" : "Senha:", - "FIELD_HEADER_SFTP_PORT" : "Porta:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Chave privada:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Diretório raíz da escolha de arquivos:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", - "FIELD_HEADER_SFTP_USERNAME" : "Usuário:", - "FIELD_HEADER_STATIC_CHANNELS" : "Nomes dos canais estáticoss:", - "FIELD_HEADER_TIMEZONE" : "Fuso Horário:", - "FIELD_HEADER_USERNAME" : "Usuário:", - "FIELD_HEADER_WIDTH" : "Largura:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera da inicialização do host:", - - - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Atualização de Tela\" canal virtual (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconectar", - - "FIELD_OPTION_SECURITY_ANY" : "Qualquer Um", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA (Autenticação a Nível de Rede)", - "FIELD_OPTION_SECURITY_RDP" : "Encriptação RDP", - "FIELD_OPTION_SECURITY_TLS" : "Encriptação TLS", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Tcheco (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Dinamarquês (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Alemão-Suiço (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Alemão (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Inglês UK (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Inglês US (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Espanhol (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "América Latina (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Francês Belga (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Francês Suiço (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francês (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Húngaro (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiano (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonês (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polonês (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Português Brasileiro (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Português (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Sueco (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turco-Q (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticação", - "SECTION_HEADER_BASIC_PARAMETERS" : "Configuração básica", - "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirecionamento de dispositivo", - "SECTION_HEADER_DISPLAY" : "Tela", - "SECTION_HEADER_GATEWAY" : "Gateway de Desktop Remoto", - "SECTION_HEADER_LOAD_BALANCING" : "Balanceamento de Carga", - "SECTION_HEADER_NETWORK" : "Rede", - "SECTION_HEADER_PERFORMANCE" : "Performance", - "SECTION_HEADER_PRECONNECTION_PDU" : "Pré-conexão PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "Gravação de Tela", - "SECTION_HEADER_REMOTEAPP" : "App Remoto", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Tecla de Backspace envia:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de cor:", - "FIELD_HEADER_COMMAND" : "Executar comando:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Criar caminho de transcrição automaticamente:", - "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar do terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", - "FIELD_HEADER_FONT_NAME" : "Nome da fonte:", - "FIELD_HEADER_FONT_SIZE" : "Tamanho da fonte:", - "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", - "FIELD_HEADER_HOST_KEY" : "Chave pública (Base64):", - "FIELD_HEADER_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_LOCALE" : "Idioma/Locale ($LANG):", - "FIELD_HEADER_USERNAME" : "Usuário:", - "FIELD_HEADER_PASSWORD" : "Senha:", - "FIELD_HEADER_PASSPHRASE" : "Frase-senha:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_PRIVATE_KEY" : "Chave privada:", - "FIELD_HEADER_SCROLLBACK" : "Tamanho máximo de retrocesso:", - "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", - "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", - "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Intervalo de keepalive do servidor:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Diretório raíz de escolha de arquivo:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", - "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal:", - "FIELD_HEADER_TIMEZONE" : "Fuso Horário ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nome da Transcrição:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Caminho da Transcrição:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera de inicialização do host:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Preto sobre branco", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Cinza sobre preto", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre preto", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Branco sobre preto", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticação", - "SECTION_HEADER_BEHAVIOR" : "Comportamento do terminal", - "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", - "SECTION_HEADER_DISPLAY" : "Tela", - "SECTION_HEADER_NETWORK" : "Rede", - "SECTION_HEADER_RECORDING" : "Gravação de Tela", - "SECTION_HEADER_SESSION" : "Sessão / Ambiente", - "SECTION_HEADER_TYPESCRIPT" : "Transcrição (Gravação do Texto da Sessão)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Tecla de Backspace envia:", - "FIELD_HEADER_COLOR_SCHEME" : "Esquema de cor:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Criar caminho de transcrição automaticamente:", - "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar do terminal:", - "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", - "FIELD_HEADER_FONT_NAME" : "Nome da fonte:", - "FIELD_HEADER_FONT_SIZE" : "Tamanho da fonte:", - "FIELD_HEADER_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expressão regular para falha de login:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expressão regular para login realizado com sucesso:", - "FIELD_HEADER_USERNAME" : "Usuário:", - "FIELD_HEADER_USERNAME_REGEX" : "Expressão regular de usuário:", - "FIELD_HEADER_PASSWORD" : "Senha:", - "FIELD_HEADER_PASSWORD_REGEX" : "Expressão regular de senha:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", - "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", - "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", - "FIELD_HEADER_SCROLLBACK" : "Tamanho máximo de retrocesso:", - "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal: ", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Nome da transcrição:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Caminho da transcrição:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera de inicialização do host:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Preto sobre branco", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Cinza sobre preto", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre preto", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Branco sobre preto", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "Autenticação", - "SECTION_HEADER_BEHAVIOR" : "Comportamento do terminal", - "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", - "SECTION_HEADER_DISPLAY" : "Tela", - "SECTION_HEADER_RECORDING" : "Gravação de Tela", - "SECTION_HEADER_TYPESCRIPT" : "Transcrição (Gravação do Texto da Sessão)", - "SECTION_HEADER_NETWORK" : "Rede", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Nome do servidor de áudio:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codificação:", - "FIELD_HEADER_COLOR_DEPTH" : "Profundidade de cores:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", - "FIELD_HEADER_CURSOR" : "Cursor:", - "FIELD_HEADER_DEST_HOST" : "Host de destino:", - "FIELD_HEADER_DEST_PORT" : "Porta de destino:", - "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar da estação remota:", - "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", - "FIELD_HEADER_ENABLE_AUDIO" : "Habilitar áudio:", - "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", - "FIELD_HEADER_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_USERNAME" : "Usuário:", - "FIELD_HEADER_PASSWORD" : "Senha:", - "FIELD_HEADER_PORT" : "Porta:", - "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Excluir eventos chave:", - "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", - "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Diretório padrão de envio:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Chave pública (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Nome do host:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo de keepalive do SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase-senha:", - "FIELD_HEADER_SFTP_PASSWORD" : "Senha:", - "FIELD_HEADER_SFTP_PORT" : "Porta:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Chave privada:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Diretório raíz da escolha de arquivos:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", - "FIELD_HEADER_SFTP_USERNAME" : "Usuário:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Trocar componentes vermelho/azul:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", - "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", - "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", - "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera de inicialização do host:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "Local", - "FIELD_OPTION_CURSOR_REMOTE" : "Remoto", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "Áudio", - "SECTION_HEADER_AUTHENTICATION" : "Autenticação", - "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", - "SECTION_HEADER_DISPLAY" : "Tela", - "SECTION_HEADER_NETWORK" : "Rede", - "SECTION_HEADER_RECORDING" : "Gravação de Tela", - "SECTION_HEADER_REPEATER" : "Repetidor VNC", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Configurações" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "history.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "Os registros históricos das conexões são mostrados aqui e podem ser reordenadas clicando nos títulos das colunas. Para buscar por registros específicos, digite algo e clique em \"Procurar\". Apenas registros que correspondem ao filtro fornecido serão listados.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Nenhum registro correspondente", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome da conexão", - "TABLE_HEADER_SESSION_DURATION" : "Duração", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Host remoto", - "TABLE_HEADER_SESSION_STARTDATE" : "Horário de início", - "TABLE_HEADER_SESSION_USERNAME" : "Usuário", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "Nova conexão", - "ACTION_NEW_CONNECTION_GROUP" : "Novo grupo", - "ACTION_NEW_SHARING_PROFILE" : "Novo Perfil Compartilhado", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Clique na conexão abaixo para gerenciar a conexão. Dependendo do seu nível de acesso, conexões podem ser adicionadas e removidas, bem como suas propriedades (protocolo, nome do host, porta, etc) podem ser alteradas.", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Conexões" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Idioma:", - "FIELD_HEADER_PASSWORD" : "Senha:", - "FIELD_HEADER_PASSWORD_OLD" : "Senha Atual:", - "FIELD_HEADER_PASSWORD_NEW" : "Nova Senha:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirme a Nova Senha:", - "FIELD_HEADER_TIMEZONE" : "Fuso Horário:", - "FIELD_HEADER_USERNAME" : "Usuário:", - - "HELP_DEFAULT_INPUT_METHOD" : "O método de entrada padrão determina como os eventos do teclado serão recebidos pelo Guacamole. Mudar este parâmetro pode ser necessário para utilização de um dispositivo móvel, ou ao digitar através de um IME (método de entrada). Esta configuração pode ser substituída em cada conexão através do menu do Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "O modo de emulação padrão do mouse determina como o mouse remoto vai se comportar em novas conexões em relação aos toques. Esta configuração pode ser substituída em cada conexão através do menu do Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "As opções abaixo estão relacionadas ao idioma e localização do usuário e terão impacto sobre como várias partes da interface são exibidas", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Se você deseja alterar a sua senha, informe a senha atual e a nova senha abaixo, e clique em \"Alterar Senha\". A mudança terá efeito imediato.", - - "INFO_PASSWORD_CHANGED" : "Senha alterada.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Método de Entrada Padrão", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Modo de Emulação de Mouse Padrão", - "SECTION_HEADER_UPDATE_PASSWORD" : "Alterar Senha" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Novo Usuário", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Clique em um usuário abaixo para gerenciá-lo. Dependendo do seu nível de acesso, usuários podem ser adicionados e removidos, e suas senhas podem ser alteradas.", - - "SECTION_HEADER_USERS" : "Usuários", - - "TABLE_HEADER_FULL_NAME" : "Nome completo", - "TABLE_HEADER_LAST_ACTIVE" : "Última atividade", - "TABLE_HEADER_ORGANIZATION" : "Organização", - "TABLE_HEADER_USERNAME" : "Usuário" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "Novo Grupo", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Clique em um grupo abaixo para gerenciá-lo. Dependendo do seu nível de acesso, grupos podem ser adicionados ou removidos, e seus usuários e grupos membros podem ser modificados.", - - "SECTION_HEADER_USER_GROUPS" : "Grupos", - - "TABLE_HEADER_USER_GROUP_NAME" : "Nome do Grupo" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Encerrar Sessões", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Encerrar Sessões", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Esta página será preenchida com conexões ativas no momento. As conexões listadas e a capacidade de encerrar estas conexões dependem do seu nível de acesso. Se você deseja encerrar uma ou mais sessões, marque a caixa ao lado destas sessões e clique em \"Encerrar Sessões\". Encerrar uma sessão desconectará imediatamente o usuário da conexão associada.", - - "INFO_NO_SESSIONS" : "Nenhuma sessão ativa", - - "SECTION_HEADER_SESSIONS" : "Sessões Ativas", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome da conexão", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Host remoto", - "TABLE_HEADER_SESSION_STARTDATE" : "Ativo desde", - "TABLE_HEADER_SESSION_USERNAME" : "Usuário", - - "TEXT_CONFIRM_DELETE" : "Você tem certeza que quer encerrar as sessões selecionadas? Usuários que estão utilizando estas sessões serão imediatamente desconectados." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Endereço de E-mail:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Nome completo:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Organização:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Função:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/ru.json b/guacamole/src/main/frontend/src/translations/ru.json deleted file mode 100644 index a086f73390..0000000000 --- a/guacamole/src/main/frontend/src/translations/ru.json +++ /dev/null @@ -1,844 +0,0 @@ -{ - - "NAME" : "Русский", - - "APP" : { - - "ACTION_ACKNOWLEDGE" : "ОК", - "ACTION_CANCEL" : "Отмена", - "ACTION_CLONE" : "Клонировать", - "ACTION_CONTINUE" : "Продолжить", - "ACTION_DELETE" : "Удалить", - "ACTION_DELETE_SESSIONS" : "Завершить сессии", - "ACTION_DOWNLOAD" : "Скачать", - "ACTION_LOGIN" : "Вход", - "ACTION_LOGOUT" : "Выход", - "ACTION_MANAGE_CONNECTIONS" : "Подключения", - "ACTION_MANAGE_PREFERENCES" : "Настройки", - "ACTION_MANAGE_SETTINGS" : "Опции", - "ACTION_MANAGE_SESSIONS" : "Активные сессии", - "ACTION_MANAGE_USERS" : "Пользователи", - "ACTION_MANAGE_USER_GROUPS" : "Группы", - "ACTION_NAVIGATE_BACK" : "Назад", - "ACTION_NAVIGATE_HOME" : "Главная", - "ACTION_SAVE" : "Сохранить", - "ACTION_SEARCH" : "Искать", - "ACTION_SHARE" : "Расшарить", - "ACTION_UPDATE_PASSWORD" : "Обновить пароль", - "ACTION_VIEW_HISTORY" : "История", - - "DIALOG_HEADER_ERROR" : "Ошибка", - - "ERROR_PAGE_UNAVAILABLE" : "Произошла ошибка, действие не может быть завершено. Если проблема будет повторяться, обратитесь к системному администратору или проверьте системные журналы.", - "ERROR_PASSWORD_BLANK" : "Пароль не может быть пустым.", - "ERROR_PASSWORD_MISMATCH" : "Указанные пароли не совпадают.", - - "FIELD_HEADER_PASSWORD" : "Пароль:", - "FIELD_HEADER_PASSWORD_AGAIN" : "Повтор пароля:", - - "FIELD_PLACEHOLDER_FILTER" : "Фильтр", - - "FORMAT_DATE_TIME_PRECISE" : "dd.MM.yyyy HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "Сейчас в системе {USERS} {USERS, plural, one{пользователь} few{пользователя} many{пользователей} other{пользователя}}.", - - "TEXT_ANONYMOUS_USER" : "Аноним", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{секунда} few{секуны} many{секунд} other{секуны}}} minute{{VALUE, plural, one{минута} few{минуты} many{минут} other{минуты}}} hour{{VALUE, plural, one{час} few{часа} many{часов} other{часа}}} day{{VALUE, plural, one{день} few{дня} many{дней} other{дня}}} other{}}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Очистить", - "ACTION_DISCONNECT" : "Отключиться", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "Переподключиться", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_UPLOAD_FILES" : "Загрузка файлов", - - "DIALOG_HEADER_CONNECTING" : "Подключение", - "DIALOG_HEADER_CONNECTION_ERROR" : "Ошибка подключения", - "DIALOG_HEADER_DISCONNECTED" : "Отключено", - - "ERROR_CLIENT_201" : "Соединение было закрыто, так как сервер перегружен. Пожалуйста, попробуйте повторить попытку позднее.", - "ERROR_CLIENT_202" : "Сервер Guacamole закрыл соединение, так как удаленный рабочий стол долго не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - "ERROR_CLIENT_203" : "На сервере удаленных рабочих столов произошла ошибка и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - "ERROR_CLIENT_207" : "Сервер удаленных рабочих столов недосягаем. Если проблема сохранится, свяжитесь с системным администратором или проверьте логи.", - "ERROR_CLIENT_208" : "Сервер удаленных рабочих столов недоступен. Если проблема сохранится, свяжитесь с системным администратором или проверьте логи.", - "ERROR_CLIENT_209" : "Сервер удаленных рабочих столов закрыл соединение, так как оно конфликтует с другим соединением. Пожалуйста, попробуйте повторить попытку позднее.", - "ERROR_CLIENT_20A" : "Сервер удаленных рабочих столов закрыл соединение, так как оно долгое время было неактивно. Если это нежелательное поведение, обратитесь к системному администратору или проверьте настройки.", - "ERROR_CLIENT_20B" : "Сервер удаленных рабочих столов закрыл соединение принудительно. Если это нежелательное поведение, обратитесь к системному администратору или проверьте настройки.", - "ERROR_CLIENT_301" : "Не удалось выполнить вход. Пожалуйста, переподключитесь и повторите попытку.", - "ERROR_CLIENT_303" : "Сервер удаленных рабочих столов запретил доступ к этому соединению. Для получения доступа, пожалуйста, обратитесь к администратору.", - "ERROR_CLIENT_308" : "Сервер Guacamole закрыл соединение, так как браузер не ответил в течение отведенного времени. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", - "ERROR_CLIENT_31D" : "Сервер Guacamole отклонил доступ к соединению, так как вы превысили максимальное количество одновременных подключений. Пожалуйста, закройте ненужные соединения и повторите попытку.", - "ERROR_CLIENT_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - - "ERROR_TUNNEL_201" : "Сервер Guacamole отклонил соединение, так как уже открыто слишком много соединений. Пожалуйста, попробуйте повторить попытку позднее.", - "ERROR_TUNNEL_202" : "Соединение было закрыто, так как сервер долго не отвечает. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", - "ERROR_TUNNEL_203" : "На сервере произошла ошибка и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - "ERROR_TUNNEL_204" : "Соединение не существует. Проверьте, пожалуйста, название соединения.", - "ERROR_TUNNEL_205" : "Соединение в настоящий момент занято и доступ к этому соединению не разрешен. Пожалуйста, попробуйте повторить попытку позднее.", - "ERROR_TUNNEL_207" : "Сервер Guacamole на данный момент недоступен. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", - "ERROR_TUNNEL_208" : "Сервер Guacamole не принимает соединения. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", - "ERROR_TUNNEL_301" : "У вас нет разрешения для доступа к этому соединению, так как вы не выполнили вход. Пожалуйста, выполните вход и повторите попытку.", - "ERROR_TUNNEL_303" : "У вас нет разрешения для доступа к этому соединению. Для получения доступа, пожалуйста, обратитесь к администратору.", - "ERROR_TUNNEL_308" : "Сервер Guacamole закрыл соединение, так как браузер не ответил в течение отведенного времени. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", - "ERROR_TUNNEL_31D" : "Сервер Guacamole отклонил доступ к соединению, так как вы превысили максимальное количество одновременных подключений. Пожалуйста, закройте несколько установленных соединений и повторите попытку.", - "ERROR_TUNNEL_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - - "ERROR_UPLOAD_100" : "Передача файлов либо не поддерживается, либо выключена. Пожалуйста, обратитесь к администратору или проверьте логи.", - "ERROR_UPLOAD_201" : "Слишком много задач передачи файлов уже активно. Подождите завершения текущих задач и повторите попытку снова.", - "ERROR_UPLOAD_202" : "Файл не может быть передан, так как удаленный рабочий стол не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - "ERROR_UPLOAD_203" : "Произошла ошибка при передаче файла. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - "ERROR_UPLOAD_204" : "Место назначения для передаваемого файла не существует. Пожалуйста, проверьте правильность указания места назначения и повторите попытку снова.", - "ERROR_UPLOAD_205" : "Место назначения для передаваемого файла заблокировано. Пожалуйста, дождитесь завершения других передач и повторите попытку снова.", - "ERROR_UPLOAD_301" : "У вас нет разрешения на загрузку файла, так как вы не выполнили вход. Пожалуйста, выполните вход и повторите попытку передачи файла.", - "ERROR_UPLOAD_303" : "У вас нет разрешения на загрузку файла. Для получения разрешения проверьте настройки или обратитесь к администратору.", - "ERROR_UPLOAD_308" : "Передача файла зависла. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", - "ERROR_UPLOAD_31D" : "Слишком много файлов уже передается в настоящий момент. Подождите завершения текущих передач и повторите попытку снова.", - "ERROR_UPLOAD_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", - - "HELP_CLIPBOARD" : "Текст, скопированный или вырезанный внутри сеанса, появится в этом поле. Изменение текста в этом поле также отобразится в буфере обмена удаленного рабочего стола.", - "HELP_INPUT_METHOD_NONE" : "Никакой метод ввода не используется. Ввод разрешен только для физической клавиатуры.", - "HELP_INPUT_METHOD_OSK" : "Отображать и принимать ввод со встроенной экранной клавиатуры. Экранная клавиатура позволяет вводить любые комбинации, недоступные в других режимах (например Alt-Ctrl-Del).", - "HELP_INPUT_METHOD_TEXT" : "Разрешить ввод текста, эмулировать события клавиатуры в зависимости от нажатых клавиш. Это необходимо для устройств без физической клавиатуры (смартфоны, планшеты).", - "HELP_MOUSE_MODE" : "Определяет поведение курсора мыши при прикосновении.", - "HELP_MOUSE_MODE_ABSOLUTE" : "Прикоснитесь, чтобы сделать клик. Клик происходит в точке прикосновения к экрану.", - "HELP_MOUSE_MODE_RELATIVE" : "Потяните, чтобы перемещать курсор. Прикоснитесь, чтобы сделать клик. Клик происходит в точке нахождения курсора.", - "HELP_SHARE_LINK" : "Это соединение расшарено и доступно всем по следующ{LINKS, plural, one{ей ссылке} other{им ссылкам}}:", - - "INFO_CONNECTION_SHARED" : "Это соединение теперь расшарено.", - "INFO_NO_FILE_TRANSFERS" : "Нет загрузок.", - - "NAME_INPUT_METHOD_NONE" : "Нет", - "NAME_INPUT_METHOD_OSK" : "Экранная клавиатура", - "NAME_INPUT_METHOD_TEXT" : "Ввод текста", - "NAME_MOUSE_MODE_ABSOLUTE" : "Тачскрин", - "NAME_MOUSE_MODE_RELATIVE" : "Тачпад", - - "SECTION_HEADER_CLIPBOARD" : "Буфер обмена", - "SECTION_HEADER_DEVICES" : "Устройства", - "SECTION_HEADER_DISPLAY" : "Экран", - "SECTION_HEADER_FILE_TRANSFERS" : "Загрузки файлов", - "SECTION_HEADER_INPUT_METHOD" : "Метод ввода", - "SECTION_HEADER_MOUSE_MODE" : "Режим эмуляции мыши", - - "TEXT_ZOOM_AUTO_FIT" : "Автоматически умещать в браузере", - "TEXT_CLIENT_STATUS_IDLE" : "Бездействие.", - "TEXT_CLIENT_STATUS_CONNECTING" : "Подключение к Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "Вы были отключены.", - "TEXT_CLIENT_STATUS_UNSTABLE" : "Сетевое соединение с сервером Guacamole нестабильно.", - "TEXT_CLIENT_STATUS_WAITING" : "Подключено к Guacamole. Ожидание ответа...", - "TEXT_RECONNECT_COUNTDOWN" : "Переподключение через {REMAINING} {REMAINING, plural, one{секунду} few{секунды} many{секунд} other{секунды}}...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/ru-ru-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "Спрятать", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "Показать", - - "FIELD_HEADER_BACKGROUND" : "Цвет фона", - "FIELD_HEADER_FOREGROUND" : "Основной цвет", - - "FIELD_OPTION_CUSTOM" : "Выбрать...", - - "SECTION_HEADER_DETAILS" : "Подробно:" - - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "По умолчанию (XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "DD.MM.YYYY", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "Нажмите, чтобы показать пароль", - "HELP_HIDE_PASSWORD" : "Нажмите, чтобы спрятать пароль" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "Нет недавних подключений.", - - "PASSWORD_CHANGED" : "Пароль был изменен.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Все подключения", - "SECTION_HEADER_RECENT_CONNECTIONS" : "Недавние подключения" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "@:APP.TEXT_ANONYMOUS_USER" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "Неверные данные для входа", - - "FIELD_HEADER_USERNAME" : "Имя пользователя", - "FIELD_HEADER_PASSWORD" : "Пароль" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить подключение", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Размещение:", - "FIELD_HEADER_NAME" : "Название:", - "FIELD_HEADER_PROTOCOL" : "Протокол:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "Активно", - "INFO_CONNECTION_NOT_USED" : "Это подключение еще не использовалось.", - - "SECTION_HEADER_EDIT_CONNECTION" : "Редактирование подключения", - "SECTION_HEADER_HISTORY" : "История использования", - "SECTION_HEADER_PARAMETERS" : "Настройки", - - "TABLE_HEADER_HISTORY_USERNAME" : "Имя пользователя", - "TABLE_HEADER_HISTORY_START" : "Время начала", - "TABLE_HEADER_HISTORY_DURATION" : "Продолжительность", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "Удаленный узел", - - "TEXT_CONFIRM_DELETE" : "Подключения не могут быть восстановлены после удаления. Вы уверены, что хотите удалить подключение?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить группу подключений", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "Размещение:", - "FIELD_HEADER_NAME" : "Название:", - "FIELD_HEADER_TYPE" : "Тип:", - - "NAME_TYPE_BALANCING" : "Балансирующая", - "NAME_TYPE_ORGANIZATIONAL" : "Структурная", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Редактирование группы подключений", - - "TEXT_CONFIRM_DELETE" : "Группы подключений не могут быть восстановлены после удаления. Вы уверены, что хотите удалить группу подключений?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить профиль расшаривания", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "Название:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "Изначальное подключение:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Редактирование профиля расшаривания", - "SECTION_HEADER_PARAMETERS" : "Настройки", - - "TEXT_CONFIRM_DELETE" : "Профили расшаривания не могут быть восстановлены после удаления. Вы уверены, что хотите удалить профиль расшаривания?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить пользователя", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "Администрирование системы:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Изменение собственного пароля:", - "FIELD_HEADER_CREATE_NEW_USERS" : "Создание нового пользователя:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Создание новой группы пользователей:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Создание нового подключения:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Создание новой группы подключений:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Создание нового профиля расшаривания:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "Аккаунт отключен:", - "FIELD_HEADER_USERNAME" : "Имя пользователя:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Этот пользователь еще не сопоставлен ни с одной группой. Раскройте эту секцию для добавления групп.", - - "INFO_READ_ONLY" : "Извините, этот пользователь не может быть изменен.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "Нет доступных групп.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "Все подключения", - "SECTION_HEADER_CONNECTIONS" : "Подключения", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "Текущие подключения", - "SECTION_HEADER_EDIT_USER" : "Редактирование пользователя", - "SECTION_HEADER_PERMISSIONS" : "Разрешения", - "SECTION_HEADER_USER_GROUPS" : "Группы", - - "TEXT_CONFIRM_DELETE" : "Пользователи не могут быть восстановлены после удаления. Вы уверены, что хотите удалить пользователя?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить группу", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "Группа отключена:", - "FIELD_HEADER_USER_GROUP_NAME" : "Название:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "Эта группа еще не сопоставлена ни с одной группой. Раскройте эту секцию для добавления групп.", - "HELP_NO_MEMBER_USER_GROUPS" : "Эта группа еще не содержит ни одной группы. Раскройте эту секцию для добавления групп.", - "HELP_NO_MEMBER_USERS" : "Эта группа еще не содержит ни одного пользователя. Раскройте эту секцию для добавления пользователей.", - - "INFO_READ_ONLY" : "Извините, эта группа не может быть изменена.", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "Нет доступных пользователей.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "Редактирование группы", - "SECTION_HEADER_MEMBER_USERS" : "Пользователи в группе", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "Дочерние группы", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "Родительские группы", - - "TEXT_CONFIRM_DELETE" : "Группы не могут быть восстановлены после удаления. Вы уверены, что хотите удалить группу?" - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "Клавиша Backspace посылает:", - "FIELD_HEADER_CA_CERT" : "Сертификат центра сертификации (CA):", - "FIELD_HEADER_CLIENT_CERT" : "Сертификат клиента:", - "FIELD_HEADER_CLIENT_KEY" : "Ключ клиента:", - "FIELD_HEADER_COLOR_SCHEME" : "Цветовая схема:", - "FIELD_HEADER_CONTAINER" : "Название контейнера:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Автоматически создавать путь typescript:", - "FIELD_HEADER_FONT_NAME" : "Шрифт:", - "FIELD_HEADER_FONT_SIZE" : "Размер шрифта:", - "FIELD_HEADER_HOSTNAME" : "Сервер:", - "FIELD_HEADER_IGNORE_CERT" : "Игнорировать сертификат сервера:", - "FIELD_HEADER_NAMESPACE" : "Пространство имен:", - "FIELD_HEADER_POD" : "Название пода:", - "FIELD_HEADER_PORT" : "Порт:", - "FIELD_HEADER_READ_ONLY" : "Только просмотр:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", - "FIELD_HEADER_RECORDING_NAME" : "Название записи:", - "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", - "FIELD_HEADER_SCROLLBACK" : "Размер буфера прокрутки:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Название typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Путь typescript:", - "FIELD_HEADER_USE_SSL" : "Использовать SSL/TLS", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Серое на черном", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", - "SECTION_HEADER_BEHAVIOR" : "Поведение терминала", - "SECTION_HEADER_CONTAINER" : "Контейнер", - "SECTION_HEADER_DISPLAY" : "Экран", - "SECTION_HEADER_RECORDING" : "Запись экрана", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (запись текстовой сессии)", - "SECTION_HEADER_NETWORK" : "Сеть" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "Имя клиента:", - "FIELD_HEADER_COLOR_DEPTH" : "Глубина цвета:", - "FIELD_HEADER_CONSOLE" : "Консоль администратора:", - "FIELD_HEADER_CONSOLE_AUDIO" : "Поддержка звука в консоли:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "Автоматически создавать путь для диска:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", - "FIELD_HEADER_DISABLE_AUDIO" : "Отключить звук:", - "FIELD_HEADER_DISABLE_AUTH" : "Отключить аутентификацию:", - "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", - "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", - "FIELD_HEADER_DOMAIN" : "Домен:", - "FIELD_HEADER_DPI" : "Разрешение экрана (DPI):", - "FIELD_HEADER_DRIVE_NAME" : "Название диска:", - "FIELD_HEADER_DRIVE_PATH" : "Путь для диска:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Включить звуковой вход (микрофон):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Включить композитор рабочего стола (Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "Включить диск:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Включить сглаживание шрифтов (ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Включить отображение содержимого окна при перетаскивании:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Включить анимации меню:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Отключить кеширование битмапов:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Отключить кеширование скрытых элементов:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Отключить кеширование глифов:", - "FIELD_HEADER_ENABLE_PRINTING" : "Включить печать:", - "FIELD_HEADER_ENABLE_SFTP" : "Включить SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "Включить темы:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "Включить обои:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "Домен:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "Сервер:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "Пароль:", - "FIELD_HEADER_GATEWAY_PORT" : "Порт:", - "FIELD_HEADER_GATEWAY_USERNAME" : "Имя пользователя:", - "FIELD_HEADER_HEIGHT" : "Высота:", - "FIELD_HEADER_HOSTNAME" : "Сервер:", - "FIELD_HEADER_IGNORE_CERT" : "Игнорировать сертификат сервера:", - "FIELD_HEADER_INITIAL_PROGRAM" : "Запуск программ при подключении:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "Информация о балансировке нагрузки:", - "FIELD_HEADER_PASSWORD" : "Пароль:", - "FIELD_HEADER_PORT" : "Порт:", - "FIELD_HEADER_PRINTER_NAME" : "Название принтера:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "Данные BLOB (HyperV VM ID):", - "FIELD_HEADER_PRECONNECTION_ID" : "Данные RDP ID:", - "FIELD_HEADER_READ_ONLY" : "Только просмотр:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", - "FIELD_HEADER_RECORDING_NAME" : "Название записи:", - "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", - "FIELD_HEADER_RESIZE_METHOD" : "Метод изменения размера стола:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "Параметры RemoteApp:", - "FIELD_HEADER_REMOTE_APP_DIR" : "Рабочий каталог RemoteApp:", - "FIELD_HEADER_REMOTE_APP" : "Программа RemoteApp:", - "FIELD_HEADER_SECURITY" : "Режим безопасности:", - "FIELD_HEADER_SERVER_LAYOUT" : "Раскладка клавиатуры:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Директория загрузки по умолчанию:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Публичный ключ сервера (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Сервер:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Секретная фраза:", - "FIELD_HEADER_SFTP_PASSWORD" : "Пароль:", - "FIELD_HEADER_SFTP_PORT" : "Порт:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Приватный ключ:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Директория просмотра по умолчанию:", - "FIELD_HEADER_SFTP_USERNAME" : "Имя пользователя:", - "FIELD_HEADER_STATIC_CHANNELS" : "Названия статических каналов:", - "FIELD_HEADER_TIMEZONE" : "Часовой пояс:", - "FIELD_HEADER_USERNAME" : "Имя пользователя:", - "FIELD_HEADER_WIDTH" : "Ширина:", - - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-бит)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-бит)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-бит)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 цветов", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "Виртуальный канал \"Display Update\" (RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Переподключение", - - "FIELD_OPTION_SECURITY_ANY" : "Любой", - "FIELD_OPTION_SECURITY_NLA" : "NLA (аутентификация уровня сети)", - "FIELD_OPTION_SECURITY_RDP" : "RDP-шифрование", - "FIELD_OPTION_SECURITY_TLS" : "TLS-шифрование", - - "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", - "SECTION_HEADER_BASIC_PARAMETERS" : "Основные настройки", - "SECTION_HEADER_DEVICE_REDIRECTION" : "Перенаправление устройств", - "SECTION_HEADER_DISPLAY" : "Экран", - "SECTION_HEADER_GATEWAY" : "Шлюз удаленных рабочих столов", - "SECTION_HEADER_LOAD_BALANCING" : "Балансировщик нагрузки", - "SECTION_HEADER_NETWORK" : "Сеть", - "SECTION_HEADER_PERFORMANCE" : "Производительность", - "SECTION_HEADER_PRECONNECTION_PDU" : "Предварительные данные подключения (Hyper-V)", - "SECTION_HEADER_RECORDING" : "Запись экрана" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "Клавиша Backspace посылает:", - "FIELD_HEADER_COLOR_SCHEME" : "Цветовая схема:", - "FIELD_HEADER_COMMAND" : "Команда для выполнения:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Автоматически создавать путь typescript:", - "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", - "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", - "FIELD_HEADER_FONT_NAME" : "Шрифт:", - "FIELD_HEADER_FONT_SIZE" : "Размер шрифта:", - "FIELD_HEADER_ENABLE_SFTP" : "Включить SFTP:", - "FIELD_HEADER_HOST_KEY" : "Публичный ключ сервера (Base64):", - "FIELD_HEADER_HOSTNAME" : "Сервер:", - "FIELD_HEADER_LOCALE" : "Language/Locale ($LANG):", - "FIELD_HEADER_USERNAME" : "Имя пользователя:", - "FIELD_HEADER_PASSWORD" : "Пароль:", - "FIELD_HEADER_PASSPHRASE" : "Секретная фраза:", - "FIELD_HEADER_PORT" : "Порт:", - "FIELD_HEADER_PRIVATE_KEY" : "Приватный ключ:", - "FIELD_HEADER_SCROLLBACK" : "Размер буфера прокрутки:", - "FIELD_HEADER_READ_ONLY" : "Только просмотр:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", - "FIELD_HEADER_RECORDING_NAME" : "Название записи:", - "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для сервера:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Директория просмотра по умолчанию:", - "FIELD_HEADER_TERMINAL_TYPE" : "Тип терминала:", - "FIELD_HEADER_TIMEZONE" : "Часовой пояс ($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Название typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Путь typescript:", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Серое на черном", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном", - - "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", - "SECTION_HEADER_BEHAVIOR" : "Поведение терминала", - "SECTION_HEADER_DISPLAY" : "Экран", - "SECTION_HEADER_NETWORK" : "Сеть", - "SECTION_HEADER_RECORDING" : "Запись экрана", - "SECTION_HEADER_SESSION" : "Сессия / среда:", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (запись текстовой сессии)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "Клавиша Backspace посылает:", - "FIELD_HEADER_COLOR_SCHEME" : "Цветовая схема:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Автоматически создавать путь typescript:", - "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", - "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", - "FIELD_HEADER_FONT_NAME" : "Шрифт:", - "FIELD_HEADER_FONT_SIZE" : "Размер шрифта:", - "FIELD_HEADER_HOSTNAME" : "Сервер:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Regex определения отказа во входе:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Regex определения успешного входа:", - "FIELD_HEADER_USERNAME" : "Имя пользователя:", - "FIELD_HEADER_USERNAME_REGEX" : "Regex определения запроса имени пользователя:", - "FIELD_HEADER_PASSWORD" : "Пароль:", - "FIELD_HEADER_PASSWORD_REGEX" : "Regex определения запроса пароля:", - "FIELD_HEADER_PORT" : "Порт:", - "FIELD_HEADER_READ_ONLY" : "Только просмотр:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", - "FIELD_HEADER_RECORDING_NAME" : "Название записи:", - "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", - "FIELD_HEADER_SCROLLBACK" : "Размер буфера прокрутки:", - "FIELD_HEADER_TERMINAL_TYPE" : "Тип терминала:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Название typescript:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Путь typescript:", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Серое на черном", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном", - - "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", - "SECTION_HEADER_BEHAVIOR" : "Поведение терминала", - "SECTION_HEADER_DISPLAY" : "Экран", - "SECTION_HEADER_RECORDING" : "Запись экрана", - "SECTION_HEADER_TYPESCRIPT" : "Typescript (запись текстовой сессии)", - "SECTION_HEADER_NETWORK" : "Сеть" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "Название аудио-сервера:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "Кодировка:", - "FIELD_HEADER_COLOR_DEPTH" : "Глубина цвета:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", - "FIELD_HEADER_CURSOR" : "Курсор:", - "FIELD_HEADER_DEST_HOST" : "Сервер назначения:", - "FIELD_HEADER_DEST_PORT" : "Порт назначения:", - "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", - "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", - "FIELD_HEADER_ENABLE_AUDIO" : "Включить звук:", - "FIELD_HEADER_ENABLE_SFTP" : "Включить SFTP:", - "FIELD_HEADER_HOSTNAME" : "Сервер:", - "FIELD_HEADER_PASSWORD" : "Пароль:", - "FIELD_HEADER_PORT" : "Порт:", - "FIELD_HEADER_READ_ONLY" : "Только просмотр:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", - "FIELD_HEADER_RECORDING_NAME" : "Название записи:", - "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", - "FIELD_HEADER_SFTP_DIRECTORY" : "Директория загрузки по умолчанию:", - "FIELD_HEADER_SFTP_HOST_KEY" : "Публичный ключ сервера (Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "Сервер:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для SFTP:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "Секретная фраза:", - "FIELD_HEADER_SFTP_PASSWORD" : "Пароль:", - "FIELD_HEADER_SFTP_PORT" : "Порт:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Приватный ключ:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Директория просмотра по умолчанию:", - "FIELD_HEADER_SFTP_USERNAME" : "Имя пользователя:", - "FIELD_HEADER_SWAP_RED_BLUE" : "Поменять синий и красный компоненты:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 цветов", - "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-бит)", - "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-бит)", - "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-бит)", - - "FIELD_OPTION_CURSOR_LOCAL" : "Локальный", - "FIELD_OPTION_CURSOR_REMOTE" : "Удаленный", - - "SECTION_HEADER_AUDIO" : "Аудио", - "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", - "SECTION_HEADER_CLIPBOARD" : "Буфер обмена", - "SECTION_HEADER_DISPLAY" : "Экран", - "SECTION_HEADER_NETWORK" : "Сеть", - "SECTION_HEADER_RECORDING" : "Запись экрана" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "Настройки" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "Здесь отображается журнал предыдущих подключений, который можно отсортировать, кликнув на заголовке колонки. Для поиска конкретных записей введите нужные данные и нажмите «Поиск». Тогда будут отображаться только записи, соответствующие данным для поиска.", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "Подходящих записей нет", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Название подключения", - "TABLE_HEADER_SESSION_DURATION" : "Продолжительность", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Удаленный узел", - "TABLE_HEADER_SESSION_STARTDATE" : "Время начала", - "TABLE_HEADER_SESSION_USERNAME" : "Имя пользователя", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_CONNECTION" : "Новое подключение", - "ACTION_NEW_CONNECTION_GROUP" : "Новая группа", - "ACTION_NEW_SHARING_PROFILE" : "Новый профиль расшаривания", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "Нажмите на подключение, чтобы управлять им. В зависимости от прав доступа возможно добавление и удаление подключений, а также изменение их свойств (протокол, название сервера, порт и т.д.).", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "Подключения" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "Язык:", - "FIELD_HEADER_PASSWORD" : "Пароль:", - "FIELD_HEADER_PASSWORD_OLD" : "Текущий пароль:", - "FIELD_HEADER_PASSWORD_NEW" : "Новый пароль:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Повтор нового пароля:", - "FIELD_HEADER_TIMEZONE" : "Часовой пояс:", - "FIELD_HEADER_USERNAME" : "Имя пользователя:", - - "HELP_DEFAULT_INPUT_METHOD" : "Режим ввода по умолчанию определяет, каким образом нажатия на клавиатуру будут передаваться Guacamole. Изменение данной настройки может быть полезным при работе с мобильных устройств или при вводе через IME. Данная настройка может быть сделана для каждого подключения через основное меню Guacamole.", - "HELP_DEFAULT_MOUSE_MODE" : "Режим эмуляции мыши по умолчанию определяет, каким образом мышь на удаленном сервере будет реагировать на прикосновения для новых подключений. Данная настройка может быть переопределена для каждого подключения через основное меню Guacamole.", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "Ниже вы можете выбрать язык и установить другие настройки локали, влияющие на отображение интерфейса пользователя.", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "Если вы хотите изменить пароль, укажите ваш текущий пароль и дважды укажите новый. Затем нажмите «Обновить пароль». Изменения вступят в силу моментально.", - - "INFO_PASSWORD_CHANGED" : "Пароль успешно изменен.", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Метод ввода по умолчанию", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Режим эмуляции мыши по умолчанию", - "SECTION_HEADER_UPDATE_PASSWORD" : "Изменить пароль" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "Создать пользователя", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "Нажмите на пользователя, чтобы управлять им. В зависимости от прав доступа возможно добавление и удаление пользователей, а также изменение паролей.", - - "SECTION_HEADER_USERS" : "Пользователи", - - "TABLE_HEADER_FULL_NAME" : "Полное имя", - "TABLE_HEADER_LAST_ACTIVE" : "Был активен", - "TABLE_HEADER_ORGANIZATION" : "Организация", - "TABLE_HEADER_USERNAME" : "Имя пользователя" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "Создать группу", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "Нажмите на группу, чтобы управлять ей. В зависимости от прав доступа возможно добавление и удаление групп, а также изменение членства других групп и пользователей.", - - "SECTION_HEADER_USER_GROUPS" : "Группы", - - "TABLE_HEADER_USER_GROUP_NAME" : "Название группы" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "Завершить сессии", - - "DIALOG_HEADER_CONFIRM_DELETE" : "Завершение сессий", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "Здесь показаны текущие активные сессии Guacamole. Отображаемые сессии и возможность их завершения зависит от ваших прав доступа. Если вы хотите завершить одну или несколько сессий, выберите нужные и нажмите «Завершить сессии». Принудительное завершение сессий приведет к немедленному отключению пользователей.", - - "INFO_NO_SESSIONS" : "Нет активных сессий", - - "SECTION_HEADER_SESSIONS" : "Активные сессии", - - "TABLE_HEADER_SESSION_USERNAME" : "Имя пользователя", - "TABLE_HEADER_SESSION_STARTDATE" : "Активен с", - "TABLE_HEADER_SESSION_REMOTEHOST" : "Удаленный узел", - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Название подключения", - - "TEXT_CONFIRM_DELETE" : "Вы уверены, что хотите завершить все выбранные сессии? Пользователи, работающие в этих сессиях, будут немедленно отключены." - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Адрес электронной почты:", - "FIELD_HEADER_GUAC_FULL_NAME" : "Полное имя:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "Организация:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Роль:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/translations/zh.json b/guacamole/src/main/frontend/src/translations/zh.json deleted file mode 100644 index 86d84a9671..0000000000 --- a/guacamole/src/main/frontend/src/translations/zh.json +++ /dev/null @@ -1,1139 +0,0 @@ -{ - - "NAME" : "简体中文", - - "APP" : { - - "NAME" : "Apache Guacamole", - - "ACTION_ACKNOWLEDGE" : "确定", - "ACTION_CANCEL" : "取消", - "ACTION_CLEAR" : "清除", - "ACTION_CLONE" : "克隆", - "ACTION_CONTINUE" : "继续", - "ACTION_DELETE" : "删除", - "ACTION_DELETE_SESSIONS" : "删除会话", - "ACTION_DOWNLOAD" : "下载", - "ACTION_IMPORT" : "导入", - "ACTION_LOGIN" : "登录", - "ACTION_LOGIN_AGAIN" : "重新登录", - "ACTION_LOGOUT" : "登出", - "ACTION_MANAGE_CONNECTIONS" : "连接", - "ACTION_MANAGE_PREFERENCES" : "偏好", - "ACTION_MANAGE_SETTINGS" : "设置", - "ACTION_MANAGE_SESSIONS" : "活动会话", - "ACTION_MANAGE_USERS" : "用户", - "ACTION_MANAGE_USER_GROUPS" : "用户组", - "ACTION_NAVIGATE_BACK" : "返回", - "ACTION_NAVIGATE_HOME" : "首页", - "ACTION_PAUSE" : "暂停", - "ACTION_PLAY" : "播放", - "ACTION_SAVE" : "保存", - "ACTION_SEARCH" : "搜索", - "ACTION_SHARE" : "共享", - "ACTION_UPDATE_PASSWORD" : "更新密码", - "ACTION_VIEW_HISTORY" : "历史", - "ACTION_VIEW_RECORDING" : "查看", - - "DIALOG_HEADER_ERROR" : "错误", - - "ERROR_PAGE_UNAVAILABLE" : "发生错误,此操作无法完成。 如果问题仍然存在,请通知系统管理员或检查系统日志。", - "ERROR_PASSWORD_BLANK" : "密码不能为空。", - "ERROR_PASSWORD_MISMATCH" : "输入的密码不匹配。", - "ERROR_SINGLE_FILE_ONLY" : "请一次只上传一个文件", - - "FIELD_HEADER_PASSWORD" : "密码:", - "FIELD_HEADER_PASSWORD_AGAIN" : "重输密码:", - - "FIELD_PLACEHOLDER_FILTER" : "过滤", - - "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", - - "INFO_ACTIVE_USER_COUNT" : "正在被 {USERS} 个用户使用。", - "INFO_LOGGED_OUT" : "您已登出。", - - "TEXT_ANONYMOUS_USER" : "匿名用户", - "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{秒} minute{分} hour{小时} day{天} other{}}", - "TEXT_UNTRANSLATED" : "{MESSAGE}" - - }, - - "CLIENT" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR_CLIENT_MESSAGES" : "@:APP.ACTION_CLEAR", - "ACTION_CLEAR_COMPLETED_TRANSFERS" : "@:APP.ACTION_CLEAR", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_DISCONNECT" : "断开连接", - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_RECONNECT" : "重新连接", - "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", - "ACTION_SHARE" : "@:APP.ACTION_SHARE", - "ACTION_SHOW_CLIPBOARD" : "点击以查看剪贴板内容。", - "ACTION_UPLOAD_FILES" : "上传文件", - - "DIALOG_HEADER_CONNECTING" : "正在连接", - "DIALOG_HEADER_CONNECTION_ERROR" : "连接出错", - "DIALOG_HEADER_DISCONNECTED" : "已断开连接", - - "ERROR_CLIENT_201" : "因服务器繁忙,本连接已被关闭。请稍等几分钟后再尝试。", - "ERROR_CLIENT_202" : "因远程桌面太久没有应答,Guacamole 服务器关闭了本连接。请重试或联系您的系统管理员。", - "ERROR_CLIENT_203" : "远程桌面服务器因为发生错误而关闭了本连接。请重试或联系您的系统管理员。", - "ERROR_CLIENT_207" : "联系不上远程桌面服务器。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", - "ERROR_CLIENT_208" : "远程桌面服务器不在线。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", - "ERROR_CLIENT_209" : "因与另一个连接冲突,远程桌面服务器关闭了本连接。请稍后重试。", - "ERROR_CLIENT_20A" : "因长时间没有活动,远程桌面服务器关闭了本连接。如果这不是期望的设置,请通知您的系统管理员,或检查您的系统设置。", - "ERROR_CLIENT_20B" : "远程桌面服务器强制关闭了本连接。如果这不是预期的情况,请通知您的系统管理员,或检查您的系统日志。", - "ERROR_CLIENT_301" : "登录失败。请重新连接后再重试。", - "ERROR_CLIENT_303" : "远程桌面服务器拒绝了本连接。如果需要使用本连接,请联系您的系统管理员开放权限,或者检查您的系统设置。", - "ERROR_CLIENT_308" : "因为您的浏览器长时间没有应答,Guacamole 服务器关闭了本连接。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试。", - "ERROR_CLIENT_31D" : "因为您已超出了单一用户可同时使用的连接数量,Guacamole 服务器拒绝了本连接。请先关闭至少一个连接再重试。", - "ERROR_CLIENT_DEFAULT" : "本连接因为 Guacamole 服务器出现了内部错误而被终止。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", - - "ERROR_TUNNEL_201" : "因为正在使用的活动连接太多,Guacamole 服务器拒绝了本连接。请稍后再重试。", - "ERROR_TUNNEL_202" : "因服务器太久没有应答,本连接已被关闭。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试,或者联系您的系统管理员。", - "ERROR_TUNNEL_203" : "服务器出错并关闭了本连接。请重试,或联系您的系统管理员。", - "ERROR_TUNNEL_204" : "请求的连接不存在。请先检查连接的名字再重试。", - "ERROR_TUNNEL_205" : "本连接正在使用中,并且不允许共享连接。请稍后重试。", - "ERROR_TUNNEL_207" : "联系不上 Guacamole 服务器。请先检查您的网络连接再重试。", - "ERROR_TUNNEL_208" : "Guacamole 服务器不接受连接请求。请先检查您的网络连接再重试。", - "ERROR_TUNNEL_301" : "您还未登录,所以没有使用此连接的权限。请先登录再重试。", - "ERROR_TUNNEL_303" : "您没有使用此连接的权限。如果您的确需要使用此连接,请联系您的系统管理员开通权限,或检查您的系统设置。", - "ERROR_TUNNEL_308" : "因为您的浏览器长时间没有应答,Guacamole 服务器关闭了本连接。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试。", - "ERROR_TUNNEL_31D" : "因为您已超出了单一用户可同时使用的连接数量,Guacamole 服务器拒绝了本连接。请先关闭至少一个连接再重试。", - "ERROR_TUNNEL_DEFAULT" : "本连接因为 Guacamole 服务器出现了内部错误而被终止。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", - - "ERROR_UPLOAD_100" : "不支持或不允许使用文件传输。请联系您的系统管理员,或检查您的系统日志。", - "ERROR_UPLOAD_201" : "正在同时传输太多文件。请等待当前的文件传输任务完成后,再重试。", - "ERROR_UPLOAD_202" : "因远程桌面服务器太久没有应答,文件不能传输。请重试或联系您的系统管理员。", - "ERROR_UPLOAD_203" : "远程桌面服务器在文件传输时出错。请重试或联系您的系统管理员。", - "ERROR_UPLOAD_204" : "文件传输的接收目录不存在。请先检查接收目录再重试。", - "ERROR_UPLOAD_205" : "文件传输的接收目录正被锁定。请等待正在进行的操作完成后,再重试。", - "ERROR_UPLOAD_301" : "您还未登录,所以没有上传此文件的权限。请先登录再重试。", - "ERROR_UPLOAD_303" : "您没有上传此文件的权限。如果您需要权限,请检查您的系统设置,或联系您的系统管理员。", - "ERROR_UPLOAD_308" : "文件传输已停止。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试。", - "ERROR_UPLOAD_31D" : "正在同时传输太多文件。请等待当前的传输任务完成后,再重试。", - "ERROR_UPLOAD_DEFAULT" : "本连接因为 Guacamole 服务器出现了内部错误而被终止。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CLIPBOARD" : "复制/剪切的文本将出现在这里。对下面文本内容所作的修改将会影响远程电脑上的剪贴板。", - "HELP_INPUT_METHOD_NONE" : "没有选择任何输入方式。将从连接的物理键盘接受键盘输入。", - "HELP_INPUT_METHOD_OSK" : "显示并从内建的 Guacamole 屏幕键盘接受输入。屏幕键盘可以输入平常无法输入的按键组合(如 Ctrl-Alt-Del 等)。", - "HELP_INPUT_METHOD_TEXT" : "允许输入文本,并根据所输入的文本模拟键盘事件。可用于没有物理键盘的设备,如手机等。", - "HELP_MOUSE_MODE" : "设置远程电脑上的鼠标对触控行为的反应。", - "HELP_MOUSE_MODE_ABSOLUTE" : "点击时立即触发按键。在点击的位置触发鼠标按键事件。", - "HELP_MOUSE_MODE_RELATIVE" : "拖拽时移动鼠标,再点击时触发按键。在鼠标当前所在的位置触发按键事件。", - "HELP_SHARE_LINK" : "正在共享当前连接,并可被使用以下链接的任何人使用:", - - "INFO_ANONYMOUS_USER_COUNT" : "匿名用户{COUNT, plural, one{} other{ (#)}}", - "INFO_CONNECTION_SHARED" : "此连接已被共享。", - "INFO_NO_FILE_TRANSFERS" : "无文件传输任务。", - "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", - - "NAME_INPUT_METHOD_NONE" : "无", - "NAME_INPUT_METHOD_OSK" : "屏幕键盘", - "NAME_INPUT_METHOD_TEXT" : "文本输入", - "NAME_KEY_CTRL" : "Ctrl", - "NAME_KEY_ALT" : "Alt", - "NAME_KEY_ESC" : "Esc", - "NAME_KEY_TAB" : "Tab", - "NAME_MOUSE_MODE_ABSOLUTE" : "触摸屏", - "NAME_MOUSE_MODE_RELATIVE" : "触控板", - - "SECTION_HEADER_CLIENT_MESSAGES" : "消息", - "SECTION_HEADER_CLIPBOARD" : "剪贴板", - "SECTION_HEADER_DEVICES" : "设备", - "SECTION_HEADER_DISPLAY" : "显示", - "SECTION_HEADER_FILE_TRANSFERS" : "文件传输", - "SECTION_HEADER_INPUT_METHOD" : "输入方式", - - "SECTION_HEADER_MOUSE_MODE" : "模拟鼠标模式", - - "TEXT_ANONYMOUS_USER_JOINED" : "有一名匿名用户已加入连接。", - "TEXT_ANONYMOUS_USER_LEFT" : "有一名匿名用户断开了连接。", - "TEXT_ZOOM_AUTO_FIT" : "自适应浏览器窗口大小", - "TEXT_CLIENT_STATUS_IDLE" : "空闲。", - "TEXT_CLIENT_STATUS_CONNECTING" : "正在连接 Guacamole...", - "TEXT_CLIENT_STATUS_DISCONNECTED" : "您的连接已断开。", - "TEXT_CLIENT_STATUS_UNSTABLE" : "到 Guacamole 服务器的网络连接似乎不太稳定。", - "TEXT_CLIENT_STATUS_WAITING" : "已连接到 Guacamole。正在等待应答...", - "TEXT_USER_JOINED" : "用户 {USERNAME} 已加入连接。", - "TEXT_USER_LEFT" : "用户 {USERNAME} 断开了连接。", - "TEXT_RECONNECT_COUNTDOWN" : "在 {REMAINING} 秒后重连...", - "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - - "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" - - }, - - "COLOR_SCHEME" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_HIDE_DETAILS" : "隐藏", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_SHOW_DETAILS" : "显示", - - "FIELD_HEADER_BACKGROUND" : "背景色", - "FIELD_HEADER_FOREGROUND" : "前景色", - - "FIELD_OPTION_CUSTOM" : "自定义...", - - "SECTION_HEADER_DETAILS" : "详情:" - - }, - - "IMPORT": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_BROWSE" : "浏览文件", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", - "ACTION_VIEW_FORMAT_HELP" : "查看帮助", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_IMPORT_CONNECTIONS" : "导入连接", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - "DIALOG_HEADER_SUCCESS" : "成功", - - "ERROR_AMBIGUOUS_CSV_HEADER" : "存在冲突的 CSV 列名: \"{HEADER}\" ,可能是一个连接属性或者参数", - "ERROR_AMBIGUOUS_PARENT_GROUP" : "连接组以其父连接组不能同时设置", - "ERROR_ARRAY_REQUIRED" : "上传的文件必须包含有效的连接数据", - "ERROR_DETECTED_INVALID_TYPE" : "不支持的文件类型。请确认您上传的文件是合法的 CSV,JSON 或者 YAML 文件。", - "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "在导入的文件中发现了重复的连接: \"{NAME}\" 位于 \"{PATH}\"", - "ERROR_DUPLICATE_CSV_HEADER" : "重复的 CSV 列名: {HEADER}", - "ERROR_EMPTY_FILE" : "上传的文件内容为空", - "ERROR_INVALID_CSV_HEADER" : "非法的 CSV 列名: \"{HEADER}\" 不是一个可识别的属性或者参数。", - "ERROR_INVALID_MIME_TYPE" : "不支持的文件类型: \"{TYPE}\"", - "ERROR_INVALID_GROUP" : "未找到名称为: \"{GROUP}\" 的连接组", - "ERROR_INVALID_GROUP_IDENTIFIER" : "未找到能识别为: \"{IDENTIFIER}\" 的连接组", - "ERROR_NO_FILE_SUPPLIED" : "请选择一个文件", - "ERROR_PARSE_FAILURE_CSV" : "请确保您上传的是合法的 CSV 文件。解析错误: \"{ERROR}\" 。", - "ERROR_PARSE_FAILURE_JSON" : "请确保您上传的是合法的 JSON 文件。解析错误: \"{ERROR}\" 。", - "ERROR_PARSE_FAILURE_YAML" : "请确保您上传的是合法的 YAML 文件。解析错误: \"{ERROR}\" 。", - "ERROR_REJECT_UPDATE_CONNECTION" : "连接 \"{NAME}\" 已存在于 \"{PATH}\"", - "ERROR_REQUIRED_NAME" : "在提供的文件中未找到连接名称", - "ERROR_REQUIRED_PROTOCOL" : "在提供的文件中未找到协议", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "替换/更新已存在的连接", - "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "重置权限", - - "HELP_CSV_DESCRIPTION" : "当导入的文件格式为 CSV 时,一行记录为一条连接数据。每列为一个配置条目。每条记录至少需要提供连接名称以及协议。", - "HELP_CSV_EXAMPLE" : "name,protocol,hostname,group,users,groups,guacd-encryption (attribute)\nconn1,vnc,conn1.web.com,ROOT,guac user 1;guac user 2,Connection 1 Users,none\nconn2,rdp,conn2.web.com,ROOT/Parent Group,guac user 1,,ssl\nconn3,ssh,conn3.web.com,ROOT/Parent Group/Child Group,guac user 2;guac user 3,,\nconn4,kubernetes,,,,,", - "HELP_CSV_MORE_DETAILS" : "CSV 列名与连接中的属性一一对应。需要导入的连接组信息可以通过 \"parentIdentifier\" 属性直接设定,或者通过 \"group\" 属性进行指定。在大多数场合下,属性之间不应当存在冲突。但如过这种情况发生时,在列名后加入 \" (attribute)\" 或者 \" (parameter)\" 即可避免混淆。用户或者用户组必须使用分号进行分隔。¹", - "HELP_FILE_TYPE_DESCRIPTION" : "目前系统支持三种文件格式:CSV,JSON 或者 YAML。文件格式之间支持的属性相同,即至少需要连接名称以及协议。当然,连接组,哪些用户或者用户组有权限使用,连接参数等属性均可以被指定。不存在的用户或者用户组会被自动创建。注意,任何已存在的连接权限并不会根据导入的数据被清除,除非您勾选了“重置权限”选框。", - "HELP_FILE_TYPE_HEADER" : "文件格式", - "HELP_JSON_DESCRIPTION" : "当导入的文件格式为 JSON 时,每条记录至少需要提供连接名称以及协议。", - "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"conn1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"hostname\": \"conn1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac user 1\", \"guac user 2\" ],\n \"groups\": [ \"Connection 1 Users\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"hostname\": \"conn2.web.com\" \\},\n \"group\": \"ROOT/Parent Group\",\n \"users\": [ \"guac user 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"hostname\": \"conn3.web.com\" \\},\n \"group\": \"ROOT/Parent Group/Child Group\",\n \"users\": [ \"guac user 2\", \"guac user 3\" ]\n \\},\n \\{\n \"name\": \"conn4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", - "HELP_JSON_MORE_DETAILS" : "需要被导入的连接组信息可以通过 \"parentIdentifier\" 属性直接指定,或者通过 \"group\" 属性进行指定。每条连接信息均可单独设置用户以及用户组的访问权限", - "HELP_EXISTING_CONNECTION_MODE" : "如果提供文件中的信息匹配,将完全替换/更新已存在的连接信息。如果未勾选,尝试导入已存在的连接将会导致导入时发生错误。", - "HELP_EXISTING_PERMISSION_MODE" : "根据提供文件中的设定完全重置权限。如果没有权限设定信息,所有已设定的连接权限将会被撤销。如果未勾选,已存在的权限会被保留,任何新权限设定会被自动添加。", - "HELP_SEMICOLON_FOOTNOTE" : "如果需要,您可以通过反斜杠来转义分号,比如: \"first\\\\;last\"", - "HELP_UPLOAD_DROP_TITLE" : "拖拽文件", - "HELP_UPLOAD_FILE_TYPES" : "CSV,JSON 或者 YAML", - "HELP_YAML_DESCRIPTION" : "当导入的文件格式为 YAML 时,其数据结构必须与使用 JSON 格式时保持一致。", - "HELP_YAML_EXAMPLE" : "---\n - name: conn1\n protocol: vnc\n parameters:\n hostname: conn1.web.com\n group: ROOT\n users:\n - guac user 1\n - guac user 2\n groups:\n - Connection 1 Users\n attributes:\n guacd-encryption: none\n - name: conn2\n protocol: rdp\n parameters:\n hostname: conn2.web.com\n group: ROOT/Parent Group\n users:\n - guac user 1\n attributes:\n guacd-encryption: none\n - name: conn3\n protocol: ssh\n parameters:\n hostname: conn3.web.com\n group: ROOT/Parent Group/Child Group\n users:\n - guac user 2\n - guac user 3\n - name: conn4\n protocol: kubernetes", - - "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} 条连接已成功导入。", - - "SECTION_HEADER_CONNECTION_IMPORT" : "导入连接", - "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "导入连接文件格式", - "SECTION_HEADER_CSV" : "CSV 格式", - "SECTION_HEADER_JSON" : "JSON 格式", - "SECTION_HEADER_YAML" : "YAML 格式", - - "TABLE_HEADER_ERRORS" : "错误", - "TABLE_HEADER_GROUP" : "分组", - "TABLE_HEADER_NAME" : "名称", - "TABLE_HEADER_PROTOCOL" : "协议", - "TABLE_HEADER_ROW_NUMBER" : "行 #" - }, - - "DATA_SOURCE_DEFAULT" : { - "NAME" : "默认(XML)" - }, - - "FORM" : { - - "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", - "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", - - "HELP_SHOW_PASSWORD" : "点击显示密码", - "HELP_HIDE_PASSWORD" : "点击隐藏密码" - - }, - - "HOME" : { - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "INFO_NO_RECENT_CONNECTIONS" : "无最近使用过的连接。", - - "PASSWORD_CHANGED" : "密码已修改。", - - "SECTION_HEADER_ALL_CONNECTIONS" : "全部连接", - "SECTION_HEADER_RECENT_CONNECTIONS" : "最近使用过的连接" - - }, - - "LIST" : { - - "TEXT_ANONYMOUS_USER" : "匿名用户" - - }, - - "LOGIN": { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", - "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_INVALID_LOGIN" : "非法登录", - - "FIELD_HEADER_USERNAME" : "用户名", - "FIELD_HEADER_PASSWORD" : "密码" - - }, - - "MANAGE_CONNECTION" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "删除连接", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "位置:", - "FIELD_HEADER_NAME" : "名称:", - "FIELD_HEADER_PROTOCOL" : "协议:", - - "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_CONNECTION_ACTIVE_NOW" : "活动中", - "INFO_CONNECTION_NOT_USED" : "此连接未被使用过。", - - "SECTION_HEADER_EDIT_CONNECTION" : "编辑连接", - "SECTION_HEADER_HISTORY" : "使用历史", - "SECTION_HEADER_PARAMETERS" : "参数", - - "TABLE_HEADER_HISTORY_USERNAME" : "用户名", - "TABLE_HEADER_HISTORY_START" : "开始时间", - "TABLE_HEADER_HISTORY_DURATION" : "持续时间", - "TABLE_HEADER_HISTORY_REMOTEHOST" : "远程主机", - - "TEXT_CONFIRM_DELETE" : "连接被删除后将无法恢复。确定要删除这个连接吗?", - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "MANAGE_CONNECTION_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "删除连接组", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_LOCATION" : "位置:", - "FIELD_HEADER_NAME" : "名字:", - "FIELD_HEADER_TYPE" : "类型:", - - "NAME_TYPE_BALANCING" : "负载平衡", - "NAME_TYPE_ORGANIZATIONAL" : "组织架构", - - "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "编辑连接组", - - "TEXT_CONFIRM_DELETE" : "将不能恢复已被删除的连接组。确定要删除这个连接组吗?" - - }, - - "MANAGE_SHARING_PROFILE" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "删除共享设定", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_NAME" : "名字:", - "FIELD_HEADER_PRIMARY_CONNECTION" : "主连接:", - - "SECTION_HEADER_EDIT_SHARING_PROFILE" : "编辑共享设定", - "SECTION_HEADER_PARAMETERS" : "参数", - - "TEXT_CONFIRM_DELETE" : "将不能恢复已被删除的共享设定。确定要删除这个共享设定吗?" - - }, - - "MANAGE_USER" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "删除用户", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "授权管理系统:", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "修改自己的密码:", - "FIELD_HEADER_CREATE_NEW_USERS" : "新建用户:", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "新建用户组:", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "新建连接:", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "新建连接组:", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "新建共享设定:", - "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", - "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", - "FIELD_HEADER_USER_DISABLED" : "已禁用登录:", - "FIELD_HEADER_USERNAME" : "用户名:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "该用户当前不属于任何组。 展开此部分以添加组。", - - "INFO_READ_ONLY" : "对不起,不能编辑此用户的账户。", - "INFO_NO_USER_GROUPS_AVAILABLE" : "没用可用的用户组.", - - "SECTION_HEADER_ALL_CONNECTIONS" : "全部连接", - "SECTION_HEADER_CONNECTIONS" : "连接", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "当前连接", - "SECTION_HEADER_EDIT_USER" : "编辑用户", - "SECTION_HEADER_PERMISSIONS" : "使用权限", - "SECTION_HEADER_USER_GROUPS" : "用户组", - - "TEXT_CONFIRM_DELETE" : "将不能恢复已被删除的用户。确定要删除这个用户吗?" - - }, - - "MANAGE_USER_GROUP" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_CLONE" : "@:APP.ACTION_CLONE", - "ACTION_DELETE" : "@:APP.ACTION_DELETE", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - - "DIALOG_HEADER_CONFIRM_DELETE" : "删除用户组", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", - "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", - "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", - "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", - "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", - "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", - "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", - "FIELD_HEADER_USER_GROUP_DISABLED" : "禁用:", - "FIELD_HEADER_USER_GROUP_NAME" : "用户组名称:", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_NO_USER_GROUPS" : "该组当前不属于任何组。展开此部分以添加组。", - "HELP_NO_MEMBER_USER_GROUPS" : "该组当前不包含任何组。展开此部分以添加组。", - "HELP_NO_MEMBER_USERS" : "该组当前不包含任何用户。展开此部分以添加用户。", - - "INFO_READ_ONLY" : "抱歉,无法编辑此用户组。", - "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", - "INFO_NO_USERS_AVAILABLE" : "没有可用的用户。", - - "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", - "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", - "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", - "SECTION_HEADER_EDIT_USER_GROUP" : "编辑用户组", - "SECTION_HEADER_MEMBER_USERS" : "成员用户", - "SECTION_HEADER_MEMBER_USER_GROUPS" : "成员用户组", - "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", - "SECTION_HEADER_USER_GROUPS" : "父用户组", - - "TEXT_CONFIRM_DELETE" : "删除用户组后将无法还原。确定要删除该用户组吗?" - - }, - - "PLAYER" : { - - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", - "ACTION_PLAY" : "@:APP.ACTION_PLAY", - - "INFO_LOADING_RECORDING" : "录像已载入。请稍候...", - "INFO_SEEK_IN_PROGRESS" : "正在跳转到指定位置。请稍候..." - - }, - - "PROTOCOL_KUBERNETES" : { - - "FIELD_HEADER_BACKSPACE" : "发送退格键:", - "FIELD_HEADER_CA_CERT" : "证书颁发机构证书:", - "FIELD_HEADER_CLIENT_CERT" : "客户证书:", - "FIELD_HEADER_CLIENT_KEY" : "客户端密钥:", - "FIELD_HEADER_COLOR_SCHEME" : "配色方案:", - "FIELD_HEADER_CONTAINER" : "容器名称:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "自动建立 Typescript 目录:", - "FIELD_HEADER_DISABLE_COPY" : "禁用从终端复制:", - "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", - "FIELD_HEADER_EXEC_COMMAND" : "命令(exec):", - "FIELD_HEADER_FONT_NAME" : "字体名:", - "FIELD_HEADER_FONT_SIZE" : "字体大小:", - "FIELD_HEADER_HOSTNAME" : "主机名:", - "FIELD_HEADER_IGNORE_CERT" : "忽略服务器证书:", - "FIELD_HEADER_NAMESPACE" : "命名空间:", - "FIELD_HEADER_POD" : "Pod 名称:", - "FIELD_HEADER_PORT" : "端口:", - "FIELD_HEADER_READ_ONLY" : "只读:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", - "FIELD_HEADER_RECORDING_NAME" : "录像名:", - "FIELD_HEADER_RECORDING_PATH" : "录像路径:", - "FIELD_HEADER_SCROLLBACK" : "最大回滚尺寸:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 名称:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 路径:", - "FIELD_HEADER_USE_SSL" : "使用 SSL/TLS", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "退格键(Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "删除键(Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "白底黑字", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "黑底灰字", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "黑底绿字", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "黑底白字", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "NAME" : "Kubernetes", - - "SECTION_HEADER_AUTHENTICATION" : "认证方式", - "SECTION_HEADER_BEHAVIOR" : "终端行为", - "SECTION_HEADER_CLIPBOARD" : "剪贴板", - "SECTION_HEADER_CONTAINER" : "容器", - "SECTION_HEADER_DISPLAY" : "显示", - "SECTION_HEADER_RECORDING" : "屏幕录制", - "SECTION_HEADER_TYPESCRIPT" : "Typescript(文本会话录制)", - "SECTION_HEADER_NETWORK" : "网络" - - }, - - "PROTOCOL_RDP" : { - - "FIELD_HEADER_CLIENT_NAME" : "客户端:", - "FIELD_HEADER_COLOR_DEPTH" : "色彩深度:", - "FIELD_HEADER_CONSOLE" : "管理员控制台:", - "FIELD_HEADER_CONSOLE_AUDIO" : "在控制台内支持音频:", - "FIELD_HEADER_CREATE_DRIVE_PATH" : "自动建立虚拟盘:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", - "FIELD_HEADER_DISABLE_AUDIO" : "禁用音频:", - "FIELD_HEADER_DISABLE_AUTH" : "禁用认证:", - "FIELD_HEADER_DISABLE_COPY" : "禁用从远程桌面复制:", - "FIELD_HEADER_DISABLE_DOWNLOAD" : "禁用文件下载:", - "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", - "FIELD_HEADER_DISABLE_UPLOAD" : "禁用文件上传:", - "FIELD_HEADER_DOMAIN" : "域:", - "FIELD_HEADER_DPI" : "分辨率(DPI):", - "FIELD_HEADER_DRIVE_NAME" : "驱动器名称:", - "FIELD_HEADER_DRIVE_PATH" : "虚拟盘路径:", - "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "启用音频输入(话筒):", - "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "启用桌面合成效果(Aero):", - "FIELD_HEADER_ENABLE_DRIVE" : "启用虚拟驱动器:", - "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "启用字体平滑(ClearType):", - "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "启用全窗口拖拽:", - "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "启用菜单动画:", - "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "禁用位图缓存:", - "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "禁用离屏缓存:", - "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "禁用字形缓存:", - "FIELD_HEADER_DISABLE_GFX" : "禁用图形管线拓展:", - "FIELD_HEADER_ENABLE_PRINTING" : "启用打印功能:", - "FIELD_HEADER_ENABLE_SFTP" : "启用SFTP:", - "FIELD_HEADER_ENABLE_THEMING" : "启用桌面主题:", - "FIELD_HEADER_ENABLE_TOUCH" : "启用多点触控:", - "FIELD_HEADER_ENABLE_WALLPAPER" : "启用桌面墙纸:", - "FIELD_HEADER_FORCE_LOSSLESS" : "强制无损压缩:", - "FIELD_HEADER_GATEWAY_DOMAIN" : "域:", - "FIELD_HEADER_GATEWAY_HOSTNAME" : "主机名:", - "FIELD_HEADER_GATEWAY_PASSWORD" : "密码:", - "FIELD_HEADER_GATEWAY_PORT" : "端口:", - "FIELD_HEADER_GATEWAY_USERNAME" : "用户名:", - "FIELD_HEADER_HEIGHT" : "高度:", - "FIELD_HEADER_HOSTNAME" : "主机名:", - "FIELD_HEADER_IGNORE_CERT" : "忽略服务器证书:", - "FIELD_HEADER_INITIAL_PROGRAM" : "初始程序:", - "FIELD_HEADER_LOAD_BALANCE_INFO" : "负载平衡信息/Cookie:", - "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "换行符:", - "FIELD_HEADER_PASSWORD" : "密码:", - "FIELD_HEADER_PORT" : "端口:", - "FIELD_HEADER_PRINTER_NAME" : "重定向的打印机名称:", - "FIELD_HEADER_PRECONNECTION_BLOB" : "预连接 BLOB(VM 标识):", - "FIELD_HEADER_PRECONNECTION_ID" : "RDP 源标识:", - "FIELD_HEADER_READ_ONLY" : "只读:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", - "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "排除触摸事件:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", - "FIELD_HEADER_RECORDING_NAME" : "录像名:", - "FIELD_HEADER_RECORDING_PATH" : "录像路径:", - "FIELD_HEADER_RESIZE_METHOD" : "缩放方法:", - "FIELD_HEADER_REMOTE_APP_ARGS" : "参数:", - "FIELD_HEADER_REMOTE_APP_DIR" : "工作目录:", - "FIELD_HEADER_REMOTE_APP" : "程序:", - "FIELD_HEADER_SECURITY" : "安全模式:", - "FIELD_HEADER_SERVER_LAYOUT" : "键盘布局:", - "FIELD_HEADER_SFTP_DIRECTORY" : "缺省文件上传目录:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "禁用文件下载:", - "FIELD_HEADER_SFTP_HOST_KEY" : "公钥(Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "主机名:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive 时间间隔:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "口令:", - "FIELD_HEADER_SFTP_PASSWORD" : "密码:", - "FIELD_HEADER_SFTP_PORT" : "端口:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "私钥:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "文件浏览器根目录:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "禁用文件上传:", - "FIELD_HEADER_SFTP_USERNAME" : "用户名:", - "FIELD_HEADER_STATIC_CHANNELS" : "静态通道名:", - "FIELD_HEADER_TIMEZONE" : "时区:", - "FIELD_HEADER_USERNAME" : "用户名:", - "FIELD_HEADER_WIDTH" : "宽度:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", - "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", - "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", - "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", - - "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "保持原样", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", - "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", - - "FIELD_OPTION_COLOR_DEPTH_16" : "低彩色(16 位)", - "FIELD_OPTION_COLOR_DEPTH_24" : "真彩色(24 位)", - "FIELD_OPTION_COLOR_DEPTH_32" : "真彩色(32 位)", - "FIELD_OPTION_COLOR_DEPTH_8" : "256 色", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "“显示更新”虚拟通道(RDP 8.1+)", - "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", - "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "重新连接", - - "FIELD_OPTION_SECURITY_ANY" : "任意", - "FIELD_OPTION_SECURITY_EMPTY" : "", - "FIELD_OPTION_SECURITY_NLA" : "NLA(网络级别认证)", - "FIELD_OPTION_SECURITY_RDP" : "RDP 加密", - "FIELD_OPTION_SECURITY_TLS" : "TLS 加密", - "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", - - "FIELD_OPTION_SERVER_LAYOUT_CS_CZ_QWERTZ" : "Czech (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Swiss German (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", - "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK English (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", - "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Canadian French (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Swiss French (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", - "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", - "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanese (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norwegian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguese Brazilian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguese (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Romanian (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", - "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turkish-Q (Qwerty)", - - "NAME" : "RDP", - - "SECTION_HEADER_AUTHENTICATION" : "认证", - "SECTION_HEADER_BASIC_PARAMETERS" : "基础设置", - "SECTION_HEADER_CLIPBOARD" : "剪贴板", - "SECTION_HEADER_DEVICE_REDIRECTION" : "设备重定向", - "SECTION_HEADER_DISPLAY" : "显示", - "SECTION_HEADER_GATEWAY" : "远程桌面网关", - "SECTION_HEADER_LOAD_BALANCING" : "负载平衡", - "SECTION_HEADER_NETWORK" : "网络", - "SECTION_HEADER_PERFORMANCE" : "性能", - "SECTION_HEADER_PRECONNECTION_PDU" : "预连接 PDU / Hyper-V", - "SECTION_HEADER_RECORDING" : "屏幕录像", - "SECTION_HEADER_REMOTEAPP" : "RemoteApp", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "网络唤醒(WoL)" - - }, - - "PROTOCOL_SSH" : { - - "FIELD_HEADER_BACKSPACE" : "退格键发送:", - "FIELD_HEADER_COLOR_SCHEME" : "配色方案:", - "FIELD_HEADER_COMMAND" : "运行命令:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "自动建立 Typescript 目录:", - "FIELD_HEADER_DISABLE_COPY" : "禁用从终端复制:", - "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", - "FIELD_HEADER_FONT_NAME" : "字体名:", - "FIELD_HEADER_FONT_SIZE" : "字体大小:", - "FIELD_HEADER_ENABLE_SFTP" : "启用SFTP:", - "FIELD_HEADER_HOST_KEY" : "公钥(Base64):", - "FIELD_HEADER_HOSTNAME" : "主机名:", - "FIELD_HEADER_LOCALE" : "语言/地区($LANG):", - "FIELD_HEADER_USERNAME" : "用户名:", - "FIELD_HEADER_PASSWORD" : "密码:", - "FIELD_HEADER_PASSPHRASE" : "口令:", - "FIELD_HEADER_PORT" : "端口:", - "FIELD_HEADER_PRIVATE_KEY" : "私钥:", - "FIELD_HEADER_SCROLLBACK" : "最大回滚尺寸:", - "FIELD_HEADER_READ_ONLY" : "只读:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", - "FIELD_HEADER_RECORDING_NAME" : "录像名:", - "FIELD_HEADER_RECORDING_PATH" : "录像路径:", - "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "服务器 keepalive 时间间隔:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "禁用文件下载:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "文件浏览器根目录:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "禁用文件上传:", - "FIELD_HEADER_TERMINAL_TYPE" : "终端类型:", - "FIELD_HEADER_TIMEZONE" : "时区($TZ):", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 名称:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 路径:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", - "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", - "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", - "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "退格键(Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "删除键(Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "白底黑字", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "黑底灰字", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "黑底绿字", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "黑底白字", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "SSH", - - "SECTION_HEADER_AUTHENTICATION" : "认证", - "SECTION_HEADER_BEHAVIOR" : "终端行为", - "SECTION_HEADER_CLIPBOARD" : "剪贴板", - "SECTION_HEADER_DISPLAY" : "显示", - "SECTION_HEADER_NETWORK" : "网络", - "SECTION_HEADER_RECORDING" : "屏幕录像", - "SECTION_HEADER_SESSION" : "会话 / 环境", - "SECTION_HEADER_TYPESCRIPT" : "Typescript(文本会话录像)", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "网络唤醒(WoL)" - - }, - - "PROTOCOL_TELNET" : { - - "FIELD_HEADER_BACKSPACE" : "发送退格键:", - "FIELD_HEADER_COLOR_SCHEME" : "配色方案:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动创建记录路径:", - "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "自动创建 Typescript 路径:", - "FIELD_HEADER_DISABLE_COPY" : "禁止从终端复制:", - "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", - "FIELD_HEADER_FONT_NAME" : "字体名称:", - "FIELD_HEADER_FONT_SIZE" : "字体大小:", - "FIELD_HEADER_HOSTNAME" : "主机名:", - "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "登录失败的正则表达式:", - "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "登录成功的正则表达式:", - "FIELD_HEADER_USERNAME" : "用户名:", - "FIELD_HEADER_USERNAME_REGEX" : "用户名正则表达式:", - "FIELD_HEADER_PASSWORD" : "密码:", - "FIELD_HEADER_PASSWORD_REGEX" : "密码正则表达式:", - "FIELD_HEADER_PORT" : "端口:", - "FIELD_HEADER_READ_ONLY" : "只读:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图形/流:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含关键事件:", - "FIELD_HEADER_RECORDING_NAME" : "记录名称:", - "FIELD_HEADER_RECORDING_PATH" : "记录路径:", - "FIELD_HEADER_SCROLLBACK" : "最大回滚尺寸:", - "FIELD_HEADER_TERMINAL_TYPE" : "终端类型:", - "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 名称:", - "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 路径:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", - "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", - "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", - "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口:", - "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", - - "FIELD_OPTION_BACKSPACE_EMPTY" : "", - "FIELD_OPTION_BACKSPACE_8" : "退格键(Ctrl-H)", - "FIELD_OPTION_BACKSPACE_127" : "删除键(Ctrl-?)", - - "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "白底黑字", - "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", - "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "黑底灰字", - "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "黑底绿字", - "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "黑底白字", - - "FIELD_OPTION_FONT_SIZE_8" : "8", - "FIELD_OPTION_FONT_SIZE_9" : "9", - "FIELD_OPTION_FONT_SIZE_10" : "10", - "FIELD_OPTION_FONT_SIZE_11" : "11", - "FIELD_OPTION_FONT_SIZE_12" : "12", - "FIELD_OPTION_FONT_SIZE_14" : "14", - "FIELD_OPTION_FONT_SIZE_18" : "18", - "FIELD_OPTION_FONT_SIZE_24" : "24", - "FIELD_OPTION_FONT_SIZE_30" : "30", - "FIELD_OPTION_FONT_SIZE_36" : "36", - "FIELD_OPTION_FONT_SIZE_48" : "48", - "FIELD_OPTION_FONT_SIZE_60" : "60", - "FIELD_OPTION_FONT_SIZE_72" : "72", - "FIELD_OPTION_FONT_SIZE_96" : "96", - "FIELD_OPTION_FONT_SIZE_EMPTY" : "", - - "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", - "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", - "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", - "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", - "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", - "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", - "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", - - "NAME" : "Telnet", - - "SECTION_HEADER_AUTHENTICATION" : "认证", - "SECTION_HEADER_BEHAVIOR" : "终端行为", - "SECTION_HEADER_CLIPBOARD" : "剪贴板", - "SECTION_HEADER_DISPLAY" : "显示", - "SECTION_HEADER_RECORDING" : "屏幕录像", - "SECTION_HEADER_TYPESCRIPT" : "Typescript(文本会话录像)", - "SECTION_HEADER_NETWORK" : "网络", - "SECTION_HEADER_WOL" : "网络唤醒(WoL)" - - }, - - "PROTOCOL_VNC" : { - - "FIELD_HEADER_AUDIO_SERVERNAME" : "音频服务器名:", - "FIELD_HEADER_CLIPBOARD_ENCODING" : "编码:", - "FIELD_HEADER_COLOR_DEPTH" : "色彩深度:", - "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", - "FIELD_HEADER_CURSOR" : "光标:", - "FIELD_HEADER_DEST_HOST" : "目标主机:", - "FIELD_HEADER_DEST_PORT" : "目标端口:", - "FIELD_HEADER_DISABLE_COPY" : "禁用从远程桌面复制:", - "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", - "FIELD_HEADER_ENABLE_AUDIO" : "启用音频:", - "FIELD_HEADER_ENABLE_SFTP" : "启用 SFTP:", - "FIELD_HEADER_FORCE_LOSSLESS" : "强制无损压缩:", - "FIELD_HEADER_HOSTNAME" : "主机名:", - "FIELD_HEADER_USERNAME" : "用户名:", - "FIELD_HEADER_PASSWORD" : "密码:", - "FIELD_HEADER_PORT" : "端口:", - "FIELD_HEADER_READ_ONLY" : "只读:", - "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", - "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", - "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", - "FIELD_HEADER_RECORDING_NAME" : "录像名:", - "FIELD_HEADER_RECORDING_PATH" : "录像路径:", - "FIELD_HEADER_SFTP_DIRECTORY" : "缺省文件上传目录:", - "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "禁用文件下载:", - "FIELD_HEADER_SFTP_HOST_KEY" : "公钥(Base64):", - "FIELD_HEADER_SFTP_HOSTNAME" : "主机名:", - "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive 时间间隔:", - "FIELD_HEADER_SFTP_PASSPHRASE" : "口令:", - "FIELD_HEADER_SFTP_PASSWORD" : "密码:", - "FIELD_HEADER_SFTP_PORT" : "端口:", - "FIELD_HEADER_SFTP_PRIVATE_KEY" : "私钥:", - "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "文件浏览器根目录:", - "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "禁用文件上传:", - "FIELD_HEADER_SFTP_USERNAME" : "用户名:", - "FIELD_HEADER_SWAP_RED_BLUE" : "交换红/蓝成分:", - "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", - "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", - "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", - "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口: ", - "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", - - "FIELD_OPTION_COLOR_DEPTH_8" : "256 色", - "FIELD_OPTION_COLOR_DEPTH_16" : "低彩色(16 位)", - "FIELD_OPTION_COLOR_DEPTH_24" : "真彩色(24 位)", - "FIELD_OPTION_COLOR_DEPTH_32" : "真彩色(32 位)", - "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", - - "FIELD_OPTION_CURSOR_EMPTY" : "", - "FIELD_OPTION_CURSOR_LOCAL" : "本地", - "FIELD_OPTION_CURSOR_REMOTE" : "远程", - - "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", - "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", - "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", - "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", - - "NAME" : "VNC", - - "SECTION_HEADER_AUDIO" : "音频", - "SECTION_HEADER_AUTHENTICATION" : "认证", - "SECTION_HEADER_CLIPBOARD" : "剪贴板", - "SECTION_HEADER_DISPLAY" : "显示", - "SECTION_HEADER_NETWORK" : "网络", - "SECTION_HEADER_RECORDING" : "屏幕录像", - "SECTION_HEADER_REPEATER" : "VNC 中继", - "SECTION_HEADER_SFTP" : "SFTP", - "SECTION_HEADER_WOL" : "网络唤醒(WoL)" - - }, - - "SETTINGS" : { - - "SECTION_HEADER_SETTINGS" : "设置" - - }, - - "SETTINGS_CONNECTION_HISTORY" : { - - "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", - "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", - "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FILENAME_HISTORY_CSV" : "连接历史.csv", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_CONNECTION_HISTORY" : "下表中是过往的连接历史,可以点击列头来进行排序。如需搜索特定的记录,输入一个过滤字符串并点击“搜索”。列表中将只显示符合过滤条件的记录。", - - "INFO_CONNECTION_DURATION_UNKNOWN" : "--", - "INFO_NO_HISTORY" : "无符合条件的记录", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "连接名", - "TABLE_HEADER_SESSION_DURATION" : "持续时间", - "TABLE_HEADER_SESSION_LOGS" : "日志", - "TABLE_HEADER_SESSION_REMOTEHOST" : "远程主机", - "TABLE_HEADER_SESSION_STARTDATE" : "起始时间", - "TABLE_HEADER_SESSION_USERNAME" : "用户名", - - "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" - - }, - - "SETTINGS_CONNECTIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", - "ACTION_NEW_CONNECTION" : "新建连接", - "ACTION_NEW_CONNECTION_GROUP" : "新建连接组", - "ACTION_NEW_SHARING_PROFILE" : "新建共享设定", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "HELP_CONNECTIONS" : "点击下列连接,以管理该连接。基于您的权限,可以新建和删除连接,或修改连接的属性(如协议、主机名、端口等)。", - - "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", - - "SECTION_HEADER_CONNECTIONS" : "连接" - - }, - - "SETTINGS_PREFERENCES" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_SAVE" : "@:APP.ACTION_SAVE", - "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", - "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", - - "FIELD_HEADER_LANGUAGE" : "界面语言:", - "FIELD_HEADER_PASSWORD" : "密码:", - "FIELD_HEADER_PASSWORD_OLD" : "当前密码:", - "FIELD_HEADER_PASSWORD_NEW" : "新密码:", - "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "确认新密码:", - "FIELD_HEADER_TIMEZONE" : "时区:", - "FIELD_HEADER_USERNAME" : "用户名:", - - "HELP_DEFAULT_INPUT_METHOD" : "默认输入法决定了 Guacamole 如何接收键盘事件。当使用移动设备或使用 IME 输入时,有可能需要更改设置。本设置可在 Guacamole 菜单内被单个连接的设定覆盖。", - "HELP_DEFAULT_MOUSE_MODE" : "默认鼠标模拟方式决定了新连接内的远程鼠标如何响应屏幕触控。本设置可在 Guacamole 菜单内被单个连接的设定覆盖。", - "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", - "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", - "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", - "HELP_LOCALE" : "以下选项与用户的语言环境有关,并将影响界面各部分的显示方式。", - "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", - "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", - "HELP_UPDATE_PASSWORD" : "如需改变密码,请在下面输入您的当前密码与希望使用的新密码,并点击“更新密码” 。密码的改动会立即生效。", - - "INFO_PASSWORD_CHANGED" : "密码已更改。", - "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "用户设定已保存。", - - "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", - "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", - "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", - - "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "缺省输入法", - "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "缺省鼠标模拟方式", - "SECTION_HEADER_UPDATE_PASSWORD" : "更改密码" - - }, - - "SETTINGS_USERS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER" : "新用户", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USERS" : "点击下面的用户以管理该用户。基于您的权限,可以新增和删除用户,也可以更改他们的密码。", - - "SECTION_HEADER_USERS" : "用户", - - "TABLE_HEADER_FULL_NAME" : "全名", - "TABLE_HEADER_LAST_ACTIVE" : "最近活动", - "TABLE_HEADER_ORGANIZATION" : "组织", - "TABLE_HEADER_USERNAME" : "用户名" - - }, - - "SETTINGS_USER_GROUPS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_NEW_USER_GROUP" : "新建用户组", - - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_USER_GROUPS" : "单击或触摸下面的组以管理该组。 根据您的访问级别,可以添加和删除组,还可以更改其成员用户和用户组。", - - "SECTION_HEADER_USER_GROUPS" : "用户组", - - "TABLE_HEADER_USER_GROUP_NAME" : "用户组名称" - - }, - - "SETTINGS_SESSIONS" : { - - "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", - "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", - "ACTION_DELETE" : "终止会话", - - "DIALOG_HEADER_CONFIRM_DELETE" : "终止会话", - "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", - - "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", - - "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", - - "HELP_SESSIONS" : "该页面将填充当前活动的连接。 列出的连接和终止连接的能力取决于您的访问级别。如需终止一个或多个会话,勾选目标会话并点击“终止会话”。终止会话会立即断开对应用户的连接。", - - "INFO_NO_SESSIONS" : "无活动会话", - - "SECTION_HEADER_SESSIONS" : "活动会话", - - "TABLE_HEADER_SESSION_CONNECTION_NAME" : "连接名", - "TABLE_HEADER_SESSION_REMOTEHOST" : "远程主机", - "TABLE_HEADER_SESSION_STARTDATE" : "开始时间", - "TABLE_HEADER_SESSION_USERNAME" : "用户名", - - "TEXT_CONFIRM_DELETE" : "确定要终止所选定的会话?对应的用户会被立即断开连接。" - - }, - - "USER_ATTRIBUTES" : { - - "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "电邮地址:", - "FIELD_HEADER_GUAC_FULL_NAME" : "全名:", - "FIELD_HEADER_GUAC_ORGANIZATION" : "组织:", - "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "职位:" - - }, - - "USER_MENU" : { - - "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", - "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", - "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", - "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", - "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", - "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", - "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", - "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", - "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" - - } - -} diff --git a/guacamole/src/main/frontend/src/verifyCachedVersion.js b/guacamole/src/main/frontend/src/verifyCachedVersion.js deleted file mode 100644 index db9e14409d..0000000000 --- a/guacamole/src/main/frontend/src/verifyCachedVersion.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Automatically reloads the current page and clears relevant browser cache if - * the build that produced index.html is different/older than the build that - * produced the JavaScript loaded by index.html. - * - * @private - * @param {Location} location - * The Location object representing the URL of the current page. - * - * @param {Storate} [sessionStorage] - * The Storage object that should optionally be used to avoid reloading the - * current page in a loop if it proves impossible to clear cache. - */ -(function verifyCachedVersion(location, sessionStorage) { - - /** - * The meta element containing the build identifier of the Guacamole build - * that produced index.html. - * - * @private - * @type {HTMLMetaElement} - */ - var buildMeta = document.head.querySelector('meta[name=build]'); - - // Verify that index.html came from the same build as this JavaScript file, - // forcing a reload if out-of-date - if (!buildMeta || buildMeta.content !== '${guacamole.build.identifier}') { - - if (sessionStorage) { - - // Bail out if we have already tried to automatically refresh the - // cache but were unsuccessful - if (sessionStorage.getItem('reloadedFor') === '${guacamole.build.identifier}') { - console.warn('The version of Guacamole cached by your ' - + 'browser does not match the version of Guacamole on the ' - + 'server. To avoid unexpected errors, please clear your ' - + 'browser cache.'); - return; - } - - sessionStorage.setItem('reloadedFor', '${guacamole.build.identifier}'); - - } - - // Force refresh of cache by issuing an HTTP request with headers that - // request revalidation of cached content - var xhr = new XMLHttpRequest(); - xhr.open('GET', '', true); - xhr.setRequestHeader('Cache-Control', 'no-cache'); - xhr.setRequestHeader('Pragma', 'no-cache'); - - xhr.onreadystatechange = function readyStateChanged() { - - // Reload current page when ready (this call to reload MAY be - // sufficient in itself to clear cache, but this is not - // guaranteed by any standard) - if (xhr.readyState === XMLHttpRequest.DONE) - location.reload(true); - - }; - - xhr.send(); - - } - -})(window.location, window.sessionStorage); diff --git a/guacamole/src/main/frontend/webpack.config.js b/guacamole/src/main/frontend/webpack.config.js deleted file mode 100644 index 9a96799119..0000000000 --- a/guacamole/src/main/frontend/webpack.config.js +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -const AngularTemplateCacheWebpackPlugin = require('angular-templatecache-webpack-plugin'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const ClosureWebpackPlugin = require('closure-webpack-plugin'); -const CopyPlugin = require('copy-webpack-plugin'); -const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); -const DependencyListPlugin = require('./plugins/dependency-list-plugin'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const webpack = require('webpack'); - -module.exports = { - - bail: true, - mode: 'production', - stats: 'minimal', - - output: { - path: __dirname + '/dist', - filename: 'guacamole.[contenthash].js', - }, - - // Generate source maps - devtool: 'source-map', - - // Entry point for the Guacamole webapp is the "index" AngularJS module - entry: './src/app/index/indexModule.js', - - module: { - rules: [ - - // NOTE: This is required in order to parse ES2020 language features, - // like the optional chaining and nullish coalescing operators. It - // specifically needs to operate on the node-modules directory since - // Webpack 4 cannot handle such language features. - { - test: /\.js$/i, - use: { - loader: 'babel-loader', - options: { - presets: [ - ['@babel/preset-env'] - ] - } - } - }, - - // Automatically extract imported CSS for later reference within separate CSS file - { - test: /\.css$/i, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { - import: false, - url: false - } - } - ] - }, - - /* - * Necessary to be able to use angular 1 with webpack as explained in https://github.com/webpack/webpack/issues/2049 - */ - { - test: require.resolve('angular'), - loader: 'exports-loader', - options: { - type: 'commonjs', - exports: 'single window.angular' - } - } - - ] - }, - optimization: { - minimizer: [ - - // Minify using Google Closure Compiler - new ClosureWebpackPlugin({ mode: 'STANDARD' }, { - languageIn: 'ECMASCRIPT_2020', - languageOut: 'ECMASCRIPT5', - compilationLevel: 'SIMPLE' - }), - - new CssMinimizerPlugin() - - ], - splitChunks: { - cacheGroups: { - - // Bundle CSS as one file - styles: { - name: 'styles', - test: /\.css$/, - chunks: 'all', - enforce: true - } - - } - } - }, - plugins: [ - - new AngularTemplateCacheWebpackPlugin({ - module: 'templates-main', - root: 'app/', - source: 'src/app/**/*.html', - standalone: true - }), - - // Automatically clean out dist/ directory - new CleanWebpackPlugin(), - - // Copy static files to dist/ - new CopyPlugin([ - { from: 'app/**/*' }, - { from: 'fonts/**/*' }, - { from: 'images/**/*' }, - { from: 'layouts/**/*' }, - { from: 'manifest.json' }, - { from: 'translations/**/*' }, - { from: 'verifyCachedVersion.js' } - ], { - context: 'src/' - }), - - // Copy core libraries for global inclusion - new CopyPlugin([ - { from: 'angular/angular.min.js' }, - { from: 'blob-polyfill/Blob.js' }, - { from: 'datalist-polyfill/datalist-polyfill.min.js' }, - { from: 'jquery/dist/jquery.min.js' }, - { from: 'lodash/lodash.min.js' } - ], { - context: 'node_modules/' - }), - - // Generate index.html from template - new HtmlWebpackPlugin({ - inject: false, - template: 'src/index.html' - }), - - // Extract CSS from Webpack bundle as separate file - new MiniCssExtractPlugin({ - filename: 'guacamole.[contenthash].css', - chunkFilename: '[id].guacamole.[contenthash].css' - }), - - // List all bundled node modules for sake of automatic LICENSE file - // generation / sanity checks - new DependencyListPlugin(), - - // Automatically require used modules - new webpack.ProvidePlugin({ - jstz: 'jstz', - Pickr: '@simonwep/pickr', - saveAs: 'file-saver' - }) - - ], - resolve: { - - // Include Node modules and base source tree within search path for - // import/resolve - modules: [ - 'src', - 'node_modules' - ] - - } - -}; - From 9a05d3558bb2b5bcf57811cf06e2d7a19bdb380e Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Tue, 20 Jun 2023 09:55:11 +0200 Subject: [PATCH 02/80] GUACAMOLE-1085: Add Angular frontend to src/main/guacamole-frontend --- guacamole/src/main/frontend/.gitignore | 3 - .../src/main/guacamole-frontend/.editorconfig | 32 + .../src/main/guacamole-frontend/.gitignore | 8 + .../src/main/guacamole-frontend/README.md | 64 + .../src/main/guacamole-frontend/angular.json | 125 + .../main/guacamole-frontend/package-lock.json | 17970 ++++++++++++++++ .../src/main/guacamole-frontend/package.json | 47 + .../projects/guacamole-frontend/karma.conf.js | 59 + .../src/app/app-routing.module.ts | 252 + .../src/app/app.component.html | 82 + .../src/app/app.component.spec.ts | 43 + .../src/app/app.component.ts | 440 + .../guacamole-frontend/src/app/app.module.ts | 66 + .../src/app/auth/auth.module.ts | 33 + .../interceptor/authentication.interceptor.ts | 66 + .../service/authentication.service.spec.ts | 64 + .../auth/service/authentication.service.ts | 527 + .../app/auth/types/AuthenticationResult.ts | 67 + .../src/app/client/client.module.ts | 87 + .../client-page/client-page.component.html | 279 + .../client-page/client-page.component.ts | 888 + .../guac-client-notification.component.html | 23 + .../guac-client-notification.component.ts | 457 + .../guac-client-user-count.component.html | 30 + .../guac-client-user-count.component.ts | 274 + .../guac-client-zoom.component.html | 37 + .../guac-client-zoom.component.ts | 99 + .../guac-client/guac-client.component.html | 35 + .../guac-client/guac-client.component.ts | 662 + .../guac-file-transfer-manager.component.html | 41 + .../guac-file-transfer-manager.component.ts | 104 + .../guac-file-transfer.component.html | 43 + .../guac-file-transfer.component.ts | 246 + .../guac-thumbnail.component.html | 29 + .../guac-thumbnail.component.ts | 141 + .../guac-tiled-clients.component.html | 53 + .../guac-tiled-clients.component.ts | 190 + .../guac-tiled-thumbnails.component.html | 32 + .../guac-tiled-thumbnails.component.ts | 71 + .../directives/guac-zoom-ctrl.directive.ts | 92 + .../services/guac-client-manager.service.ts | 342 + .../services/guac-translate.service.spec.ts | 122 + .../client/services/guac-translate.service.ts | 98 + .../client/services/managed-client.service.ts | 859 + .../services/managed-file-upload.service.ts | 166 + .../services/managed-filesystem.service.ts | 213 + .../src/app/client/styles/client.css | 137 + .../client/styles/connection-select-menu.css | 62 + .../app/client/styles/connection-warning.css | 56 + .../src/app/client/styles/display.css | 66 + .../src/app/client/styles/file-browser.css | 49 + .../client/styles/file-transfer-dialog.css | 118 + .../src/app/client/styles/filesystem-menu.css | 72 + .../src/app/client/styles/guac-menu.css | 170 + .../src/app/client/styles/keyboard.css | 34 + .../src/app/client/styles/menu.css | 146 + .../src/app/client/styles/notification.css | 95 + .../src/app/client/styles/share-menu.css | 58 + .../app/client/styles/thumbnail-display.css | 30 + .../app/client/styles/tiled-client-grid.css | 277 + .../app/client/styles/transfer-manager.css | 51 + .../src/app/client/styles/transfer.css | 132 + .../src/app/client/styles/viewport.css | 27 + .../src/app/client/styles/zoom.css | 75 + .../src/app/client/types/ClientMenu.ts | 56 + .../src/app/client/types/ClientProperties.ts | 92 + .../app/client/types/ConnectionListContext.ts | 45 + .../src/app/client/types/ManagedArgument.ts | 145 + .../src/app/client/types/ManagedClient.ts | 224 + .../app/client/types/ManagedClientGroup.ts | 367 + .../app/client/types/ManagedClientState.ts | 174 + .../client/types/ManagedClientThumbnail.ts | 49 + .../src/app/client/types/ManagedDisplay.ts | 160 + .../client/types/ManagedFileTransferState.ts | 121 + .../src/app/client/types/ManagedFileUpload.ts | 70 + .../src/app/client/types/ManagedFilesystem.ts | 159 + .../src/app/client/types/ManagedShareLink.ts | 94 + .../src/app/client/types/TranslationResult.ts | 51 + .../src/app/clipboard/clipboard.module.ts | 40 + .../clipboard/clipboard.component.html | 26 + .../clipboard/clipboard.component.ts | 113 + .../clipboard/services/clipboard.service.ts | 638 + .../src/app/clipboard/styles/clipboard.css | 70 + .../src/app/clipboard/types/ClipboardData.ts | 57 + .../types/GuacFrontendEventArguments.ts | 63 + .../checkbox-field.component.html | 27 + .../checkbox-field.component.spec.ts | 40 + .../checkbox-field.component.ts | 91 + .../date-field/date-field.component.html | 29 + .../date-field/date-field.component.spec.ts | 40 + .../date-field/date-field.component.ts | 116 + .../email-field/email-field.component.html | 30 + .../email-field/email-field.component.spec.ts | 40 + .../email-field/email-field.component.ts | 53 + .../form-field-base.component.ts | 140 + .../form-field/form-field.component.html | 30 + .../form-field/form-field.component.spec.ts | 40 + .../form-field/form-field.component.ts | 187 + .../form/components/form/form.component.html | 43 + .../components/form/form.component.spec.ts | 40 + .../form/components/form/form.component.ts | 219 + .../guac-input-color.component.html | 30 + .../guac-input-color.component.spec.ts | 40 + .../guac-input-color.component.ts | 119 + .../language-field.component.html | 27 + .../language-field.component.spec.ts | 40 + .../language-field.component.ts | 80 + .../number-field/number-field.component.html | 27 + .../number-field.component.spec.ts | 40 + .../number-field/number-field.component.ts | 90 + .../password-field.component.html | 30 + .../password-field.component.spec.ts | 40 + .../password-field.component.ts | 97 + .../redirect-field.component.html | 25 + .../redirect-field.component.spec.ts | 40 + .../redirect-field.component.ts | 53 + .../select-field/select-field.component.html | 29 + .../select-field.component.spec.ts | 40 + .../select-field/select-field.component.ts | 57 + ...terminal-color-scheme-field.component.html | 101 + ...minal-color-scheme-field.component.spec.ts | 40 + .../terminal-color-scheme-field.component.ts | 286 + .../text-area-field.component.html | 27 + .../text-area-field.component.spec.ts | 40 + .../text-area-field.component.ts | 52 + .../text-field/text-field.component.html | 35 + .../text-field/text-field.component.spec.ts | 40 + .../text-field/text-field.component.ts | 70 + .../time-field/time-field.component.html | 29 + .../time-field/time-field.component.spec.ts | 40 + .../time-field/time-field.component.ts | 117 + .../time-zone-field.component.html | 41 + .../time-zone-field.component.spec.ts | 40 + .../time-zone-field.component.ts | 796 + .../username-field.component.html | 28 + .../username-field.component.spec.ts | 40 + .../username-field.component.ts | 49 + .../directives/guac-lenient-date.directive.ts | 133 + .../directives/guac-lenient-time.directive.ts | 155 + .../src/app/form/form.module.ts | 102 + .../form/service/color-picker.service.spec.ts | 35 + .../app/form/service/color-picker.service.ts | 298 + .../src/app/form/service/form.service.spec.ts | 35 + .../src/app/form/service/form.service.ts | 424 + .../src/app/form/styles/form-field.css | 47 + .../src/app/form/styles/form.css | 24 + .../src/app/form/styles/redirect-field.css | 35 + .../styles/terminal-color-scheme-field.css | 158 + .../src/app/form/types/ColorScheme.spec.ts | 44 + .../src/app/form/types/ColorScheme.ts | 938 + .../src/app/form/types/FieldType.ts | 46 + .../guac-group-list.component.html | 62 + .../guac-group-list.component.ts | 286 + .../src/app/group-list/group-list.module.ts | 42 + .../src/app/group-list/types/GroupListItem.ts | 438 + .../src/app/history/HistoryEntry.ts | 50 + .../app/history/guac-history.service.spec.ts | 95 + .../src/app/history/guac-history.service.ts | 91 + .../src/app/history/history.module.ts | 34 + .../connection-group.component.html | 28 + .../connection-group.component.ts | 37 + .../connection/connection.component.html | 34 + .../connection/connection.component.ts | 37 + .../guac-recent-connections.component.html | 41 + .../guac-recent-connections.component.ts | 172 + .../home/components/home/home.component.html | 63 + .../home/components/home/home.component.ts | 103 + .../src/app/home/home.module.ts | 55 + .../src/app/home/styles/home.css | 77 + .../src/app/home/types/ActiveConnection.ts | 42 + .../src/app/home/types/RecentConnection.ts | 42 + .../config/default-headers.interceptor.ts | 53 + .../src/app/index/index.module.ts | 39 + .../src/app/index/pipes/escape.pipe.ts | 39 + .../index/services/apply-patches.service.ts | 104 + .../index/services/style-loader.service.ts | 76 + .../src/app/index/styles/animation.css | 59 + .../index/styles/automatic-login-rejected.css | 30 + .../src/app/index/styles/buttons.css | 134 + .../src/app/index/styles/cloak.css | 27 + .../src/app/index/styles/fatal-page-error.css | 63 + .../src/app/index/styles/font-carlito.css | 47 + .../src/app/index/styles/headers.css | 108 + .../src/app/index/styles/input.css | 45 + .../src/app/index/styles/lists.css | 90 + .../src/app/index/styles/loading.css | 76 + .../src/app/index/styles/logged-out.css | 29 + .../app/index/styles/other-connections.css | 203 + .../src/app/index/styles/sorted-tables.css | 61 + .../src/app/index/styles/status.css | 42 + .../src/app/index/styles/ui.css | 283 + .../src/app/index/types/PatchOperation.ts | 181 + .../guac-filter/guac-filter.component.html | 28 + .../guac-filter/guac-filter.component.ts | 57 + .../guac-pager/guac-pager.component.html | 45 + .../guac-pager/guac-pager.component.ts | 276 + .../guac-user-item.component.html | 21 + .../guac-user-item.component.ts | 89 + .../directives/guac-sort-order.directive.ts | 142 + .../src/app/list/list.module.ts | 51 + .../data-source-builder.service.spec.ts | 213 + .../services/data-source-builder.service.ts | 49 + .../src/app/list/services/filter.service.ts | 60 + .../app/list/services/pagination.service.ts | 56 + .../app/list/services/sort.service.spec.ts | 110 + .../src/app/list/services/sort.service.ts | 81 + .../src/app/list/styles/filter.css | 33 + .../src/app/list/styles/pager.css | 87 + .../src/app/list/styles/user-item.css | 23 + .../src/app/list/types/DataSource.ts | 163 + .../src/app/list/types/DataSourceBuilder.ts | 136 + .../src/app/list/types/FilterPattern.ts | 247 + .../src/app/list/types/FilterToken.ts | 219 + .../src/app/list/types/IPv4Network.ts | 111 + .../src/app/list/types/IPv6Network.ts | 214 + .../src/app/list/types/SortOrder.ts | 132 + .../src/app/locale/locale.module.ts | 128 + .../service/translation-loader.service.ts | 188 + .../app/locale/service/translation.service.ts | 113 + .../components/login/login.component.html | 69 + .../login/components/login/login.component.ts | 260 + .../src/app/login/login.module.ts | 47 + .../src/app/login/styles/animation.css | 34 + .../src/app/login/styles/dialog.css | 128 + .../src/app/login/styles/input.css | 47 + .../src/app/login/styles/login.css | 86 + .../data-source-tabs.component.html | 21 + .../data-source-tabs.component.ts | 98 + .../identifier-set-editor.component.html | 69 + .../identifier-set-editor.component.ts | 342 + ...on-chooser-connection-group.component.html | 22 + ...tion-chooser-connection-group.component.ts | 32 + .../location-chooser.component.html | 40 + .../location-chooser.component.ts | 167 + .../manage-connection.component.html | 127 + .../manage-connection.component.ts | 413 + .../manage-user-group.component.html | 114 + .../manage-user-group.component.ts | 564 + .../manage-user/manage-user.component.html | 113 + .../manage-user/manage-user.component.ts | 580 + .../management-buttons.component.html | 27 + .../management-buttons.component.ts | 194 + .../system-permission-editor.component.html | 36 + .../system-permission-editor.component.ts | 303 + .../src/app/manage/manage.module.ts | 75 + .../app/manage/services/user-page.service.ts | 492 + .../src/app/manage/styles/attributes.css | 63 + .../manage/styles/connection-parameter.css | 51 + .../src/app/manage/styles/forms.css | 29 + .../src/app/manage/styles/locationChooser.css | 35 + .../app/manage/styles/manage-user-group.css | 71 + .../src/app/manage/styles/manage-user.css | 71 + .../src/app/manage/styles/related-objects.css | 82 + .../app/manage/types/HistoryEntryWrapper.ts | 69 + .../src/app/manage/types/ManageableUser.ts | 50 + .../app/manage/types/ManageableUserGroup.ts | 51 + .../app/manage/types/ManagementPermissions.ts | 171 + .../guac-menu/guac-menu.component.html | 27 + .../guac-menu/guac-menu.component.ts | 85 + .../guac-page-list.component.html | 41 + .../guac-page-list.component.spec.ts | 89 + .../guac-page-list.component.ts | 261 + .../guac-section-tabs.component.html | 28 + .../guac-section-tabs.component.spec.ts | 79 + .../guac-section-tabs.component.ts | 138 + .../guac-user-menu.component.html | 51 + .../guac-user-menu.component.ts | 155 + .../src/app/navigation/navigation.module.ts | 52 + .../service/client-identifier.service.ts | 174 + .../src/app/navigation/styles/menu.css | 161 + .../src/app/navigation/styles/tabs.css | 63 + .../src/app/navigation/styles/user-menu.css | 99 + .../app/navigation/types/ClientIdentifier.ts | 88 + .../src/app/navigation/types/MenuAction.ts | 59 + .../app/navigation/types/PageDefinition.ts | 68 + .../guac-modal/guac-modal.component.html | 21 + .../guac-modal/guac-modal.component.spec.ts | 40 + .../guac-modal/guac-modal.component.ts | 32 + .../guac-notification.component.html | 66 + .../guac-notification.component.ts | 135 + .../app/notification/notification.module.ts | 48 + .../services/guac-notification.service.ts | 127 + .../src/app/notification/styles/modal.css | 51 + .../app/notification/styles/notification.css | 144 + .../app/notification/types/Notification.ts | 121 + .../notification/types/NotificationAction.ts | 40 + .../types/NotificationCountdown.ts | 44 + .../types/NotificationProgress.ts | 50 + .../player-display.component.html | 21 + .../player-display.component.spec.ts | 42 + .../player-display.component.ts | 124 + .../src/app/player/player.component.html | 66 + .../src/app/player/player.component.spec.ts | 42 + .../src/app/player/player.component.ts | 362 + .../src/app/player/player.module.ts | 47 + .../progress-indicator.component.html | 30 + .../progress-indicator.component.spec.ts | 40 + .../progress-indicator.component.ts | 61 + .../src/app/player/styles/player.css | 120 + .../src/app/player/styles/playerDisplay.css | 50 + .../app/player/styles/progressIndicator.css | 98 + .../src/app/player/styles/seek.css | 143 + .../error-handling.interceptor.spec.ts | 41 + .../interceptor/error-handling.interceptor.ts | 78 + .../src/app/rest/rest.module.ts | 36 + .../rest/service/active-connection.service.ts | 165 + .../rest/service/connection-group.service.ts | 180 + .../app/rest/service/connection.service.ts | 237 + .../service/data-source-service.service.ts | 125 + .../src/app/rest/service/history.service.ts | 86 + .../src/app/rest/service/language.service.ts | 58 + .../app/rest/service/membership.service.ts | 341 + .../src/app/rest/service/patch.service.ts | 55 + .../app/rest/service/permission.service.ts | 337 + .../app/rest/service/request.service.spec.ts | 68 + .../src/app/rest/service/request.service.ts | 200 + .../src/app/rest/service/schema.service.ts | 224 + .../rest/service/sharing-profile.service.ts | 167 + .../src/app/rest/service/tunnel.service.ts | 390 + .../rest/service/user-credential.service.ts | 112 + .../app/rest/service/user-group.service.ts | 231 + .../src/app/rest/service/user.service.ts | 256 + .../src/app/rest/types/ActiveConnection.ts | 77 + .../src/app/rest/types/ActivityLog.ts | 78 + .../src/app/rest/types/Connection.ts | 107 + .../src/app/rest/types/ConnectionGroup.ts | 125 + .../app/rest/types/ConnectionHistoryEntry.ts | 213 + .../src/app/rest/types/DirectoryPatch.ts | 85 + .../app/rest/types/DirectoryPatchOutcome.ts | 70 + .../app/rest/types/DirectoryPatchResponse.ts | 43 + .../src/app/rest/types/Error.ts | 141 + .../src/app/rest/types/Field.ts | 182 + .../src/app/rest/types/Form.ts | 49 + .../src/app/rest/types/PermissionFlagSet.ts | 239 + .../src/app/rest/types/PermissionPatch.ts | 85 + .../src/app/rest/types/PermissionSet.ts | 804 + .../src/app/rest/types/Protocol.ts | 111 + .../src/app/rest/types/RelatedObjectPatch.ts | 80 + .../src/app/rest/types/SharingProfile.ts | 72 + .../src/app/rest/types/TranslatableMessage.ts | 54 + .../src/app/rest/types/User.ts | 104 + .../src/app/rest/types/UserCredentials.ts | 124 + .../src/app/rest/types/UserGroup.ts | 51 + .../src/app/rest/types/UserPasswordUpdate.ts | 48 + .../connection-group.component.html | 28 + .../connection-group.component.ts | 34 + .../connection/connection.component.html | 34 + .../connection/connection.component.ts | 34 + ...settings-connection-history.component.html | 104 + ...c-settings-connection-history.component.ts | 300 + .../guac-settings-connections.component.html | 100 + .../guac-settings-connections.component.ts | 441 + .../guac-settings-preferences.component.html | 135 + .../guac-settings-preferences.component.ts | 313 + .../guac-settings-sessions.component.html | 77 + .../guac-settings-sessions.component.ts | 459 + .../guac-settings-user-groups.component.html | 62 + .../guac-settings-user-groups.component.ts | 318 + .../guac-settings-users.component.html | 81 + .../guac-settings-users.component.ts | 340 + .../new-connection-group.component.html | 23 + .../new-connection-group.component.ts | 34 + .../new-connection.component.html | 23 + .../new-connection.component.ts | 34 + .../new-sharing-profile.component.html | 23 + .../new-sharing-profile.component.ts | 34 + .../settings/settings.component.html | 34 + .../components/settings/settings.component.ts | 53 + .../src/app/settings/services/csv.service.ts | 107 + .../settings/services/preference.service.ts | 155 + .../src/app/settings/settings.module.ts | 92 + .../src/app/settings/styles/buttons.css | 67 + .../app/settings/styles/connection-list.css | 38 + .../app/settings/styles/history-player.css | 87 + .../src/app/settings/styles/history.css | 89 + .../src/app/settings/styles/input-method.css | 23 + .../src/app/settings/styles/mouse-mode.css | 44 + .../src/app/settings/styles/preferences.css | 39 + .../src/app/settings/styles/sessions.css | 31 + .../src/app/settings/styles/settings.css | 71 + .../app/settings/styles/user-group-list.css | 36 + .../src/app/settings/styles/user-list.css | 41 + .../settings/types/ActiveConnectionWrapper.ts | 69 + .../types/ConnectionHistoryEntryWrapper.ts | 152 + .../src/app/settings/types/Preferences.ts | 47 + .../app/storage/local-storage.service.spec.ts | 35 + .../src/app/storage/local-storage.service.ts | 131 + .../session-storage-factory.service.spec.ts | 35 + .../session-storage-factory.service.ts | 142 + .../src/app/storage/storage.module.ts | 33 + .../text-input/guac-key/key.component.html | 21 + .../text-input/guac-key/key.component.spec.ts | 83 + .../app/text-input/guac-key/key.component.ts | 111 + .../guac-text-input/text-input.component.html | 34 + .../text-input.component.spec.ts | 40 + .../guac-text-input/text-input.component.ts | 336 + .../src/app/text-input/styles/textInput.css | 128 + .../src/app/text-input/text-input.module.ts | 45 + .../src/app/util/ApplicationState.ts | 59 + .../src/app/util/interceptor.service.ts | 109 + .../src/app/util/is-array.ts | 28 + .../src/app/util/is-defined.ts | 31 + .../src/app/util/log.service.spec.ts | 35 + .../src/app/util/log.service.ts | 42 + .../guacamole-frontend/src/app/util/noop.ts | 21 + .../src/app/util/test-helper.ts | 30 + .../src/app/util/utility-types.ts | 30 + .../src/fonts/carlito/Carlito-Bold.woff | Bin 0 -> 281212 bytes .../src/fonts/carlito/Carlito-Italic.woff | Bin 0 -> 283500 bytes .../src/fonts/carlito/Carlito-Regular.woff | Bin 0 -> 269832 bytes .../src/fonts/carlito/LICENSE | 95 + .../src/images/action-icons/guac-back.svg | 1 + .../images/action-icons/guac-config-dark.svg | 1 + .../src/images/action-icons/guac-config.svg | 1 + .../images/action-icons/guac-file-import.svg | 1 + .../images/action-icons/guac-first-page.svg | 1 + .../images/action-icons/guac-group-add.svg | 1 + .../images/action-icons/guac-hide-pass.svg | 1 + .../images/action-icons/guac-home-dark.svg | 1 + .../src/images/action-icons/guac-home.svg | 1 + .../src/images/action-icons/guac-key.svg | 1 + .../images/action-icons/guac-last-page.svg | 1 + .../images/action-icons/guac-logout-dark.svg | 1 + .../src/images/action-icons/guac-logout.svg | 1 + .../images/action-icons/guac-monitor-add.svg | 1 + .../images/action-icons/guac-next-page.svg | 1 + .../src/images/action-icons/guac-pause.svg | 1 + .../images/action-icons/guac-play-link.svg | 1 + .../src/images/action-icons/guac-play.svg | 1 + .../images/action-icons/guac-prev-page.svg | 1 + .../images/action-icons/guac-show-pass.svg | 1 + .../src/images/action-icons/guac-user-add.svg | 1 + .../action-icons/guac-user-group-add.svg | 1 + .../src/images/arrows/down.svg | 1 + .../src/images/arrows/left.svg | 1 + .../src/images/arrows/right.svg | 1 + .../src/images/arrows/up.svg | 1 + .../guacamole-frontend/src/images/checker.svg | 1 + .../src/images/checkmark.svg | 1 + .../src/images/circle-arrows.svg | 1 + .../guacamole-frontend/src/images/cog.svg | 1 + .../guacamole-frontend/src/images/drive.svg | 1 + .../guacamole-frontend/src/images/file.svg | 1 + .../src/images/folder-closed.svg | 1 + .../src/images/folder-open.svg | 1 + .../src/images/folder-up.svg | 1 + .../src/images/group-icons/guac-closed.svg | 1 + .../src/images/group-icons/guac-open.svg | 1 + .../src/images/guac-tricolor.svg | 1 + .../guacamole-frontend/src/images/lock.svg | 1 + .../src/images/logo-144.png | Bin 0 -> 9167 bytes .../guacamole-frontend/src/images/logo-64.png | Bin 0 -> 5082 bytes .../src/images/magnifier.svg | 1 + .../src/images/mouse/blank.cur | Bin 0 -> 326 bytes .../src/images/mouse/blank.gif | Bin 0 -> 71 bytes .../src/images/mouse/dot.gif | Bin 0 -> 72 bytes .../guacamole-frontend/src/images/plus.svg | 1 + .../src/images/progress.svg | 1 + .../images/protocol-icons/guac-monitor.svg | 1 + .../src/images/protocol-icons/guac-plug.svg | 1 + .../src/images/protocol-icons/guac-text.svg | 1 + .../src/images/question.svg | 1 + .../src/images/settings/tablet-keys.svg | 1 + .../src/images/settings/touchpad.svg | 1 + .../src/images/settings/touchscreen.svg | 1 + .../src/images/settings/zoom-in.svg | 1 + .../src/images/settings/zoom-out.svg | 1 + .../src/images/share-white.svg | 1 + .../guacamole-frontend/src/images/share.svg | 1 + .../src/images/user-icons/guac-user-group.svg | 1 + .../src/images/user-icons/guac-user-white.svg | 1 + .../src/images/user-icons/guac-user.svg | 1 + .../src/images/warning-white.svg | 1 + .../guacamole-frontend/src/images/warning.svg | 1 + .../guacamole-frontend/src/images/x-red.svg | 1 + .../guacamole-frontend/src/images/x.svg | 1 + .../guacamole-frontend/src/index.html | 36 + .../projects/guacamole-frontend/src/main.ts | 29 + .../guacamole-frontend/src/styles.css | 116 + .../src/translations/ca.json | 1000 + .../src/translations/cs.json | 1138 + .../src/translations/de.json | 878 + .../src/translations/en.json | 1140 + .../src/translations/es.json | 1016 + .../src/translations/fr.json | 1010 + .../src/translations/it.json | 604 + .../src/translations/ja.json | 841 + .../src/translations/ko.json | 991 + .../src/translations/nl.json | 692 + .../src/translations/no.json | 673 + .../src/translations/pl.json | 1052 + .../src/translations/pt.json | 1011 + .../src/translations/ru.json | 842 + .../src/translations/zh.json | 1133 + .../guacamole-frontend/tsconfig.app.json | 14 + .../guacamole-frontend/tsconfig.spec.json | 14 + .../src/main/guacamole-frontend/tsconfig.json | 39 + 497 files changed, 78975 insertions(+), 3 deletions(-) delete mode 100644 guacamole/src/main/frontend/.gitignore create mode 100644 guacamole/src/main/guacamole-frontend/.editorconfig create mode 100644 guacamole/src/main/guacamole-frontend/.gitignore create mode 100644 guacamole/src/main/guacamole-frontend/README.md create mode 100644 guacamole/src/main/guacamole-frontend/angular.json create mode 100644 guacamole/src/main/guacamole-frontend/package-lock.json create mode 100644 guacamole/src/main/guacamole-frontend/package.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app-routing.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/auth.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/interceptor/authentication.interceptor.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/types/AuthenticationResult.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/client.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/directives/guac-zoom-ctrl.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-file-upload.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/client.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-select-menu.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-warning.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/display.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-browser.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-transfer-dialog.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/filesystem-menu.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/guac-menu.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/keyboard.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/menu.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/notification.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/share-menu.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/thumbnail-display.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/tiled-client-grid.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer-manager.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/viewport.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/zoom.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientMenu.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientProperties.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ConnectionListContext.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedArgument.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClient.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientGroup.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientThumbnail.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedDisplay.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileTransferState.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileUpload.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFilesystem.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedShareLink.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/TranslationResult.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/clipboard.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/styles/clipboard.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/types/ClipboardData.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/events/types/GuacFrontendEventArguments.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-date.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-time.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/form.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form-field.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/redirect-field.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/terminal-color-scheme-field.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/group-list.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/HistoryEntry.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/history.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/home.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/styles/home.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/ActiveConnection.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/RecentConnection.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/config/default-headers.interceptor.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/index.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/pipes/escape.pipe.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/apply-patches.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/animation.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/automatic-login-rejected.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/buttons.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/cloak.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/fatal-page-error.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/font-carlito.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/headers.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/input.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/lists.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/loading.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/logged-out.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/other-connections.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/sorted-tables.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/status.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/ui.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/types/PatchOperation.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/directives/guac-sort-order.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/list.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/filter.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/pagination.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/filter.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/pager.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/user-item.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSource.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSourceBuilder.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterPattern.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv4Network.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv6Network.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/locale.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/login.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/animation.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/dialog.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/input.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/login.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/manage.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/attributes.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/connection-parameter.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/forms.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/locationChooser.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user-group.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/related-objects.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUser.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUserGroup.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManagementPermissions.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/navigation.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/service/client-identifier.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/menu.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/tabs.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/user-menu.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/MenuAction.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/PageDefinition.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/notification.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/modal.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/notification.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/Notification.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationAction.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationCountdown.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationProgress.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/player.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/playerDisplay.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/progressIndicator.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/seek.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/rest.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/active-connection.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection-group.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/data-source-service.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/history.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/language.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/membership.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/patch.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/schema.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/sharing-profile.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/tunnel.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-credential.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-group.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActiveConnection.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActivityLog.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Connection.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionHistoryEntry.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatch.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchOutcome.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchResponse.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Error.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionPatch.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Protocol.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/RelatedObjectPatch.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/SharingProfile.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/TranslatableMessage.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/User.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserCredentials.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserGroup.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserPasswordUpdate.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/csv.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/settings.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/buttons.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/connection-list.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history-player.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/input-method.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/mouse-mode.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/preferences.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/sessions.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/settings.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-group-list.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-list.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ActiveConnectionWrapper.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/Preferences.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/storage.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/styles/textInput.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/text-input.module.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/ApplicationState.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/interceptor.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-array.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-defined.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/noop.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/utility-types.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/fonts/carlito/Carlito-Bold.woff create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/fonts/carlito/Carlito-Italic.woff create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/fonts/carlito/Carlito-Regular.woff create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/fonts/carlito/LICENSE create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-back.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config-dark.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-file-import.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-first-page.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-group-add.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-hide-pass.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home-dark.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-key.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-last-page.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout-dark.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-monitor-add.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-next-page.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-pause.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play-link.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-prev-page.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-show-pass.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-add.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-group-add.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/down.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/left.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/right.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/up.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checker.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checkmark.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/circle-arrows.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/cog.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/drive.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/file.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-closed.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-open.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-up.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-closed.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-open.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/guac-tricolor.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/lock.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/logo-144.png create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/logo-64.png create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/magnifier.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/mouse/blank.cur create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/mouse/blank.gif create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/mouse/dot.gif create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/plus.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/progress.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-monitor.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-plug.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-text.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/question.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/tablet-keys.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchpad.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchscreen.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-in.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-out.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share-white.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-group.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-white.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning-white.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x-red.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x.svg create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/index.html create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/styles.css create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ca.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/cs.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/de.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/en.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/es.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/fr.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/it.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ja.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ko.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/nl.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/no.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pl.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pt.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ru.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/zh.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.spec.json create mode 100644 guacamole/src/main/guacamole-frontend/tsconfig.json diff --git a/guacamole/src/main/frontend/.gitignore b/guacamole/src/main/frontend/.gitignore deleted file mode 100644 index 70f460b2e3..0000000000 --- a/guacamole/src/main/frontend/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*~ -node_modules -dist diff --git a/guacamole/src/main/guacamole-frontend/.editorconfig b/guacamole/src/main/guacamole-frontend/.editorconfig new file mode 100644 index 0000000000..41926c5500 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/.editorconfig @@ -0,0 +1,32 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/guacamole/src/main/guacamole-frontend/.gitignore b/guacamole/src/main/guacamole-frontend/.gitignore new file mode 100644 index 0000000000..056c0d3f86 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/.gitignore @@ -0,0 +1,8 @@ +# Compiled output +dist/ + +# Node +node_modules/ + +# Miscellaneous +.angular/ diff --git a/guacamole/src/main/guacamole-frontend/README.md b/guacamole/src/main/guacamole-frontend/README.md new file mode 100644 index 0000000000..9180abc222 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/README.md @@ -0,0 +1,64 @@ +# Guacamole Angular Frontend + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you +change any of the source files. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a +package that implements end-to-end testing capabilities. + +## Development notes + +- AngularJS services that mostly serve as data containers are replaced by simple classes with instance or static + methods. Some of the more complex services are replaced by classes and Angular services. +- Named functions are mostly replaced by arrow functions. +- Functions that return a promise with data from REST API are mostly replaced by functions that return an observable. +- AngularJS directives are replaced by Angular... + - components if they are configured with `restrict: 'E'`, + - directives if they are configured with `restrict: 'A'`. +- The authentication service method to perform HTTP request with the current token (`AuthenticationService.request()`) + is replaced by a HTTP interceptor + (`auth/interceptor/authentication.interceptor.ts`). +- The error handling of the HTTP requests (`rest/services/requestService.js`) is replaced by a HTTP interceptor + (`rest/interceptor/error-handling.interceptor.ts`). +- The Configuration of the $http service (`httpDefaults.js`) is replaced by a HTTP + interceptor (`index/config/DefaultHeadersInterceptor.ts`). +- To disable certain interceptors for specific requests, the HttpContextTokens in the `InterceptorService` can be used. +- The angular-translate library is replaced by transloco (https://ngneat.github.io/transloco/). + - A noticeable difference is that transloco uses double curly braces by default to link to other translations keys + instead of a `@:` prefix. + +- The 'import' module is not included in this first version. +- Additionally, the following files are not migrated as well: + - index/services/iconService.js +- If the user navigates to a route without being authenticated, the user is redirected to the home page after + authentication. +- I'm not sure how to handle the automatic generation of the LICENSE and NOTICE files in the maven build. + The angular build creates a `3rdpartylicenses.txt` file, but I don't know if this is enough and where to put it. +- Type declarations for guacamole-common-js (`guacamole-frontend-lib/src/lib/types/Guacamole.ts`) will be replaced by the package @types/guacamole-common-js + once it is updated. + +## Possible discussion points regarding the implementation + +- I removed workarounds for IE since Angular itself does no longer support IE. Should these IE workarounds still be + kept? + - `TunnelService~uploadToStream` + - `TunnelService~downloadStream` + - `UserCredentials.getLink` + - `UserCredentialService~getLink` + +- To replace the `$parse` of AngularJS I used the npm package angular-expressions. + It is basically a copy of the AngularJS code as standalone module. + If there is any problem with this package as a dependency, we have to invest more time to implement the parsing of the + expressions ourselves or refactor the code to not use expressions at all. diff --git a/guacamole/src/main/guacamole-frontend/angular.json b/guacamole/src/main/guacamole-frontend/angular.json new file mode 100644 index 0000000000..46ceacb79a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/angular.json @@ -0,0 +1,125 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "guacamole-frontend": { + "projectType": "application", + "schematics": {}, + "root": "projects/guacamole-frontend", + "sourceRoot": "projects/guacamole-frontend/src", + "prefix": "guac", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/guacamole-frontend", + "index": "projects/guacamole-frontend/src/index.html", + "main": "projects/guacamole-frontend/src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "projects/guacamole-frontend/tsconfig.app.json", + "assets": [ + { + "glob": "**/*", + "input": "projects/guacamole-frontend/src/images", + "output": "images" + }, + { + "glob": "**/*", + "input": "projects/guacamole-frontend/src/fonts", + "output": "fonts" + }, + { + "glob": "**/*.json", + "input": "projects/guacamole-frontend/src/translations", + "output": "translations" + }, + { + "glob": "**/*.json", + "input": "./node_modules/guacamole-frontend-lib/assets/layouts", + "output": "layouts" + } + ], + "styles": [ + "projects/guacamole-frontend/src/styles.css" + ], + "scripts": [ + "./node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" + ], + "preserveSymlinks": true + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1.1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "9kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "guacamole-frontend:build:production" + }, + "development": { + "browserTarget": "guacamole-frontend:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "guacamole-frontend:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "projects/guacamole-frontend/tsconfig.spec.json", + "assets": [ + "projects/guacamole-frontend/src/favicon.ico", + "projects/guacamole-frontend/src/assets" + ], + "styles": [ + "projects/guacamole-frontend/src/styles.css" + ], + "scripts": [ + "node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" + ], + "karmaConfig": "projects/guacamole-frontend/karma.conf.js" + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json new file mode 100644 index 0000000000..e047ef8e63 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -0,0 +1,17970 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^16.0.5", + "@angular/common": "^16.0.5", + "@angular/compiler": "^16.0.5", + "@angular/core": "^16.0.5", + "@angular/forms": "^16.0.5", + "@angular/platform-browser": "^16.0.5", + "@angular/platform-browser-dynamic": "^16.0.5", + "@angular/router": "^16.0.5", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.0.5", + "@angular/cli": "~16.0.5", + "@angular/compiler-cli": "^16.0.5", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.0.0", + "typescript": "~5.0.2" + } + }, + "../ngx-guacamole/dist/ngx-guacamole": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^15.2.0", + "@angular/core": "^15.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1600.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "16.0.5", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1600.5", + "@angular-devkit/build-webpack": "0.1600.5", + "@angular-devkit/core": "16.0.5", + "@babel/core": "7.21.4", + "@babel/generator": "7.21.4", + "@babel/helper-annotate-as-pure": "7.18.6", + "@babel/helper-split-export-declaration": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.20.7", + "@babel/plugin-transform-runtime": "7.21.4", + "@babel/preset-env": "7.21.4", + "@babel/runtime": "7.21.0", + "@babel/template": "7.20.7", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.0.5", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.5", + "cacache": "17.0.6", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.16", + "css-loader": "6.7.3", + "esbuild-wasm": "0.17.18", + "glob": "8.1.0", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.5", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.23", + "postcss-loader": "7.2.4", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.62.1", + "sass-loader": "13.2.2", + "semver": "7.4.0", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.1", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.0", + "vite": "4.3.9", + "webpack": "5.80.0", + "webpack-dev-middleware": "6.0.2", + "webpack-dev-server": "4.13.2", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.18" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0", + "@angular/localize": "^16.0.0", + "@angular/platform-server": "^16.0.0", + "@angular/service-worker": "^16.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.1" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1600.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1600.5", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "16.0.5", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.0.5" + } + }, + "node_modules/@angular/cli": { + "version": "16.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1600.5", + "@angular-devkit/core": "16.0.5", + "@angular-devkit/schematics": "16.0.5", + "@schematics/angular": "16.0.5", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.0.0", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.1.3", + "resolve": "1.22.2", + "semver": "7.4.0", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@angular/common": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.0.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.0.5" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.0.5", + "typescript": ">=4.9.3 <5.1" + } + }, + "node_modules/@angular/core": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.0.5", + "@angular/core": "16.0.5", + "@angular/platform-browser": "16.0.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.0.5", + "@angular/common": "16.0.5", + "@angular/core": "16.0.5" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.0.5", + "@angular/compiler": "16.0.5", + "@angular/core": "16.0.5", + "@angular/platform-browser": "16.0.5" + } + }, + "node_modules/@angular/router": { + "version": "16.0.5", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.0.5", + "@angular/core": "16.0.5", + "@angular/platform-browser": "16.0.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.21.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.5", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.21.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.21.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-member-expression-to-functions": "^7.21.5", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@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.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "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.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.21.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-simple-access": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.21.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-destructuring": "^7.21.3", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.21.0", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.21.3", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.20.5", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.21.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.18", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@messageformat/core": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "node_modules/@messageformat/date-skeleton": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@messageformat/number-skeleton": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/@messageformat/parser": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "moo": "^0.5.1" + } + }, + "node_modules/@messageformat/runtime": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "make-plural": "^7.0.0" + } + }, + "node_modules/@ngneat/transloco": { + "version": "4.2.2", + "license": "MIT", + "dependencies": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-messageformat": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "@ngneat/transloco": ">=4.2.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "16.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0", + "typescript": ">=4.9.3 <5.1", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@schematics/angular": { + "version": "16.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "16.0.5", + "@angular-devkit/schematics": "16.0.5", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.194", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/angular-expressions": { + "version": "1.1.9", + "license": "Unlicense" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "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/base64id": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "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", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "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.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001481", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.8.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js": { + "version": "3.30.2", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.30.1", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=3" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/critters": { + "version": "0.0.16", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^4.2.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "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/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/cross-spawn/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "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.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cuint": { + "version": "0.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/custom-event": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "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/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "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/domutils": { + "version": "2.8.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/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.371", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.17.18", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.18", + "@esbuild/android-arm64": "0.17.18", + "@esbuild/android-x64": "0.17.18", + "@esbuild/darwin-arm64": "0.17.18", + "@esbuild/darwin-x64": "0.17.18", + "@esbuild/freebsd-arm64": "0.17.18", + "@esbuild/freebsd-x64": "0.17.18", + "@esbuild/linux-arm": "0.17.18", + "@esbuild/linux-arm64": "0.17.18", + "@esbuild/linux-ia32": "0.17.18", + "@esbuild/linux-loong64": "0.17.18", + "@esbuild/linux-mips64el": "0.17.18", + "@esbuild/linux-ppc64": "0.17.18", + "@esbuild/linux-riscv64": "0.17.18", + "@esbuild/linux-s390x": "0.17.18", + "@esbuild/linux-x64": "0.17.18", + "@esbuild/netbsd-x64": "0.17.18", + "@esbuild/openbsd-x64": "0.17.18", + "@esbuild/sunos-x64": "0.17.18", + "@esbuild/win32-arm64": "0.17.18", + "@esbuild/win32-ia32": "0.17.18", + "@esbuild/win32-x64": "0.17.18" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.18", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/gauge": { + "version": "4.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "dev": true, + "license": "BSD", + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.5", + "dev": true, + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/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/inquirer/node_modules/chalk": { + "version": "4.1.2", + "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/inquirer/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/inquirer/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "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-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.0", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jstz": { + "version": "2.1.1", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/karma": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/less": { + "version": "4.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "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/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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/license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "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/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/make-plural": { + "version": "7.3.0", + "license": "Unicode-DFS-2016" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.1", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "license": "BSD-3-Clause" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanopop": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/needle": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "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/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr": { + "version": "16.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.17.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=4.9.3 <5.1" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "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/ora/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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-scurry": { + "version": "1.7.0", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.0.0", + "minipass": "^5.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.23", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "cosmiconfig-typescript-loader": "^4.3.0", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "ts-node": ">=10", + "typescript": ">=4", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/replace-in-file": { + "version": "6.3.5", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/replace-in-file/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "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/replace-in-file/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/replace-in-file/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/replace-in-file/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/replace-in-file/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.21.5", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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/safe-identifier": { + "version": "0.4.2", + "license": "ISC" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.62.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.4.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "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/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.14", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.17.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.4", + "make-fetch-happen": "^11.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.0.4", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.80.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.13.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.13.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "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.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "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/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "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/wrap-ansi-cjs/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-cjs/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-cjs/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "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", + "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", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/zone.js": { + "version": "0.13.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/architect": { + "version": "0.1600.5", + "dev": true, + "requires": { + "@angular-devkit/core": "16.0.5", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/build-angular": { + "version": "16.0.5", + "dev": true, + "requires": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1600.5", + "@angular-devkit/build-webpack": "0.1600.5", + "@angular-devkit/core": "16.0.5", + "@babel/core": "7.21.4", + "@babel/generator": "7.21.4", + "@babel/helper-annotate-as-pure": "7.18.6", + "@babel/helper-split-export-declaration": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.20.7", + "@babel/plugin-transform-runtime": "7.21.4", + "@babel/preset-env": "7.21.4", + "@babel/runtime": "7.21.0", + "@babel/template": "7.20.7", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.0.5", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.5", + "cacache": "17.0.6", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.16", + "css-loader": "6.7.3", + "esbuild": "0.17.18", + "esbuild-wasm": "0.17.18", + "glob": "8.1.0", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.5", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.23", + "postcss-loader": "7.2.4", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.62.1", + "sass-loader": "13.2.2", + "semver": "7.4.0", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.1", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.0", + "vite": "4.3.9", + "webpack": "5.80.0", + "webpack-dev-middleware": "6.0.2", + "webpack-dev-server": "4.13.2", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "5.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.21.4", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.4.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1600.5", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1600.5", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "16.0.5", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "@angular-devkit/schematics": { + "version": "16.0.5", + "dev": true, + "requires": { + "@angular-devkit/core": "16.0.5", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + } + }, + "@angular/animations": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/cli": { + "version": "16.0.5", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1600.5", + "@angular-devkit/core": "16.0.5", + "@angular-devkit/schematics": "16.0.5", + "@schematics/angular": "16.0.5", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.0.0", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.1.3", + "resolve": "1.22.2", + "semver": "7.4.0", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.4.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "@angular/common": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler-cli": { + "version": "16.0.5", + "dev": true, + "requires": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + } + }, + "@angular/core": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/forms": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "16.0.5", + "requires": { + "tslib": "^2.3.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.5", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "dev": true + }, + "@babel/core": { + "version": "7.21.8", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.21.4", + "dev": true, + "requires": { + "@babel/types": "^7.21.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/types": "^7.21.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.21.8", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.5", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.21.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.21.8", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "dependencies": { + "@babel/template": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + } + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/types": "^7.21.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.21.4", + "dev": true, + "requires": { + "@babel/types": "^7.21.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.21.5", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-member-expression-to-functions": "^7.21.5", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/types": "^7.21.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "dev": true, + "requires": { + "@babel/types": "^7.20.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + } + }, + "@babel/helpers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "dependencies": { + "@babel/template": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + } + } + }, + "@babel/highlight": { + "version": "7.22.5", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.21.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.21.0", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/template": "^7.20.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.21.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.21.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-simple-access": "^7.21.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.21.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.21.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.21.4", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.21.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.21.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.21.4", + "dev": true, + "requires": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-destructuring": "^7.21.3", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.21.0", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.21.3", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.20.5", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.21.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "dev": true + }, + "@babel/runtime": { + "version": "7.21.0", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + } + } + }, + "@babel/types": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@esbuild/win32-x64": { + "version": "0.17.18", + "dev": true, + "optional": true + }, + "@gar/promisify": { + "version": "1.1.3", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true + }, + "@messageformat/core": { + "version": "3.1.0", + "requires": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "@messageformat/date-skeleton": { + "version": "1.0.1" + }, + "@messageformat/number-skeleton": { + "version": "1.2.0" + }, + "@messageformat/parser": { + "version": "5.0.0", + "requires": { + "moo": "^0.5.1" + } + }, + "@messageformat/runtime": { + "version": "3.0.1", + "requires": { + "make-plural": "^7.0.0" + } + }, + "@ngneat/transloco": { + "version": "4.2.2", + "requires": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-messageformat": { + "version": "4.1.0", + "requires": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-utils": { + "version": "3.0.5", + "requires": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "@ngtools/webpack": { + "version": "16.0.5", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.0.4", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "which": { + "version": "3.0.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "dev": true + } + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/run-script": { + "version": "6.0.1", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "optional": true + }, + "@rollup/plugin-json": { + "version": "6.0.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.0.2", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@schematics/angular": { + "version": "16.0.5", + "dev": true, + "requires": { + "@angular-devkit/core": "16.0.5", + "@angular-devkit/schematics": "16.0.5", + "jsonc-parser": "3.2.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "dev": true + }, + "@simonwep/pickr": { + "version": "1.8.2", + "requires": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "dev": true + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "peer": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "peer": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.0", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@types/body-parser": { + "version": "1.19.2", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.0", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "dev": true + }, + "@types/cors": { + "version": "2.8.13", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.37.0", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.35", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/file-saver": { + "version": "2.0.5", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.11", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "4.3.1", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/lodash": { + "version": "4.14.194", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "dev": true + }, + "@types/node": { + "version": "18.16.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "dev": true + }, + "@types/resolve": { + "version": "1.20.2", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.1", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true + }, + "abab": { + "version": "2.0.6", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.2", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "dev": true, + "peer": true + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "angular-expressions": { + "version": "1.1.9" + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arg": { + "version": "4.1.3", + "dev": true, + "peer": true + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-flatten": { + "version": "2.1.2", + "dev": true + }, + "autoprefixer": { + "version": "10.4.14", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "babel-loader": { + "version": "9.1.2", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "base64id": { + "version": "2.0.0", + "dev": true + }, + "batch": { + "version": "0.6.1", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bl": { + "version": "4.1.0", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "body-parser": { + "version": "1.20.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.5", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "buffer": { + "version": "5.7.1", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "cacache": { + "version": "17.0.6", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.2.2", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "path-scurry": "^1.7.0" + } + }, + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "minimatch": { + "version": "9.0.0", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001481", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "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.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.8.0" + }, + "cli-width": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4" + }, + "clone-deep": { + "version": "4.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "color-support": { + "version": "1.1.3", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "dev": true + }, + "commander": { + "version": "10.0.1", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1" + }, + "connect": { + "version": "3.7.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "core-js": { + "version": "3.30.2" + }, + "core-js-compat": { + "version": "3.30.1", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "8.1.3", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1" + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "cosmiconfig-typescript-loader": { + "version": "4.3.0", + "dev": true, + "requires": {} + }, + "create-require": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "critters": { + "version": "0.0.16", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^4.2.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "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" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "css-loader": { + "version": "6.7.3", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "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.2.0", + "semver": "^7.3.8" + } + }, + "css-select": { + "version": "4.3.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "dev": true + }, + "cuint": { + "version": "0.2.2", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "dev": true + }, + "date-format": { + "version": "4.0.14", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.3.1", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "dev": true + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "dev": true + }, + "di": { + "version": "0.0.1", + "dev": true + }, + "diff": { + "version": "4.0.2", + "dev": true, + "peer": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "dev": true + }, + "dns-packet": { + "version": "5.6.0", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serialize": { + "version": "2.2.1", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "1.4.1", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.371", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0" + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "engine.io": { + "version": "6.4.2", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + } + }, + "engine.io-parser": { + "version": "5.0.6", + "dev": true + }, + "enhanced-resolve": { + "version": "5.13.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "ent": { + "version": "2.2.0", + "dev": true + }, + "entities": { + "version": "2.2.0", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "dev": true + }, + "errno": { + "version": "0.1.8", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "1.2.1", + "dev": true + }, + "esbuild": { + "version": "0.17.18", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.18", + "@esbuild/android-arm64": "0.17.18", + "@esbuild/android-x64": "0.17.18", + "@esbuild/darwin-arm64": "0.17.18", + "@esbuild/darwin-x64": "0.17.18", + "@esbuild/freebsd-arm64": "0.17.18", + "@esbuild/freebsd-x64": "0.17.18", + "@esbuild/linux-arm": "0.17.18", + "@esbuild/linux-arm64": "0.17.18", + "@esbuild/linux-ia32": "0.17.18", + "@esbuild/linux-loong64": "0.17.18", + "@esbuild/linux-mips64el": "0.17.18", + "@esbuild/linux-ppc64": "0.17.18", + "@esbuild/linux-riscv64": "0.17.18", + "@esbuild/linux-s390x": "0.17.18", + "@esbuild/linux-x64": "0.17.18", + "@esbuild/netbsd-x64": "0.17.18", + "@esbuild/openbsd-x64": "0.17.18", + "@esbuild/sunos-x64": "0.17.18", + "@esbuild/win32-arm64": "0.17.18", + "@esbuild/win32-ia32": "0.17.18", + "@esbuild/win32-x64": "0.17.18" + } + }, + "esbuild-wasm": { + "version": "0.17.18", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.18.2", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "cookie": { + "version": "0.5.0", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "2.0.1", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-saver": { + "version": "2.0.5" + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2" + }, + "flatted": { + "version": "3.2.7", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "dev": true + }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.1", + "dev": true + } + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "3.0.2", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.2.0", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "13.1.4", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "dev": true + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0" + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "dev": true + }, + "hdr-histogram-js": { + "version": "2.0.3", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "dev": true + } + } + }, + "hpack.js": { + "version": "2.1.6", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-entities": { + "version": "2.3.5", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.1", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.2.4", + "dev": true + }, + "ignore-walk": { + "version": "6.0.3", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.0", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "image-size": { + "version": "0.5.5", + "dev": true, + "optional": true + }, + "immutable": { + "version": "4.3.0", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0" + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "4.0.0", + "dev": true + }, + "injection-js": { + "version": "2.4.0", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } + }, + "inquirer": { + "version": "8.2.4", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "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" + } + } + } + }, + "ip": { + "version": "2.0.0", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-builtin-module": { + "version": "3.2.1", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-core-module": { + "version": "2.12.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0" + }, + "is-lambda": { + "version": "1.0.1", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0" + }, + "is-what": { + "version": "3.14.1", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "2.2.0", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jasmine-core": { + "version": "4.5.0", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "json5": { + "version": "2.2.3", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "jstz": { + "version": "2.1.1" + }, + "karma": { + "version": "6.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "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.9", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "requires": { + "which": "^1.2.1" + } + }, + "karma-coverage": { + "version": "2.2.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "5.1.0", + "dev": true, + "requires": { + "jasmine-core": "^4.1.0" + } + }, + "karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "requires": {} + }, + "karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "klona": { + "version": "2.0.6", + "dev": true + }, + "launch-editor": { + "version": "2.6.0", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "less": { + "version": "4.1.3", + "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", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mime": { + "version": "1.6.0", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "11.1.0", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1" + }, + "log-symbols": { + "version": "4.1.0", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log4js": { + "version": "6.9.1", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + } + }, + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.0", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "dev": true, + "peer": true + }, + "make-fetch-happen": { + "version": "10.2.1", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "16.1.3", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "glob": { + "version": "8.1.0", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "minimatch": { + "version": "5.1.6", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "ssri": { + "version": "9.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "make-plural": { + "version": "7.3.0" + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.5.1", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "mini-css-extract-plugin": { + "version": "2.7.5", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "dev": true + }, + "minipass-collect": { + "version": "1.0.2", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "minipass-fetch": { + "version": "2.1.2", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "minizlib": { + "version": "2.1.2", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moo": { + "version": "0.5.2" + }, + "mrmime": { + "version": "1.0.1", + "dev": true + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "dev": true + }, + "nanopop": { + "version": "2.3.0" + }, + "needle": { + "version": "3.2.0", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "ng-packagr": { + "version": "16.0.0", + "dev": true, + "requires": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild": "^0.17.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "dev": true + } + } + }, + "node-forge": { + "version": "1.3.1", + "dev": true + }, + "node-gyp": { + "version": "9.3.1", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.10", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.3", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "dev": true + }, + "obuf": { + "version": "1.1.2", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "dev": true + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.2", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pacote": { + "version": "15.1.3", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "pako": { + "version": "1.0.11", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "dev": true + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "requires": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "dev": true + }, + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "requires": { + "parse5": "^7.0.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "dev": true + }, + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-scurry": { + "version": "1.7.0", + "dev": true, + "requires": { + "lru-cache": "^9.0.0", + "minipass": "^5.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.1", + "dev": true + } + } + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "path-type": { + "version": "4.0.0" + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "4.0.1", + "dev": true, + "optional": true + }, + "piscina": { + "version": "3.2.0", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.23", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-loader": { + "version": "7.2.4", + "dev": true, + "requires": { + "cosmiconfig": "^8.1.3", + "cosmiconfig-typescript-loader": "^4.3.0", + "klona": "^2.0.6", + "semver": "^7.3.8" + } + }, + "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-selector-parser": { + "version": "6.0.11", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-url": { + "version": "10.1.3", + "dev": true, + "requires": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "dev": true + }, + "minimatch": { + "version": "3.0.8", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "dev": true + }, + "proc-log": { + "version": "3.0.0", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "dev": true + } + } + }, + "prr": { + "version": "1.0.1", + "dev": true, + "optional": true + }, + "punycode": { + "version": "2.3.0", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "dev": true + }, + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-package-json": { + "version": "6.0.3", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.2.2", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "path-scurry": "^1.7.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "dev": true + }, + "minimatch": { + "version": "9.0.0", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.2", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "dev": true + }, + "regexpu-core": { + "version": "5.3.2", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "replace-in-file": { + "version": "6.3.5", + "requires": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.21.5", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-async": { + "version": "2.4.1", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-identifier": { + "version": "0.4.2" + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "sass": { + "version": "1.62.1", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.2.2", + "dev": true, + "requires": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "dev": true, + "optional": true + }, + "schema-utils": { + "version": "4.0.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "send": { + "version": "0.18.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "dev": true + }, + "ms": { + "version": "2.1.3", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "sigstore": { + "version": "1.4.0", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.3", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, + "slash": { + "version": "4.0.0", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "dev": true + }, + "socket.io": { + "version": "4.6.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "requires": { + "ws": "~8.11.0" + } + }, + "socket.io-parser": { + "version": "4.2.3", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.24", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "socks": { + "version": "2.7.1", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "source-map": { + "version": "0.7.4", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "source-map-loader": { + "version": "4.0.1", + "dev": true, + "requires": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.2.0", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "ssri": { + "version": "10.0.4", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + }, + "streamroller": { + "version": "3.1.5", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "symbol-observable": { + "version": "4.0.0", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "dev": true + }, + "tar": { + "version": "6.1.14", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "terser": { + "version": "5.17.1", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "dev": true + }, + "ts-node": { + "version": "10.9.1", + "dev": true, + "peer": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "2.5.0" + }, + "tuf-js": { + "version": "1.1.5", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "make-fetch-happen": "^11.1.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "dev": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.3", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + } + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-assert": { + "version": "1.0.9", + "dev": true + }, + "typescript": { + "version": "5.0.4", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.35", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true + }, + "unique-filename": { + "version": "3.0.0", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "peer": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "vite": { + "version": "4.3.9", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "void-elements": { + "version": "2.0.1", + "dev": true + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "5.80.0", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.13.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-dev-middleware": { + "version": "6.0.2", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "webpack-dev-server": { + "version": "4.13.2", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "ws": { + "version": "8.13.0", + "dev": true, + "requires": {} + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true + }, + "webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "requires": { + "typed-assert": "^1.0.8" + } + }, + "websocket-driver": { + "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", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.1", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "dev": true, + "requires": { + "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" + }, + "ws": { + "version": "8.11.0", + "dev": true, + "requires": {} + }, + "xxhashjs": { + "version": "0.2.2", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, + "y18n": { + "version": "5.0.8" + }, + "yallist": { + "version": "3.1.1", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1" + }, + "yn": { + "version": "3.1.1", + "dev": true, + "peer": true + }, + "zone.js": { + "version": "0.13.0", + "requires": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json new file mode 100644 index 0000000000..241d7c63ac --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -0,0 +1,47 @@ +{ + "name": "frontend", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^16.0.5", + "@angular/common": "^16.0.5", + "@angular/compiler": "^16.0.5", + "@angular/core": "^16.0.5", + "@angular/forms": "^16.0.5", + "@angular/platform-browser": "^16.0.5", + "@angular/platform-browser-dynamic": "^16.0.5", + "@angular/router": "^16.0.5", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.0.5", + "@angular/cli": "~16.0.5", + "@angular/compiler-cli": "^16.0.5", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.0.0", + "typescript": "~5.0.2" + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js new file mode 100644 index 0000000000..7e8f887342 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + random: false + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, '../../coverage/guacamole'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + browsers: ['Chrome'], + restartOnFileChange: true + }); +}; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app-routing.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app-routing.module.ts new file mode 100644 index 0000000000..321e9535ec --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app-routing.module.ts @@ -0,0 +1,252 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { inject, NgModule } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivateFn, Router, RouterModule, Routes } from '@angular/router'; +import { ManageUserComponent } from './manage/components/manage-user/manage-user.component'; +import { ManageConnectionComponent } from './manage/components/manage-connection/manage-connection.component'; +import { SettingsComponent } from './settings/components/settings/settings.component'; +import { GuacSettingsUsersComponent } from './settings/components/guac-settings-users/guac-settings-users.component'; +import { + GuacSettingsPreferencesComponent +} from './settings/components/guac-settings-preferences/guac-settings-preferences.component'; +import { + GuacSettingsUserGroupsComponent +} from './settings/components/guac-settings-user-groups/guac-settings-user-groups.component'; +import { + GuacSettingsConnectionsComponent +} from './settings/components/guac-settings-connections/guac-settings-connections.component'; +import { + GuacSettingsConnectionHistoryComponent +} from './settings/components/guac-settings-connection-history/guac-settings-connection-history.component'; +import { + GuacSettingsSessionsComponent +} from './settings/components/guac-settings-sessions/guac-settings-sessions.component'; +import { HomeComponent } from './home/components/home/home.component'; +import { UserPageService } from './manage/services/user-page.service'; +import { AuthenticationService } from './auth/service/authentication.service'; +import { catchError, map, Observable, of, switchMap } from 'rxjs'; +import { AuthenticationResult } from './auth/types/AuthenticationResult'; +import { ClientPageComponent } from './client/components/client-page/client-page.component'; +import { ManageUserGroupComponent } from './manage/components/manage-user-group/manage-user-group.component'; + + +/** + * Redirects the user to their home page. This necessarily requires + * attempting to re-authenticate with the Guacamole server, as the user's + * credentials may have changed, and thus their most-appropriate home page + * may have changed as well. + * + * @param route + * The route which was requested. + * + * @returns {Promise} + * A promise which resolves successfully only after an attempt to + * re-authenticate and determine the user's proper home page has been + * made. + */ +const routeToUserHomePage: CanActivateFn = (route: ActivatedRouteSnapshot) => { + + // Required services + const router = inject(Router); + const userPageService = inject(UserPageService) + + + // Re-authenticate including any parameters in URL + return updateCurrentToken(route) + .pipe( + switchMap(() => + + // Redirect to home page + userPageService.getHomePage() + .pipe( + map(homePage => { + // If home page is the requested location, allow through + if (route.root.url.join('/') || '/' === homePage.url) + return true; + + // Otherwise, reject and reroute + else { + return router.parseUrl(homePage.url); + } + } + ), + + // If retrieval of home page fails, assume requested page is OK + catchError(() => of(true)) + ) + ), + catchError(() => of(false)), + ); + +} + + +/** + * Attempts to re-authenticate with the Guacamole server, sending any + * query parameters in the URL, along with the current auth token, and + * updating locally stored token if necessary. + * + * @param route + * The route which was requested. + * + * @returns + * An observable which completes only after an attempt to + * re-authenticate has been made. If the authentication attempt fails, + * the observable will emit an error. + */ +const updateCurrentToken = (route: ActivatedRouteSnapshot): Observable => { + + // Required services + const authenticationService = inject(AuthenticationService); + + // Re-authenticate including any parameters in URL + return authenticationService.updateCurrentToken(route.queryParams); + +}; + +/** + * Guard which prevents access to routes which require authentication if + * the user is not authenticated. + * + * @param route + * The route which was requested. + * + * @returns + * An observable which emits true if the user is authenticated, or false + * if the user is not authenticated. + */ +const authGuard: CanActivateFn = (route: ActivatedRouteSnapshot): Observable => { + + return updateCurrentToken(route) + .pipe( + map(() => true), + catchError(() => of(false)) + ); +}; + +/** + * Configure each possible route. + */ +export const appRoutes: Routes = [ + + // Home screen + { + path: '', + title: 'APP.NAME', + component: HomeComponent, + data: {bodyClassName: 'home'}, + // Run the canActivate guard on every navigation, even if the route hasn't changed + runGuardsAndResolvers: 'always', + canActivate: [routeToUserHomePage] + }, + + // User editor + { + path: 'manage/:dataSource/users/:id', + title: 'APP.NAME', + component: ManageUserComponent, + data: {bodyClassName: 'manage'}, + canActivate: [authGuard] + }, + + // User editor for creating a new user + { + path: 'manage/:dataSource/users', + title: 'APP.NAME', + component: ManageUserComponent, + data: {bodyClassName: 'manage'}, + canActivate: [authGuard] + }, + + // Management screen + { + path: 'settings', + title: 'APP.NAME', + data: {bodyClassName: 'settings'}, + component: SettingsComponent, + canActivate: [authGuard], + children: [ + {path: 'users', component: GuacSettingsUsersComponent}, + {path: 'userGroups', component: GuacSettingsUserGroupsComponent}, + {path: ':dataSource/connections', component: GuacSettingsConnectionsComponent}, + {path: ':dataSource/history', component: GuacSettingsConnectionHistoryComponent}, + {path: 'sessions', component: GuacSettingsSessionsComponent}, + {path: 'preferences', component: GuacSettingsPreferencesComponent} + ] + }, + + // Connection editor + { + path: 'manage/:dataSource/connections/:id', + title: 'APP.NAME', + component: ManageConnectionComponent, + data: {bodyClassName: 'manage'}, + canActivate: [authGuard] + }, + + // Connection editor for creating a new connection + { + path: 'manage/:dataSource/connections', + title: 'APP.NAME', + component: ManageConnectionComponent, + data: {bodyClassName: 'manage'}, + canActivate: [authGuard] + }, + + // User group editor + { + path: 'manage/:dataSource/userGroups/:id', + title: 'APP.NAME', + component: ManageUserGroupComponent, + data: {bodyClassName: 'manage'}, + canActivate: [authGuard] + }, + + // User group editor for creating a new user group + { + path: 'manage/:dataSource/userGroups', + title: 'APP.NAME', + component: ManageUserGroupComponent, + data: {bodyClassName: 'manage'}, + canActivate: [authGuard] + }, + + // Client view + { + path: 'client/:id', + component: ClientPageComponent, + // TODO: reloadOnUrl: false, + // f the option is set to false and the URL in the browser changes, + // but the new URL maps to the same route, then a $routeUpdate event is broadcasted + // on the root scope (without reloading the route). + canActivate: [authGuard], + data: {bodyClassName: 'client'}, + + }, + + {path: '**', redirectTo: ''} +]; + +@NgModule({ + imports: [RouterModule.forRoot(appRoutes, {bindToComponentInputs: true, useHash: true})], + exports: [RouterModule] +}) +export class AppRoutingModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.html new file mode 100644 index 0000000000..e6cdeb8d7e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.html @@ -0,0 +1,82 @@ + +
    + + +
    + +
    +

    +

    + +

    +
    +
    +
    + + +
    + +
    +

    +

    +
    +
    +
    + + + + + + + + +
    + + + + + + + + + +
    + +
    + +
    +
    + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts new file mode 100644 index 0000000000..23f4fa64b0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; +import { NavigationModule } from "./navigation/navigation.module"; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule, + NavigationModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts new file mode 100644 index 0000000000..219e254028 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts @@ -0,0 +1,440 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { DOCUMENT } from '@angular/common'; +import { + AfterViewChecked, + Component, + DestroyRef, + Inject, + OnInit, + Renderer2, + ViewEncapsulation +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { FormGroup } from '@angular/forms'; +import { Title } from '@angular/platform-browser'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { TranslocoService } from '@ngneat/transloco'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + distinctUntilChanged, + filter, + map, + of, + pairwise, + switchMap, + tap +} from 'rxjs'; +import { AuthenticationService } from './auth/service/authentication.service'; +import { + GuacClientManagerService +} from './client/services/guac-client-manager.service'; +import { ManagedClientGroup } from './client/types/ManagedClientGroup'; +import { ManagedClientState } from './client/types/ManagedClientState'; +import { ClipboardService } from './clipboard/services/clipboard.service'; +import { + GuacFrontendEventArguments +} from './events/types/GuacFrontendEventArguments'; +import { ApplyPatchesService } from './index/services/apply-patches.service'; +import { StyleLoaderService } from './index/services/style-loader.service'; +import { + GuacNotificationService +} from './notification/services/guac-notification.service'; +import { Error } from './rest/types/Error'; +import { Field } from './rest/types/Field'; +import { TranslatableMessage } from './rest/types/TranslatableMessage'; +import { ApplicationState } from './util/ApplicationState'; + +/** + * The number of milliseconds that should elapse between client-side + * session checks. This DOES NOT impact whether a session expires at all; + * such checks will always be server-side. This only affects how quickly + * the client-side view can recognize that a user's session has expired + * absent any action taken by the user. + */ +const SESSION_VALIDITY_RECHECK_INTERVAL: number = 15000; + +/** + * Name of the file that contains additional styles provided by extensions. + */ +const EXTENSION_STYLES_FILENAME = 'app.css'; + +/** + * The Component for the root of the application. + */ +@Component({ + selector: 'guac-root', + templateUrl: './app.component.html', + encapsulation: ViewEncapsulation.None +}) +export class AppComponent implements OnInit, AfterViewChecked { + + /** + * The error that prevents the current page from rendering at all. If no + * such error has occurred, this will be null. + */ + fatalError: Error | null = null; + + /** + * The message to display to the user as instructions for the login + * process. + */ + loginHelpText: TranslatableMessage | null = null; + + /** + * Whether the user has selected to log back in after having logged out. + */ + reAuthenticating: boolean = false; + + /** + * The credentials that the authentication service is has already accepted, + * pending additional credentials, if any. If the user is logged in, or no + * credentials have been accepted, this will be null. If credentials have + * been accepted, this will be a map of name/value pairs corresponding to + * the parameters submitted in a previous authentication attempt. + * + * @type Record + * TODO: Ursprünglich null + */ + acceptedCredentials: FormGroup = new FormGroup({}); + + /** + * The credentials that the authentication service is currently expecting, + * if any. If the user is logged in, this will be null. + * TODO: Ursprünglich null + */ + expectedCredentials: Field[] = []; + + /** + * The current overall state of the client side of the application. + * Possible values are defined by {@link ApplicationState}. + */ + applicationState: ApplicationState = ApplicationState.LOADING; + + /** + * Provide access to the ApplicationState enum within the template. + */ + readonly ApplicationState = ApplicationState; + + /** + * Reference to the window object. + */ + private readonly window: Window; + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + protected notificationService: GuacNotificationService, + private guacEventService: GuacEventService, + private guacClientManager: GuacClientManagerService, + private clipboardService: ClipboardService, + private applyPatchesService: ApplyPatchesService, + private styleLoaderService: StyleLoaderService, + private translocoService: TranslocoService, + private router: Router, + private route: ActivatedRoute, + private title: Title, + @Inject(DOCUMENT) private document: Document, + private renderer: Renderer2, + private destroyRef: DestroyRef) { + this.window = this.document.defaultView as Window; + } + + ngOnInit(): void { + + // Load extension styles + this.styleLoaderService.loadStyle(EXTENSION_STYLES_FILENAME); + + // Add default destination for input events + const sink = new Guacamole.InputSink(); + this.document.body.appendChild(sink.getElement()); + + // Create event listeners at the global level + const keyboard = new Guacamole.Keyboard(this.document); + keyboard.listenTo(sink.getElement()); + + // Broadcast keydown events + keyboard.onkeydown = keysym => { + + // Do not handle key events if not logged in + if (this.applicationState !== ApplicationState.READY) + return true; + + // Warn of pending keydown + const guacBeforeKeydownEvent = this.guacEventService.broadcast('guacBeforeKeydown', + {keysym, keyboard} + ); + if (guacBeforeKeydownEvent.defaultPrevented) + return true; + + // If not prevented via guacBeforeKeydown, fire corresponding keydown event + const guacKeydownEvent = this.guacEventService.broadcast('guacKeydown', { + keysym, + keyboard + }); + return !guacKeydownEvent.defaultPrevented; + + }; + + // Broadcast keyup events + keyboard.onkeyup = keysym => { + + // Do not handle key events if not logged in or if a notification is + // shown + if (this.applicationState !== ApplicationState.READY) + return; + + // Warn of pending keyup + const guacBeforeKeydownEvent = this.guacEventService.broadcast('guacBeforeKeyup', { + keysym, + keyboard + }); + if (guacBeforeKeydownEvent.defaultPrevented) + return; + + // If not prevented via guacBeforeKeyup, fire corresponding keydown event + this.guacEventService.broadcast('guacKeyup', {keysym, keyboard}); + + }; + + // Release all keys when window loses focus + this.window.onblur = () => { + keyboard.reset(); + }; + + // If we're logged in and not connected to anything, periodically check + // whether the current session is still valid. If the session has expired, + // refresh the auth state to reshow the login screen (rather than wait for + // the user to take some action and discover that they are not logged in + // after all). There is no need to do this if a connection is active as + // that connection activity will already automatically check session + // validity. + this.window.setInterval(() => { + if (!!this.authenticationService.getCurrentToken() && !this.hasActiveTunnel()) { + this.authenticationService.getValidity().subscribe((valid) => { + if (!valid) + this.reAuthenticate(); + }); + } + }, SESSION_VALIDITY_RECHECK_INTERVAL); + + // Release all keys upon form submission (there may not be corresponding + // keyup events for key presses involved in submitting a form) + // TODO: was $document.on; is this correct? + this.document.addEventListener('submit', () => { + keyboard.reset(); + }); + + // Attempt to read the clipboard if it may have changed + this.window.addEventListener('load', this.clipboardService.resyncClipboard, true); + this.window.addEventListener('copy', this.clipboardService.resyncClipboard); + this.window.addEventListener('cut', this.clipboardService.resyncClipboard); + this.window.addEventListener('focus', (e: FocusEvent) => { + + // Only recheck clipboard if it's the window itself that gained focus + if (e.target === this.window) + this.clipboardService.resyncClipboard(); + + }, true); + + + // Display login screen if a whole new set of credentials is needed + this.guacEventService + .on('guacInvalidCredentials', ({error}) => { + + this.setApplicationState(ApplicationState.AWAITING_CREDENTIALS); + + this.loginHelpText = null; + this.acceptedCredentials = new FormGroup({}); + this.expectedCredentials = error.expected; + + }); + + // Prompt for remaining credentials if provided credentials were not enough + this.guacEventService + .on('guacInsufficientCredentials', ({parameters, error}) => { + + this.setApplicationState(ApplicationState.AWAITING_CREDENTIALS); + + this.loginHelpText = error.translatableMessage; + this.acceptedCredentials = parameters as any; // TODO: Map to FormGroup + this.expectedCredentials = error.expected; + + }); + + // Alert user to authentication errors that occur in the absence of an + // interactive login form + this.guacEventService.on('guacLoginFailed', ({error}) => { + + // All errors related to an interactive login form are handled elsewhere + if (this.applicationState === ApplicationState.AWAITING_CREDENTIALS + || error.type === Error.Type.INSUFFICIENT_CREDENTIALS + || error.type === Error.Type.INVALID_CREDENTIALS) + return; + + this.setApplicationState(ApplicationState.AUTOMATIC_LOGIN_REJECTED); + this.reAuthenticating = false; + this.fatalError = error; + + }); + + // Replace absolutely all content with an error message if the page itself + // cannot be displayed due to an error + this.guacEventService.on('guacFatalPageError', ({error}) => { + this.setApplicationState(ApplicationState.FATAL_ERROR); + this.fatalError = error; + }); + + // Replace the overall user interface with an informational message if the + // user has manually logged out + this.guacEventService.on('guacLogout', () => { + this.setApplicationState(ApplicationState.LOGGED_OUT); + this.reAuthenticating = false; + }); + + // Add the CSS class provided in the route data property 'bodyClassName' to the body element + this.router.events.pipe( + // Apply new class only when navigation was successful + filter(event => event instanceof NavigationEnd), + // Clear login screen if route change was successful (and thus + // login was either successful or not required) + tap(() => this.setApplicationState(ApplicationState.READY)), + // Get the current route data + switchMap(() => this.route.firstChild?.data || of({})), + // Extract the bodyClassName property + map((data: any) => data['bodyClassName'] || null), + // Only proceed if the class has changed + distinctUntilChanged(), + // Emit previous and current class name as a pair + pairwise() + ) + .subscribe(([previousClass, nextClass]) => { + this.updateBodyClass(previousClass, nextClass); + }); + + // TODO: Fetches the title from the route data and translates it. + this.route.title.pipe( + takeUntilDestroyed(this.destroyRef), + filter((title): title is string => title !== undefined), + switchMap((title) => this.translocoService.selectTranslate(title)) + ) + .subscribe((translatedTitle) => this.title.setTitle(translatedTitle)); + + } + + + /** + * Returns whether the current user has at least one active connection + * running within the current tab. + * + * @returns + * true if the current user has at least one active connection running + * in the current browser tab, false otherwise. + */ + private hasActiveTunnel(): boolean { + + const clients = this.guacClientManager.getManagedClients(); + for (let id in clients) { + + switch (clients[id].clientState.connectionState) { + case ManagedClientState.ConnectionState.CONNECTING: + case ManagedClientState.ConnectionState.WAITING: + case ManagedClientState.ConnectionState.CONNECTED: + return true; + } + + } + + return false; + + } + + /** + * Sets the current overall state of the client side of the + * application to the given value. Possible values are defined by + * {@link ApplicationState}. + * + * @param state + * The state to assign, as defined by {@link ApplicationState}. + */ + private setApplicationState(state: ApplicationState): void { + this.applicationState = state; + + // TODO The title and class associated with the + // current page are automatically reset to the standard values applicable + // to the application as a whole (rather than any specific page). + // this.title.setTitle('APP.NAME'); + // this.page.bodyClassName = ''; + } + + /** + * Navigates the user back to the root of the application (or reloads the + * current route and controller if the user is already there), effectively + * forcing reauthentication. If the user is not logged in, this will result + * in the login screen appearing. + */ + reAuthenticate(): void { + + this.reAuthenticating = true; + + // Clear out URL state to conveniently bring user back to home screen + // upon relogin + this.router.navigate(['/'], {onSameUrlNavigation: 'reload'}); + } + + /** + * Updates the classes of the body element. The previous class is removed + * and the next class is added. + * + * @param previousClass + * The class to remove from the body element. + * + * @param nextClass + * The class to add to the body element. + */ + private updateBodyClass(previousClass?: string, nextClass?: string): void { + // Remove previous class + if (previousClass) + this.renderer.removeClass(this.document.body, previousClass); + + // Add the new class + if (nextClass) + this.renderer.addClass(this.document.body, nextClass); + + } + + /** + * @borrows GuacClientManagerService.getManagedClientGroups + */ + getManagedClientGroups(): ManagedClientGroup[] { + return this.guacClientManager.getManagedClientGroups(); + } + + /** + * Apply HTML patches each time the DOM could be updated. + */ + ngAfterViewChecked(): void { + this.applyPatchesService.applyPatches(); + } + +} + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.module.ts new file mode 100644 index 0000000000..c23bed8b17 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.module.ts @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { LoginModule } from './login/login.module'; +import { NotificationModule } from './notification/notification.module'; +import { FormModule } from './form/form.module'; +import { NavigationModule } from './navigation/navigation.module'; +import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; +import { AuthenticationInterceptor } from './auth/interceptor/authentication.interceptor'; +import { ErrorHandlingInterceptor } from './rest/interceptor/error-handling.interceptor'; +import { LocaleModule } from './locale/locale.module'; +import { DefaultHeadersInterceptor } from './index/config/default-headers.interceptor'; +import { ListModule } from './list/list.module'; +import { SettingsModule } from './settings/settings.module'; +import { CommonModule } from '@angular/common'; +import { ManageModule } from './manage/manage.module'; +import { HomeModule } from './home/home.module'; + +@NgModule({ + declarations: [ + AppComponent, + ], + imports: [ + BrowserModule, + CommonModule, + LocaleModule, + AppRoutingModule, + HttpClientModule, + NavigationModule, + NotificationModule, + FormModule, + LoginModule, + ListModule, + SettingsModule, + ManageModule, + HomeModule + ], + providers: [ + {provide: HTTP_INTERCEPTORS, useClass: DefaultHeadersInterceptor, multi: true}, + {provide: HTTP_INTERCEPTORS, useClass: AuthenticationInterceptor, multi: true}, + {provide: HTTP_INTERCEPTORS, useClass: ErrorHandlingInterceptor, multi: true}, + ], + bootstrap: [AppComponent] +}) +export class AppModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/auth.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/auth.module.ts new file mode 100644 index 0000000000..8949952b25 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/auth.module.ts @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +/** + * The module for authentication and management of tokens. + */ +@NgModule({ + declarations: [], + imports: [ + CommonModule + ] +}) +export class AuthModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/interceptor/authentication.interceptor.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/interceptor/authentication.interceptor.ts new file mode 100644 index 0000000000..453e77da6b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/interceptor/authentication.interceptor.ts @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { InterceptorService } from '../../util/interceptor.service'; +import { AuthenticationService } from '../service/authentication.service'; + +/** + * Interceptor which automatically includes the user's current authentication token. + */ +@Injectable() +export class AuthenticationInterceptor implements HttpInterceptor { + + /** + * Inject required services. + */ + constructor(private interceptorService: InterceptorService, + private authenticationService: AuthenticationService) { + } + + /** + * Makes an HTTP request automatically including the given authentication + * token via {@link AUTHENTICATION_TOKEN} using the "Guacamole-Token" header. + * If no token is provided, the user's current authentication token is used instead. + * If the user is not logged in, the "Guacamole-Token" header is simply omitted. + */ + intercept(request: HttpRequest, next: HttpHandler): Observable> { + + if (this.interceptorService.skipAuthenticationInterceptor(request)) { + return next.handle(request); + } + + // Attempt to use current token if none is provided in the request context + const token = this.interceptorService.getAuthenticationToken(request) || this.authenticationService.getCurrentToken(); + + // Add "Guacamole-Token" header if an authentication token is available + if (token) { + request = request.clone({ + setHeaders: { + 'Guacamole-Token': token + } + }); + } + + return next.handle(request); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.spec.ts new file mode 100644 index 0000000000..408107ccfd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.spec.ts @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { AuthenticationService } from './authentication.service'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { HTTP_INTERCEPTORS } from '@angular/common/http'; +import { AuthenticationInterceptor } from '../interceptor/authentication.interceptor'; + +describe('AuthenticationService', () => { + let service: AuthenticationService; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + {provide: HTTP_INTERCEPTORS, useClass: AuthenticationInterceptor, multi: true} + ] + }); + service = TestBed.inject(AuthenticationService); + httpMock = TestBed.inject(HttpTestingController); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + describe('revokeToken()', () => { + it('request should contain the authentication token as a HTTP header', (done) => { + const AUTHENTICATION_TOKEN = 'Guacamole-Token'; + const token = 'test-token'; + + service.revokeToken(token).subscribe(() => { + done(); + }); + + const req = httpMock.expectOne('api/session'); + expect(req.request.method).toEqual('DELETE'); + expect(req.request.headers.has(AUTHENTICATION_TOKEN)).toBeTruthy(); + expect(req.request.headers.get(AUTHENTICATION_TOKEN)).toEqual(token); + req.flush(null); + }); + + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts new file mode 100644 index 0000000000..775e1c5b5b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts @@ -0,0 +1,527 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../events/types/GuacFrontendEventArguments'; +import { LocalStorageService } from '../../storage/local-storage.service'; +import { AuthenticationResult } from '../types/AuthenticationResult'; +import { RequestService } from '../../rest/service/request.service'; +import { Error } from '../../rest/types/Error'; +import { HttpClient, HttpContext, HttpHeaders, HttpParams } from '@angular/common/http'; +import { AUTHENTICATION_TOKEN } from '../../util/interceptor.service'; +import { catchError, from, map, Observable, of, switchMap, throwError } from 'rxjs'; + +/** + * The unique identifier of the local storage key which stores the latest + * authentication token. + */ +const AUTH_TOKEN_STORAGE_KEY: string = 'GUAC_AUTH_TOKEN'; + +/** + * A service for authenticating a user against the REST API. Invoking the + * authenticate() or login() functions of this service will automatically + * affect the login dialog, if visible. + * + * This service broadcasts events on $rootScope depending on the status and + * result of authentication operations: + * + * "guacLoginPending" + * An authentication request is being submitted and we are awaiting the + * result. The request may not yet have been submitted if the parameters + * for that request are not ready. This event receives a promise that + * resolves with the HTTP parameters that were ultimately submitted as its + * sole parameter. + * + * "guacLogin" + * Authentication was successful and a new token was created. This event + * receives the authentication token as its sole parameter. + * + * "guacLogout" + * An existing token is being destroyed. This event receives the + * authentication token as its sole parameter. If the existing token for + * the current session is being replaced without destroying that session, + * this event is not fired. + * + * "guacLoginFailed" + * An authentication request has failed for any reason. This event is + * broadcast before any other events that are specific to the nature of + * the failure, and may be used to detect login failures in lieu of those + * events. This event receives two parameters: the HTTP parameters + * submitted and the Error object received from the REST endpoint. + * + * "guacInsufficientCredentials" + * An authentication request failed because additional credentials are + * needed before the request can be processed. This event receives two + * parameters: the HTTP parameters submitted and the Error object received + * from the REST endpoint. + * + * "guacInvalidCredentials" + * An authentication request failed because the credentials provided are + * invalid. This event receives two parameters: the HTTP parameters + * submitted and the Error object received from the REST endpoint. + */ +@Injectable({ + providedIn: 'root' +}) +export class AuthenticationService { + + /** + * The most recent authentication result, or null if no authentication + * result is cached. + */ + cachedResult: AuthenticationResult | null = null; + + constructor(private localStorageService: LocalStorageService, + private guacEventService: GuacEventService, + private requestService: RequestService, + private http: HttpClient) { + } + + /** + * Retrieves the authentication result cached in memory. If the user has not + * yet authenticated, the user has logged out, or the last authentication + * attempt failed, null is returned. + * + * NOTE: setAuthenticationResult() will be called upon page load, so the + * cache should always be populated after the page has successfully loaded. + * + * @returns + * The last successful authentication result, or null if the user is not + * currently authenticated. + */ + getAuthenticationResult(): AuthenticationResult | null { + + // Use cached result, if any + if (this.cachedResult) + return this.cachedResult; + + // Return explicit undefined if no auth data is currently stored + return null; + + } + + /** + * Stores the given authentication result for future retrieval. The given + * result MUST be the result of the most recent authentication attempt. + * + * @param data + * The last successful authentication result, or null if the last + * authentication attempt failed. + */ + setAuthenticationResult(data: AuthenticationResult | null): void { + + // Clear the currently-stored result and auth token if the last + // attempt failed + if (!data) { + this.cachedResult = null; + this.localStorageService.removeItem(AUTH_TOKEN_STORAGE_KEY); + } + + // Otherwise, store the authentication attempt directly. + // Note that only the auth token is stored in persistent local storage. + // To re-obtain an authentication result upon a fresh page load, + // reauthenticate with the persistent token, which can be obtained by + // calling getCurrentToken(). + else { + + // Always store in cache + this.cachedResult = data; + + // Persist only the auth token past tab/window closure, and only + // if not anonymous + if (data.username !== AuthenticationResult.ANONYMOUS_USERNAME) + this.localStorageService.setItem( + AUTH_TOKEN_STORAGE_KEY, data.authToken); + + } + + } + + /** + * Clears the stored authentication result, if any. If no authentication + * result is currently stored, this function has no effect. + */ + clearAuthenticationResult() { + this.setAuthenticationResult(null); + } + + /** + * Makes a request to authenticate a user using the token REST API endpoint + * and given arbitrary parameters, returning a promise that succeeds only + * if the authentication operation was successful. The resulting + * authentication data can be retrieved later via getCurrentToken() or + * getCurrentUsername(). Invoking this function will affect the UI, + * including the login screen if visible. + * + * The provided parameters can be virtually any object, as each property + * will be sent as an HTTP parameter in the authentication request. + * Standard parameters include "username" for the user's username, + * "password" for the user's associated password, and "token" for the + * auth token to check/update. + * + * If a token is provided, it will be reused if possible. + * + * @param {Object|Promise} parameters + * Arbitrary parameters to authenticate with. If a Promise is provided, + * that Promise must resolve with the parameters to be submitted when + * those parameters are available, and any error will be handled as if + * from the authentication endpoint of the REST API itself. + * + * @returns {Promise} + * An Observable which emits the authentication result only if the login operation was successful. + */ + authenticate(parameters: object | Promise): Observable { + + // Coerce received parameters object into a Promise, if it isn't + // already a Promise + const parametersPromise = Promise.resolve(parameters); + + // Notify that a fresh authentication request is underway + this.guacEventService.broadcast('guacLoginPending', {parameters: parametersPromise}); + + // Attempt authentication after auth parameters are available ... + return from(parametersPromise).pipe( + switchMap((requestParams: any) => { + return this.http.post( + 'api/tokens', + this.toHttpParams(requestParams), + { + headers: new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'}), + } + ) + } + ), + + // ... if authentication succeeds, handle received auth data ... + map((data: AuthenticationResult) => { + const currentToken = this.getCurrentToken(); + + // If a new token was received, ensure the old token is invalidated, + // if any, and notify listeners of the new token + if (data.authToken !== currentToken) { + + // If an old token existed, request that the token be revoked + if (currentToken) { + this.revokeToken(currentToken).subscribe(); + } + + // Notify of login and new token + this.setAuthenticationResult(new AuthenticationResult(data)); + this.guacEventService.broadcast('guacLogin', {authToken: data.authToken}); + + } + // Update cached authentication result, even if the token remains + // the same + else + this.setAuthenticationResult(new AuthenticationResult(data)); + + // Authentication was successful + return data; + }), + + // ... if authentication fails, propagate failure to returned promise + catchError(this.requestService.createErrorCallback((error: Error): Observable => { + + // Notify of generic login failure, for any event consumers that + // wish to handle all types of failures at once + this.guacEventService.broadcast('guacLoginFailed', {parameters: parametersPromise, error}); + + // Request credentials if provided credentials were invalid + if (error.type === Error.Type.INVALID_CREDENTIALS) { + this.guacEventService.broadcast('guacInvalidCredentials', { + parameters: parametersPromise, + error + }); + this.clearAuthenticationResult(); + } + + // Request more credentials if provided credentials were not enough + else if (error.type === Error.Type.INSUFFICIENT_CREDENTIALS) { + this.guacEventService.broadcast('guacInsufficientCredentials', { + parameters: parametersPromise, + error + }); + this.clearAuthenticationResult(); + } + + // Abort rendering of page if an internal error occurs + else if (error.type === Error.Type.INTERNAL_ERROR) + this.guacEventService.broadcast('guacFatalPageError', {error}); + + // Authentication failed + return throwError(() => error); + + } + ) + ) + ); + + } + + /** + * Converts the given object into an equivalent HttpParams object by adding + * a parameter for each property of the given object. + * + * @param object + * The object to convert into HttpParams. + * + * @returns + * An HttpParams object containing a parameter for each property of the + * given object. + */ + private toHttpParams(object: any): HttpParams { + return Object.getOwnPropertyNames(object) + .reduce((p, key) => p.set(key, object[key]), new HttpParams()); + } + + /** + * Makes a request to update the current auth token, if any, using the + * token REST API endpoint. If the optional parameters object is provided, + * its properties will be included as parameters in the update request. + * This function returns a promise that succeeds only if the authentication + * operation was successful. The resulting authentication data can be + * retrieved later via getCurrentToken() or getCurrentUsername(). + * + * If there is no current auth token, this function behaves identically to + * authenticate(), and makes a general authentication request. + * + * @param parameters + * Arbitrary parameters to authenticate with, if any. + * + * @returns + * A promise which succeeds only if the login operation was successful. + */ + updateCurrentToken(parameters: object): Observable { + + // HTTP parameters for the authentication request + let httpParameters: any = {}; + + // Add token parameter if current token is known + const token = this.getCurrentToken(); + if (token) + httpParameters.token = this.getCurrentToken(); + + // Add any additional parameters + if (parameters) + httpParameters = {...httpParameters, ...parameters}; + + // Make the request + return this.authenticate(httpParameters); + + } + + /** + * Determines whether the session associated with a particular token is + * still valid, without performing an operation that would result in that + * session being marked as active. If no token is provided, the session of + * the current user is checked. + * + * @param token + * The authentication token to pass with the "Guacamole-Token" header. + * If omitted, and the user is logged in, the user's current + * authentication token will be used. + * + * @returns + * A promise that resolves with the boolean value "true" if the session + * is valid, and resolves with the boolean value "false" otherwise, + * including if an error prevents session validity from being + * determined. The promise is never rejected. + */ + getValidity(token?: string): Observable { + + // NOTE: Because this is a HEAD request, we will not receive a JSON + // response body. We will only have a simple yes/no regarding whether + // the auth token can be expected to be usable. + return this.http.head( + 'api/session', + { + context: new HttpContext().set(AUTHENTICATION_TOKEN, token) + }) + .pipe( + map(() => true), + catchError(() => of(false)) + ); + } + + /** + * Makes a request to revoke an authentication token using the token REST + * API endpoint, returning a promise that succeeds only if the token was + * successfully revoked. + * + * @param token + * The authentication token to revoke. + * + * @returns + * A promise which succeeds only if the token was successfully revoked. + */ + revokeToken(token: string | null): Observable { + return this.http.delete( + 'api/session', + { + context: new HttpContext().set(AUTHENTICATION_TOKEN, token) + } + ); + } + + /** + * Makes a request to authenticate a user using the token REST API endpoint + * with a username and password, ignoring any currently-stored token, + * returning a promise that succeeds only if the login operation was + * successful. The resulting authentication data can be retrieved later + * via getCurrentToken() or getCurrentUsername(). Invoking this function + * will affect the UI, including the login screen if visible. + * + * @param username + * The username to log in with. + * + * @param password + * The password to log in with. + * + * @returns + * A promise which succeeds only if the login operation was successful. + */ + login(username: string, password: string): Observable { + return this.authenticate({ + username: username, + password: password + }); + } + + /** + * Makes a request to logout a user using the token REST API endpoint, + * returning a promise that succeeds only if the logout operation was + * successful. Invoking this function will affect the UI, causing the + * visible components of the application to be replaced with a status + * message noting that the user has been logged out. + * + * @returns + * A promise which succeeds only if the logout operation was + * successful. + */ + logout(): Observable { + + // Clear authentication data + const token = this.getCurrentToken(); + this.clearAuthenticationResult(); + + // Notify listeners that a token is being destroyed + this.guacEventService.broadcast('guacLogout', {token}); + + // Delete old token + return this.revokeToken(token); + + } + + /** + * Returns whether the current user has authenticated anonymously. An + * anonymous user is denoted by the identifier reserved by the Guacamole + * extension API for anonymous users (the empty string). + * + * @returns {Boolean} + * true if the current user has authenticated anonymously, false + * otherwise. + */ + isAnonymous(): boolean { + return this.getCurrentUsername() === ''; + } + + /** + * Returns the username of the current user. If the current user is not + * logged in, this value may not be valid. + * + * @returns {String} + * The username of the current user, or null if no authentication data + * is present. + */ + getCurrentUsername(): string | null { + + // Return username, if available + const authData = this.getAuthenticationResult(); + if (authData) + return authData.username; + + // No auth data present + return null; + + } + + /** + * Returns the auth token associated with the current user. If the current + * user is not logged in, this token may not be valid. + * + * @returns + * The auth token associated with the current user, or null if no + * authentication data is present. + */ + getCurrentToken(): string | null { + + // Return cached auth token, if available + const authData = this.getAuthenticationResult(); + if (authData) + return authData.authToken; + + // Fall back to the value from local storage if not found in cache + return this.localStorageService.getItem(AUTH_TOKEN_STORAGE_KEY) as string | null; + + } + + /** + * Returns the identifier of the data source that authenticated the current + * user. If the current user is not logged in, this value may not be valid. + * + * @returns + * The identifier of the data source that authenticated the current + * user, or null if no authentication data is present. + */ + getDataSource(): string | null { + + // Return data source, if available + const authData = this.getAuthenticationResult(); + if (authData) + return authData.dataSource; + + // No auth data present + return null; + + } + + /** + * Returns the identifiers of all data sources available to the current + * user. If the current user is not logged in, this value may not be valid. + * + * @returns + * The identifiers of all data sources available to the current user, + * or an empty array if no authentication data is present. + */ + getAvailableDataSources(): string[] { + + // Return data sources, if available + const authData = this.getAuthenticationResult(); + if (authData) + return authData.availableDataSources || [] + + // No auth data present + return []; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/types/AuthenticationResult.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/types/AuthenticationResult.ts new file mode 100644 index 0000000000..c0061b1dae --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/types/AuthenticationResult.ts @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing the successful + * result of an authentication attempt. + */ +export class AuthenticationResult { + + /** + * The unique token generated for the user that authenticated. + */ + authToken: string; + + /** + * The name which uniquely identifies the user that authenticated. + */ + username: string; + + /** + * The unique identifier of the data source which authenticated the + * user. + */ + dataSource: string; + + /** + * The identifiers of all data sources available to the user that + * authenticated. + */ + availableDataSources?: string[]; + + /** + * Creates a new AuthenticationResult object. + * + * @param template + * The object whose properties should be copied within the new + * AuthenticationResult. + */ + constructor(template: AuthenticationResult) { + this.authToken = template.authToken; + this.username = template.username; + this.dataSource = template.dataSource; + this.availableDataSources = template.availableDataSources; + } + + /** + * The username reserved by the Guacamole extension API for users which have + * authenticated anonymously. + */ + static readonly ANONYMOUS_USERNAME: string = ''; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/client.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/client.module.ts new file mode 100644 index 0000000000..5bc0546dc6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/client.module.ts @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ClipboardModule } from '../clipboard/clipboard.module'; +import { TextInputModule } from '../text-input/text-input.module'; +import { GuacZoomCtrlDirective } from './directives/guac-zoom-ctrl.directive'; +import { GuacClientZoomComponent } from './components/guac-client-zoom/guac-client-zoom.component'; +import { TranslocoModule } from '@ngneat/transloco'; +import { FormsModule } from '@angular/forms'; +import { GuacThumbnailComponent } from './components/guac-thumbnail/guac-thumbnail.component'; +import { + ClientLibModule, + ElementModule, OskModule, + TouchModule +} from 'guacamole-frontend-lib'; +import { GuacTiledThumbnailsComponent } from './components/guac-tiled-thumbnails/guac-tiled-thumbnails.component'; +import { GuacFileTransferComponent } from './components/guac-file-transfer/guac-file-transfer.component'; +import { + GuacFileTransferManagerComponent +} from './components/guac-file-transfer-manager/guac-file-transfer-manager.component'; +import { NavigationModule } from '../navigation/navigation.module'; +import { RouterLink } from '@angular/router'; +import { FormModule } from '../form/form.module'; +import { GroupListModule } from '../group-list/group-list.module'; +import { GuacClientUserCountComponent } from './components/guac-client-user-count/guac-client-user-count.component'; +import { + GuacClientNotificationComponent +} from './components/guac-client-notification/guac-client-notification.component'; +import { NotificationModule } from '../notification/notification.module'; +import { GuacClientComponent } from './components/guac-client/guac-client.component'; +import { GuacTiledClientsComponent } from './components/guac-tiled-clients/guac-tiled-clients.component'; +import { ClientPageComponent } from './components/client-page/client-page.component'; + +/** + * The module for code used to connect to a connection or balancing group. + */ +@NgModule({ + declarations: [ + GuacZoomCtrlDirective, + GuacClientZoomComponent, + GuacThumbnailComponent, + GuacTiledThumbnailsComponent, + GuacFileTransferComponent, + GuacFileTransferManagerComponent, + ClientPageComponent, + GuacClientUserCountComponent, + GuacClientNotificationComponent, + GuacClientComponent, + GuacTiledClientsComponent + ], + imports: [ + CommonModule, + TranslocoModule, + FormsModule, + ElementModule, + TextInputModule, + OskModule, + TouchModule, + ClientLibModule, + NavigationModule, + RouterLink, + ClipboardModule, + FormModule, + GroupListModule, + NotificationModule + ] +}) +export class ClientModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html new file mode 100644 index 0000000000..f458bac483 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html @@ -0,0 +1,279 @@ + + + + +
    +
    + + +
    + + + + + +
    + + +
    + + +
    + +
    + + +
    + +
    + +
    + +
    +
    + + +
    + +
    + + +
    + {{'CLIENT.TEXT_CLIENT_STATUS_UNSTABLE' | transloco}} +
    + + +
    + + + + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts new file mode 100644 index 0000000000..3627e30d33 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts @@ -0,0 +1,888 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, + computed, + DestroyRef, + Input, + OnChanges, + OnDestroy, + OnInit, + Signal, + signal, + SimpleChanges, + ViewEncapsulation +} from '@angular/core'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { + ClipboardService +} from '../../../clipboard/services/clipboard.service'; +import { + GuacFrontendEventArguments +} from '../../../events/types/GuacFrontendEventArguments'; +import { ConnectionGroupService } from '../../../rest/service/connection-group.service'; +import { GuacEventService, ScrollState } from 'guacamole-frontend-lib'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { PreferenceService } from '../../../settings/services/preference.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { TunnelService } from '../../../rest/service/tunnel.service'; +import { UserPageService } from '../../../manage/services/user-page.service'; +import { ClientMenu } from '../../types/ClientMenu'; +import { ManagedClient } from '../../types/ManagedClient'; +import { ManagedClientService } from '../../services/managed-client.service'; +import { ManagedClientGroup } from '../../types/ManagedClientGroup'; +import { ConnectionListContext } from '../../types/ConnectionListContext'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { GuacClientManagerService } from '../../services/guac-client-manager.service'; +import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'; +import _filter from 'lodash/filter'; +import findIndex from 'lodash/findIndex'; +import findKey from 'lodash/findKey'; +import intersection from 'lodash/intersection'; +import isEmpty from 'lodash/isEmpty'; +import pull from 'lodash/pull'; +import { filter, pairwise, startWith, tap } from 'rxjs'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { SharingProfile } from '../../../rest/types/SharingProfile'; +import { ManagedClientState } from '../../types/ManagedClientState'; +import { ManagedFilesystem } from '../../types/ManagedFilesystem'; +import { ManagedFilesystemService } from '../../services/managed-filesystem.service'; +import { NotificationAction } from '../../../notification/types/NotificationAction'; +import { Protocol } from '../../../rest/types/Protocol'; +import { FormGroup } from '@angular/forms'; +import { FormService } from '../../../form/service/form.service'; + +/** + * The Component for the page used to connect to a connection or balancing group. + */ +@Component({ + selector: 'guac-client-page', + templateUrl: './client-page.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { + + /** + * TODO + */ + @Input({required: true, alias: 'id'}) groupId!: string; + + /** + * The minimum number of pixels a drag gesture must move to result in the + * menu being shown or hidden. + */ + private readonly MENU_DRAG_DELTA: number = 64; + + /** + * The maximum X location of the start of a drag gesture for that gesture + * to potentially show the menu. + */ + private readonly MENU_DRAG_MARGIN: number = 64; + + /** + * When showing or hiding the menu via a drag gesture, the maximum number + * of pixels the touch can move vertically and still affect the menu. + */ + private readonly MENU_DRAG_VERTICAL_TOLERANCE: number = 10; + + /** + * In order to open the guacamole menu, we need to hit ctrl-alt-shift. There are + * several possible keysysms for each key. + */ + private readonly SHIFT_KEYS: Record = {0xFFE1: true, 0xFFE2: true}; + private readonly ALT_KEYS: Record = { + 0xFFE9: true, 0xFFEA: true, 0xFE03: true, + 0xFFE7: true, 0xFFE8: true + }; + private readonly CTRL_KEYS: Record = {0xFFE3: true, 0xFFE4: true}; + private readonly MENU_KEYS: Record = {...this.SHIFT_KEYS, ...this.ALT_KEYS, ...this.CTRL_KEYS}; + + /** + * Keysym for detecting any END key presses, for the purpose of passing through + * the Ctrl-Alt-Del sequence to a remote system. + */ + private readonly END_KEYS: Record = {0xFF57: true, 0xFFB1: true}; + + /** + * Keysym for sending the DELETE key when the Ctrl-Alt-End hotkey + * combo is pressed. + */ + private readonly DEL_KEY: number = 0xFFFF; + + /** + * Menu-specific properties. + */ + menu: ClientMenu = { + shown: signal(false), + inputMethod: signal(this.preferenceService.preferences.inputMethod), + emulateAbsoluteMouse: signal(this.preferenceService.preferences.emulateAbsoluteMouse), + scrollState: signal(new ScrollState()), + connectionParameters: {} + }; + + /** + * Form group for editing connection parameters which may be modified while the connection is open. + */ + connectionParameters: FormGroup = new FormGroup({}); + + /** + * The currently-focused client within the current ManagedClientGroup. If + * there is no current group, no client is focused, or multiple clients are + * focused, this will be null. + */ + focusedClient: ManagedClient | null = null; + + /** + * The set of clients that should be attached to the client UI. This will + * be immediately initialized by a call to updateAttachedClients() below. + */ + clientGroup: ManagedClientGroup | null = null; + + /** + * The root connection groups of the connection hierarchy that should be + * presented to the user for selecting a different connection, as a map of + * data source identifier to the root connection group of that data + * source. This will be null if the connection group hierarchy has not yet + * been loaded or if the hierarchy is inapplicable due to only one + * connection or balancing group being available. + */ + rootConnectionGroups: Record | null = null; + + /** + * TODO + */ + filteredRootConnectionGroups: Signal> = computed(() => { + return this.rootConnectionGroups || {}; + }); + + /** + * Array of all connection properties that are filterable. + */ + filteredConnectionProperties: string[] = [ + 'name' + ]; + + /** + * Array of all connection group properties that are filterable. + */ + filteredConnectionGroupProperties: string[] = [ + 'name' + ]; + + /** + * Map of all available sharing profiles for the current connection by + * their identifiers. If this information is not yet available, or no such + * sharing profiles exist, this will be an empty object. + */ + sharingProfiles: Record = {}; + + /** + * Map of all substituted key presses. If one key is pressed in place of another + * the value of the substituted key is stored in an object with the keysym of + * the original key. + */ + private substituteKeysPressed: Record = {}; + + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private connectionGroupService: ConnectionGroupService, + private clipboardService: ClipboardService, + private dataSourceService: DataSourceService, + private guacClientManager: GuacClientManagerService, + // TODO: private iconService: IconService, + private preferenceService: PreferenceService, + private requestService: RequestService, + private tunnelService: TunnelService, + private userPageService: UserPageService, + private managedClientService: ManagedClientService, + private router: Router, + private route: ActivatedRoute, + private destroyRef: DestroyRef, + private guacEventService: GuacEventService, + private managedFilesystemService: ManagedFilesystemService, + private formService: FormService,) { + } + + ngOnInit(): void { + + // Init sets of clients based on current URL ... + this.reparseRoute(); + + // TODO: ... and re-initialize those sets if the URL has changed without + // reloading the route + this.router.events.pipe( + filter(event => event instanceof NavigationEnd), + takeUntilDestroyed(this.destroyRef) + ).subscribe(() => this.reparseRoute()); + + // Retrieve root groups and all descendants + this.dataSourceService.apply( + (dataSource: string, connectionGroupID: string) => this.connectionGroupService.getConnectionGroupTree(dataSource, connectionGroupID), + this.authenticationService.getAvailableDataSources(), + ConnectionGroup.ROOT_IDENTIFIER + ) + .then(rootConnectionGroups => { + + // Store retrieved groups only if there are multiple connections or + // balancing groups available + const clientPages = this.userPageService.getClientPages(rootConnectionGroups); + if (clientPages.length > 1) + this.rootConnectionGroups = rootConnectionGroups; + + }, this.requestService.WARN); + + + // Automatically track and cache the currently-focused client + this.guacEventService.on('guacClientFocused', ({newFocusedClient}) => { + + const oldFocusedClient = this.focusedClient; + this.focusedClient = newFocusedClient; + + // Apply any parameter changes when focus is changing + if (oldFocusedClient) + this.applyParameterChanges(oldFocusedClient); + + // Update available connection parameters, if there is a focused + // client + this.menu.connectionParameters = newFocusedClient ? + this.managedClientService.getArgumentModel(newFocusedClient) : {}; + + }); + + // Opening the Guacamole menu after Ctrl+Alt+Shift, preventing those + // keypresses from reaching any Guacamole client + this.guacEventService.on('guacBeforeKeydown', ({event, keyboard}) => { + + // Toggle menu if menu shortcut (Ctrl+Alt+Shift) is pressed + if (this.isMenuShortcutPressed(keyboard)) { + + // Don't send this key event through to the client, and release + // all other keys involved in performing this shortcut + event.preventDefault(); + keyboard.reset(); + + // Toggle the menu + // TODO: $scope.$apply(function() { + this.menu.shown.update(shown => !shown); + // }); + + } + + // Prevent all keydown events while menu is open + else if (this.menu.shown()) + event.preventDefault(); + + }); + + // Prevent all keyup events while menu is open + this.guacEventService.on('guacBeforeKeyup', ({event}) => { + if (this.menu.shown()) + event.preventDefault(); + }); + + // Send Ctrl-Alt-Delete when Ctrl-Alt-End is pressed. + this.guacEventService.on('guacKeydown', ({event, keysym, keyboard}) => { + + // If one of the End keys is pressed, and we have a one keysym from each + // of Ctrl and Alt groups, send Ctrl-Alt-Delete. + if (this.END_KEYS[keysym as any] + && findKey(this.ALT_KEYS, (val, keysym) => keyboard.pressed[keysym as any]) + && findKey(this.CTRL_KEYS, (val, keysym) => keyboard.pressed[keysym as any]) + ) { + + // Don't send this event through to the client. + event.preventDefault(); + + // Record the substituted key press so that it can be + // properly dealt with later. + this.substituteKeysPressed[keysym] = this.DEL_KEY; + + // Send through the delete key. + this.guacEventService.broadcast('guacSyntheticKeydown', {keysym: this.DEL_KEY}); + } + + }); + + // Update pressed keys as they are released + this.guacEventService.on('guacKeyup', ({event, keysym}) => { + + // Deal with substitute key presses + if (this.substituteKeysPressed[keysym]) { + event.preventDefault(); + this.guacEventService.broadcast('guacSyntheticKeyup', {keysym: this.substituteKeysPressed[keysym]}); + delete this.substituteKeysPressed[keysym]; + } + + }); + + } + + ngOnChanges({focusedClient}: SimpleChanges): void { + if (focusedClient) { + + /** + * TODO: Document + */ + if (this.focusedClient) { + this.connectionParameters = this.formService.getFormGroup(this.focusedClient.forms); + this.connectionParameters.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => this.menu.connectionParameters = value); + } else { + this.connectionParameters = new FormGroup({}); + } + + } + + } // ngOnInit() end + + + /** + * Convenience method for closing the menu. + */ + closeMenu() { + this.menu.shown.set(false); + } + + /** + * Applies any changes to connection parameters made by the user within the + * Guacamole menu to the given ManagedClient. If no client is supplied, + * this function has no effect. + * + * @param client + * The client to apply parameter changes to. + */ + applyParameterChanges(client: ManagedClient | null): void { + for (let name in this.menu.connectionParameters) { + const value = this.menu.connectionParameters[name]; + if (client) + this.managedClientService.setArgument(client, name, value); + } + } + + /** + * @borrows ManagedClientGroup.getName + */ + getName(group: ManagedClientGroup): string { + return ManagedClientGroup.getName(group); + } + + /** + * @borrows ManagedClientGroup.getTitle + */ + getTitle(group: ManagedClientGroup): string | undefined { + return ManagedClientGroup.getTitle(group); + } + + /** + * Arbitrary context that should be exposed to the guacGroupList directive + * displaying the dropdown list of available connections within the + * Guacamole menu. + */ + connectionListContext: ConnectionListContext = { + attachedClients: {}, + updateAttachedClients: id => { + this.addRemoveClient(id, !this.connectionListContext.attachedClients[id]); + } + }; + + /** + * Adds or removes the client with the given ID from the set of clients + * within the current view, updating the current URL accordingly. + * + * @param id + * The ID of the client to add or remove from the current view. + * + * @param remove=false + * Whether the specified client should be added (false) or removed + * (true). + */ + addRemoveClient(id: string, remove: boolean = false): void { + + // Deconstruct current path into corresponding client IDs + const ids = ManagedClientGroup.getClientIdentifiers(this.groupId); + + // Add/remove ID as requested + if (remove) + pull(ids, id); + else + ids.push(id); + + // Reconstruct path, updating attached clients via change in route + this.router.navigate(['/client', ManagedClientGroup.getIdentifier(ids)]); + + } + + /** + * Reloads the contents of this.clientGroup to reflect the client IDs + * currently listed in the URL. + */ + private reparseRoute(): void { + + const previousClients = this.clientGroup ? this.clientGroup.clients.slice() : []; + + // Replace existing group with new group + this.setAttachedGroup(this.guacClientManager.getManagedClientGroup(this.groupId)); + + // Store current set of attached clients for later use within the + // Guacamole menu + this.connectionListContext.attachedClients = {}; + this.clientGroup?.clients.forEach((client) => { + this.connectionListContext.attachedClients[client.id] = true; + }); + + // Ensure menu is closed if updated view is not a modification of the + // current view (has no clients in common). The menu should remain open + // only while the current view is being modified, not when navigating + // to an entirely different view. + if (isEmpty(intersection(previousClients, this.clientGroup!.clients))) + this.menu.shown.set(false); + + // Update newly-attached clients with current contents of clipboard + this.clipboardService.resyncClipboard(); + + } + + /** + * Replaces the ManagedClientGroup currently attached to the client + * interface via $scope.clientGroup with the given ManagedClientGroup, + * safely cleaning up after the previous group. If no ManagedClientGroup is + * provided, the existing group is simply removed. + * + * @param managedClientGroup + * The ManagedClientGroup to attach to the interface, if any. + */ + private setAttachedGroup(managedClientGroup?: ManagedClientGroup | null): void { + + // Do nothing if group is not actually changing + if (this.clientGroup === managedClientGroup) + return; + + if (this.clientGroup) { + + // Remove all disconnected clients from management (the user has + // seen their status) + _filter(this.clientGroup.clients, client => { + + const connectionState = client.clientState.connectionState; + return connectionState === ManagedClientState.ConnectionState.DISCONNECTED + || connectionState === ManagedClientState.ConnectionState.TUNNEL_ERROR + || connectionState === ManagedClientState.ConnectionState.CLIENT_ERROR; + + }).forEach(client => { + this.guacClientManager.removeManagedClient(client.id); + }); + + // Flag group as detached + this.clientGroup.attached = false; + + } + + if (managedClientGroup) { + this.clientGroup = managedClientGroup; + this.clientGroup.attached = true; + this.clientGroup.lastUsed = new Date().getTime(); + } + + } + + /** + * Returns whether the shortcut for showing/hiding the Guacamole menu + * (Ctrl+Alt+Shift) has been pressed. + * + * @param keyboard + * The Guacamole.Keyboard object tracking the local keyboard state. + * + * @returns + * true if Ctrl+Alt+Shift has been pressed, false otherwise. + */ + private isMenuShortcutPressed(keyboard: Guacamole.Keyboard): boolean { + + // Ctrl+Alt+Shift has NOT been pressed if any key is currently held + // down that isn't Ctrl, Alt, or Shift + if (findKey(keyboard.pressed, (val, keysym) => !this.MENU_KEYS[Number(keysym)])) + return false; + + // Verify that one of each required key is held, regardless of + // left/right location on the keyboard + return !!( + findKey(this.SHIFT_KEYS, (val, keysym: any) => keyboard.pressed[keysym]) + && findKey(this.ALT_KEYS, (val, keysym: any) => keyboard.pressed[keysym]) + && findKey(this.CTRL_KEYS, (val, keysym: any) => keyboard.pressed[keysym]) + ); + + } + + // Show menu if the user swipes from the left, hide menu when the user + // swipes from the right, scroll menu while visible + menuDrag(inProgress: boolean, startX: number, startY: number, currentX: number, currentY: number, deltaX: number, deltaY: number): boolean { + + if (this.menu.shown()) { + + // Hide menu if swipe-from-right gesture is detected + if (Math.abs(currentY - startY) < this.MENU_DRAG_VERTICAL_TOLERANCE + && startX - currentX >= this.MENU_DRAG_DELTA) + this.menu.shown.set(false); + + // Scroll menu by default + else { + this.menu.scrollState.mutate(scrollState => { + scrollState.left -= deltaX; + scrollState.top -= deltaY; + }); + } + + } + + // Show menu if swipe-from-left gesture is detected + else if (startX <= this.MENU_DRAG_MARGIN) { + if (Math.abs(currentY - startY) < this.MENU_DRAG_VERTICAL_TOLERANCE + && currentX - startX >= this.MENU_DRAG_DELTA) + this.menu.shown.set(true); + } + + return false; + + } + + /** + * Controls whether the on-screen keyboard is shown. + */ + showOSK: Signal = computed(() => this.menu.inputMethod() === 'osk'); + + /** + * Controls whether the text input field is shown. + */ + showTextInput: Signal = computed(() => this.menu.inputMethod() === 'text'); + + /** + * Update client state/behavior as visibility of the Guacamole menu changes + */ + private readonly menuVisibilityChanged = toObservable(this.menu.shown) + .pipe( + takeUntilDestroyed(this.destroyRef), + startWith(this.menu.shown()), + pairwise(), + tap(([menuShownPreviousState, menuShown]) => { + + // Re-update available connection parameters, if there is a focused + // client (parameter information may not have been available at the + // time focus changed) + if (menuShown) + this.menu.connectionParameters = this.focusedClient ? + this.managedClientService.getArgumentModel(this.focusedClient) : {}; + + // Send any argument value data once menu is hidden + else if (menuShownPreviousState) + this.applyParameterChanges(this.focusedClient); + + }) + ).subscribe(); + + + // TODO: Update page icon when thumbnail changes + // $scope.$watch('focusedClient.thumbnail.canvas', function thumbnailChanged(canvas) { + // iconService.setIcons(canvas); + // }); + + // TODO: Pull sharing profiles once the tunnel UUID is known + // $scope.$watch('focusedClient.tunnel.uuid', function retrieveSharingProfiles(uuid) { + // + // // Only pull sharing profiles if tunnel UUID is actually available + // if (!uuid) { + // $scope.sharingProfiles = {}; + // return; + // } + // + // // Pull sharing profiles for the current connection + // tunnelService.getSharingProfiles(uuid) + // .then(function sharingProfilesRetrieved(sharingProfiles) { + // $scope.sharingProfiles = sharingProfiles; + // }, requestService.WARN); + // + // }); + + /** + * Produces a sharing link for the current connection using the given + * sharing profile. The resulting sharing link, and any required login + * information, will be displayed to the user within the Guacamole menu. + * + * @param sharingProfile + * The sharing profile to use to generate the sharing link. + */ + share(sharingProfile: SharingProfile): void { + if (this.focusedClient) + this.managedClientService.createShareLink(this.focusedClient, sharingProfile); + } + + /** + * Returns whether the current connection has any associated share links. + * + * @returns + * true if the current connection has at least one associated share + * link, false otherwise. + */ + isShared(): boolean { + return !!this.focusedClient && this.managedClientService.isShared(this.focusedClient); + } + + /** + * Returns the total number of share links associated with the current + * connection. + * + * @returns + * The total number of share links associated with the current + * connection. + */ + getShareLinkCount(): number { + + if (!this.focusedClient) + return 0; + + // Count total number of links within the ManagedClient's share link map + let linkCount = 0; + for (const dummy in this.focusedClient.shareLinks) + linkCount++; + + return linkCount; + + } + + // TODO: Update page title when client title changes + // $scope.$watch('getTitle(clientGroup)', function clientTitleChanged(title) { + // $scope.page.title = title; + // }); + + /** + * Returns whether the current connection has been flagged as unstable due + * to an apparent network disruption. + * + * @returns + * true if the current connection has been flagged as unstable, false + * otherwise. + */ + isConnectionUnstable(): boolean { + return findIndex(this.clientGroup?.clients, client => client.clientState.tunnelUnstable) !== -1; + } + + /** + * Immediately disconnects all currently-focused clients, if any. + */ + disconnect(): void { + + // Disconnect if client is available + if (this.clientGroup) { + this.clientGroup.clients.forEach(client => { + if (client.clientProperties.focused) + client.client.disconnect(); + }); + } + + // Hide menu + this.menu.shown.set(false); + + } + + /** + * Disconnects the given ManagedClient, removing it from the current + * view. + * + * @param client + * The client to disconnect. + */ + closeClientTile(client: ManagedClient): void { + + this.addRemoveClient(client.id, true); + this.guacClientManager.removeManagedClient(client.id); + + // Ensure at least one client has focus (the only client with + // focus may just have been removed) + ManagedClientGroup.verifyFocus(this.clientGroup); + + } + + /** + * Action which immediately disconnects the currently-connected client, if + * any. + */ + private DISCONNECT_MENU_ACTION: NotificationAction = { + name: 'CLIENT.ACTION_DISCONNECT', + className: 'danger disconnect', + callback: () => this.disconnect() + }; + + // Set client-specific menu actions + clientMenuActions: NotificationAction[] = [this.DISCONNECT_MENU_ACTION]; + + /** + * @borrows Protocol.getNamespace + */ + getProtocolNamespace(protocolName: string): string | undefined { + return Protocol.getNamespace(protocolName); + } + + /** + * The currently-visible filesystem within the filesystem menu, if the + * filesystem menu is open. If no filesystem is currently visible, this + * will be null. + */ + filesystemMenuContents: ManagedFilesystem | null = null; + + /** + * Hides the filesystem menu. + */ + hideFilesystemMenu(): void { + this.filesystemMenuContents = null; + } + + /** + * Shows the filesystem menu, displaying the contents of the given + * filesystem within it. + * + * @param filesystem + * The filesystem to show within the filesystem menu. + */ + showFilesystemMenu(filesystem: ManagedFilesystem): void { + this.filesystemMenuContents = filesystem; + } + + /** + * Returns whether the filesystem menu should be visible. + * + * @returns + * true if the filesystem menu is shown, false otherwise. + */ + isFilesystemMenuShown(): boolean { + return !!this.filesystemMenuContents && this.menu.shown(); + } + + // TODO: Automatically refresh display when filesystem menu is shown + // $scope.$watch('isFilesystemMenuShown()', function refreshFilesystem() { + // + // // Refresh filesystem, if defined + // var filesystem = $scope.filesystemMenuContents; + // if (filesystem) + // ManagedFilesystem.refresh(filesystem, filesystem.currentDirectory); + // + // }); + + /** + * Returns the full path to the given file as an ordered array of parent + * directories. + * + * @param file + * The file whose full path should be retrieved. + * + * @returns + * An array of directories which make up the hierarchy containing the + * given file, in order of increasing depth. + */ + getPath(file: ManagedFilesystem.File): ManagedFilesystem.File[] { + + const path = []; + + // Add all files to path in ascending order of depth + while (file && file.parent) { + path.unshift(file); + file = file.parent; + } + + return path; + + } + + /** + * Changes the current directory of the given filesystem to the given + * directory. + * + * @param filesystem + * The filesystem whose current directory should be changed. + * + * @param file + * The directory to change to. + */ + changeDirectory(filesystem: ManagedFilesystem, file: ManagedFilesystem.File): void { + this.managedFilesystemService.changeDirectory(filesystem, file); + } + + /** + * Begins a file upload through the attached Guacamole client for + * each file in the given FileList. + * + * @param files + * The files to upload. + */ + uploadFiles(files: FileList): void { + + // Upload each file + for (let i = 0; i < files.length; i++) + this.managedClientService.uploadFile(this.filesystemMenuContents!.client, files[i], this.filesystemMenuContents!); + + } + + /** + * Determines whether the attached client group has any associated file + * transfers, regardless of those file transfers' state. + * + * @returns + * true if there are any file transfers associated with the + * attached client group, false otherise. + */ + hasTransfers(): boolean { + + // There are no file transfers if there is no client group + if (!this.clientGroup) + return false; + + return findIndex(this.clientGroup.clients, this.managedClientService.hasTransfers) !== -1; + + } + + /** + * Returns whether the current user can share the current connection with + * other users. A connection can be shared if and only if there is at least + * one associated sharing profile. + * + * @returns + * true if the current user can share the current connection with other + * users, false otherwise. + */ + canShareConnection(): boolean { + + // If there is at least one sharing profile, the connection can be shared + for (let dummy in this.sharingProfiles) + return true; + + // Otherwise, sharing is not possible + return false; + + } + + /** + * Clean up when component is destroyed. + */ + ngOnDestroy(): void { + this.setAttachedGroup(null); + } + +} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.html new file mode 100644 index 0000000000..cedffeed9f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.html @@ -0,0 +1,23 @@ + +
    + + + +
    diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts new file mode 100644 index 0000000000..202077df16 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts @@ -0,0 +1,457 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, + DoCheck, + Input, + KeyValueDiffer, + KeyValueDiffers, + OnChanges, + OnInit, + SimpleChanges, + ViewEncapsulation +} from '@angular/core'; +import { + GuacFrontendEventArguments +} from '../../../events/types/GuacFrontendEventArguments'; +import { ManagedClient } from '../../types/ManagedClient'; +import { UserPageService } from '../../../manage/services/user-page.service'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { GuacTranslateService } from '../../services/guac-translate.service'; +import { GuacClientManagerService } from '../../services/guac-client-manager.service'; +import { Notification } from '../../../notification/types/Notification'; +import { NotificationAction } from '../../../notification/types/NotificationAction'; +import { ActivatedRoute, Router } from '@angular/router'; +import { NotificationCountdown } from '../../../notification/types/NotificationCountdown'; +import { finalize } from 'rxjs'; +import { GuacEvent, GuacEventService } from 'guacamole-frontend-lib'; +import { Protocol } from '../../../rest/types/Protocol'; +import { ManagedClientService } from '../../services/managed-client.service'; +import { ManagedClientState } from '../../types/ManagedClientState'; + +/** + * All error codes for which automatic reconnection is appropriate when a + * client error occurs. + */ +const CLIENT_AUTO_RECONNECT = { + 0x0200: true, + 0x0202: true, + 0x0203: true, + 0x0207: true, + 0x0208: true, + 0x0301: true, + 0x0308: true +}; + +/** + * All error codes for which automatic reconnection is appropriate when a + * tunnel error occurs. + */ +const TUNNEL_AUTO_RECONNECT = { + 0x0200: true, + 0x0202: true, + 0x0203: true, + 0x0207: true, + 0x0208: true, + 0x0308: true +}; + + +/** + * A Component for displaying a non-global notification describing the status + * of a specific Guacamole client, including prompts for any information + * necessary to continue the connection. + */ +@Component({ + selector: 'guac-client-notification', + templateUrl: './guac-client-notification.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacClientNotificationComponent implements OnInit, OnChanges, DoCheck { + + /** + * The client whose status should be displayed. + */ + @Input({required: true}) client!: ManagedClient; + + /** + * TODO: Document this property. + * @private + */ + private clientDiffer?: KeyValueDiffer; + + /** + * A Notification object describing the client status to display as a + * dialog or prompt, as would be accepted by guacNotification.showStatus(), + * or false if no status should be shown. + */ + status: Notification | object | boolean = false; + + /** + * Action which logs out from Guacamole entirely. + */ + private readonly LOGOUT_ACTION: NotificationAction = { + name: 'CLIENT.ACTION_LOGOUT', + className: 'logout button', + callback: () => this.logout() + }; + + /** + * Action which returns the user to the home screen. If the home page has + * not yet been determined, this will be null. + */ + private NAVIGATE_HOME_ACTION: NotificationAction | null = null; + + /** + * Action which replaces the current client with a newly-connected client. + */ + private readonly RECONNECT_ACTION: NotificationAction = { + name: 'CLIENT.ACTION_RECONNECT', + className: 'reconnect button', + callback: () => { + this.client = this.guacClientManager.replaceManagedClient(this.client.id); + this.status = false; + } + }; + + /** + * The reconnect countdown to display if an error or status warrants an + * automatic, timed reconnect. + */ + private readonly RECONNECT_COUNTDOWN: NotificationCountdown = { + text: 'CLIENT.TEXT_RECONNECT_COUNTDOWN', + callback: this.RECONNECT_ACTION.callback, + remaining: 15 + }; + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private guacClientManager: GuacClientManagerService, + private guacTranslate: GuacTranslateService, + private requestService: RequestService, + private userPageService: UserPageService, + private managedClientService: ManagedClientService, + private guacEventService: GuacEventService, + private router: Router, + private route: ActivatedRoute, + private differs: KeyValueDiffers) { + } + + ngOnInit(): void { + + // Assign home page action once user's home page has been determined + this.userPageService.getHomePage() + .subscribe({ + next: homePage => { + + // Define home action only if different from current location + if (this.route.snapshot.root.url.join('/') || '/' === homePage.url) { + this.NAVIGATE_HOME_ACTION = { + name: 'CLIENT.ACTION_NAVIGATE_HOME', + className: 'home button', + callback: () => { + this.router.navigate([homePage.url]); + } + }; + } + + }, error: this.requestService.WARN + }); + + // Block internal handling of key events (by the client) if a + // notification is visible + this.guacEventService.on('guacBeforeKeydown', ({event}) => this.preventDefaultDuringNotification(event)); + this.guacEventService.on('guacBeforeKeyup', ({event}) => this.preventDefaultDuringNotification(event)); + + } + + /** + * Displays a notification at the end of a Guacamole connection, whether + * that connection is ending normally or due to an error. As the end of + * a Guacamole connection may be due to changes in authentication status, + * this will also implicitly peform a re-authentication attempt to check + * for such changes, possibly resulting in auth-related events like + * guacInvalidCredentials. + * + * @param status + * The status notification to show, as would be accepted by + * guacNotification.showStatus(). + */ + private notifyConnectionClosed(status: Notification | object | boolean): void { + + // Re-authenticate to verify auth status at end of connection + this.authenticationService.updateCurrentToken(this.route.snapshot.queryParams) + .pipe( + // Show the requested status once the authentication check has finished + finalize(() => { + this.status = status; + }) + ) + .subscribe({ + error: this.requestService.IGNORE + }) + } + + /** + * Notifies the user that the connection state has changed. + * + * @param connectionState + * The current connection state, as defined by + * ManagedClientState.ConnectionState. + */ + private notifyConnectionState(connectionState: string): void { + + // Hide any existing status + this.status = false; + + // Do not display status if status not known + if (!connectionState) + return; + + // Build array of available actions + let actions: NotificationAction[]; + if (this.NAVIGATE_HOME_ACTION) + actions = [this.NAVIGATE_HOME_ACTION, this.RECONNECT_ACTION, this.LOGOUT_ACTION]; + else + actions = [this.RECONNECT_ACTION, this.LOGOUT_ACTION]; + + // Get any associated status code + const status = this.client.clientState.statusCode; + + // Connecting + if (connectionState === ManagedClientState.ConnectionState.CONNECTING + || connectionState === ManagedClientState.ConnectionState.WAITING) { + this.status = { + className: 'connecting', + title: 'CLIENT.DIALOG_HEADER_CONNECTING', + text: { + key: 'CLIENT.TEXT_CLIENT_STATUS_' + connectionState.toUpperCase() + } + }; + } + + // Client error + else if (connectionState === ManagedClientState.ConnectionState.CLIENT_ERROR) { + + // Translation IDs for this error code + const errorPrefix = 'CLIENT.ERROR_CLIENT_'; + const errorId = errorPrefix + status.toString(16).toUpperCase(); + const defaultErrorId = errorPrefix + 'DEFAULT'; + + // Determine whether the reconnect countdown applies + const countdown = (status in CLIENT_AUTO_RECONNECT) ? this.RECONNECT_COUNTDOWN : null; + + // Use the guacTranslate service to determine if there is a translation for + // this error code; if not, use the default + this.guacTranslate.translateWithFallback(errorId, defaultErrorId).subscribe( + // Show error status + translationResult => this.notifyConnectionClosed({ + className: 'error', + title: 'CLIENT.DIALOG_HEADER_CONNECTION_ERROR', + text: { + key: translationResult.id + }, + countdown: countdown, + actions: actions + }) + ); + + } + + // Tunnel error + else if (connectionState === ManagedClientState.ConnectionState.TUNNEL_ERROR) { + + // Translation IDs for this error code + const errorPrefix = 'CLIENT.ERROR_TUNNEL_'; + const errorId = errorPrefix + status.toString(16).toUpperCase(); + const defaultErrorId = errorPrefix + 'DEFAULT'; + + // Determine whether the reconnect countdown applies + const countdown = (status in TUNNEL_AUTO_RECONNECT) ? this.RECONNECT_COUNTDOWN : null; + + // Use the guacTranslate service to determine if there is a translation for + // this error code; if not, use the default + this.guacTranslate.translateWithFallback(errorId, defaultErrorId).subscribe( + // Show error status + translationResult => this.notifyConnectionClosed({ + className: 'error', + title: 'CLIENT.DIALOG_HEADER_CONNECTION_ERROR', + text: { + key: translationResult.id + }, + countdown: countdown, + actions: actions + }) + ); + + } + + // Disconnected + else if (connectionState === ManagedClientState.ConnectionState.DISCONNECTED) { + this.notifyConnectionClosed({ + title: 'CLIENT.DIALOG_HEADER_DISCONNECTED', + text: { + key: 'CLIENT.TEXT_CLIENT_STATUS_' + connectionState.toUpperCase() + }, + actions: actions + }); + } + + // Hide status for all other states + else + this.status = false; + + } + + /** + * Prompts the user to enter additional connection parameters. If the + * protocol and associated parameters of the underlying connection are not + * yet known, this function has no effect and should be re-invoked once + * the parameters are known. + * + * @param requiredParameters + * The set of all parameters requested by the server via "required" + * instructions, where each object key is the name of a requested + * parameter and each value is the current value entered by the user. + */ + private notifyParametersRequired(requiredParameters: Record): void { + + /** + * Action which submits the current set of parameter values, requesting + * that the connection continue. + */ + const SUBMIT_PARAMETERS = { + name: 'CLIENT.ACTION_CONTINUE', + className: 'button', + callback: () => { + if (this.client) { + const params = this.client.requiredParameters; + this.client.requiredParameters = null; + this.managedClientService.sendArguments(this.client, params); + } + } + }; + + /** + * Action which cancels submission of additional parameters and + * disconnects from the current connection. + */ + const CANCEL_PARAMETER_SUBMISSION = { + name: 'CLIENT.ACTION_CANCEL', + className: 'button', + callback: () => { + this.client.requiredParameters = null; + this.client.client.disconnect(); + } + }; + + // Attempt to prompt for parameters only if the parameters that apply + // to the underlying connection are known + if (!this.client.protocol || !this.client.forms) + return; + + // Prompt for parameters + this.status = { + className: 'parameters-required', + formNamespace: Protocol.getNamespace(this.client.protocol), + forms: this.client.forms, + formModel: requiredParameters, + formSubmitCallback: SUBMIT_PARAMETERS.callback, + actions: [SUBMIT_PARAMETERS, CANCEL_PARAMETER_SUBMISSION] + }; + + } + + /** + * Returns whether the given connection state allows for submission of + * connection parameters via "argv" instructions. + * + * @param connectionState + * The connection state to test, as defined by + * ManagedClientState.ConnectionState. + * + * @returns + * true if the given connection state allows submission of connection + * parameters via "argv" instructions, false otherwise. + */ + private canSubmitParameters(connectionState: string): boolean { + return (connectionState === ManagedClientState.ConnectionState.WAITING || + connectionState === ManagedClientState.ConnectionState.CONNECTED); + } + + /** + * Prevents the default behavior of the given AngularJS event if a + * notification is currently shown and the client is focused. + * + * @param e + * The GuacEvent to selectively prevent. + */ + private preventDefaultDuringNotification(e: GuacEvent): void { + if (this.status && this.client.clientProperties.focused) + e.preventDefault(); + } + + ngOnChanges({client}: SimpleChanges): void { + if (client) { + this.clientDiffer = this.differs.find(client.currentValue).create(); + } + } + + ngDoCheck(): void { + if (!this.clientDiffer) return; + + const changes = this.clientDiffer.diff(this.client); + + // TODO: Show status dialog when connection status changes + // $scope.$watchGroup([ + // 'client.clientState.connectionState', + // 'client.requiredParameters', + // 'client.protocol', + // 'client.forms' + // ], function clientStateChanged(newValues) { + if (changes) { + const connectionState: string = this.client.clientState.connectionState; + const requiredParameters: Record | null = this.client.requiredParameters; + + // Prompt for parameters only if parameters can actually be submitted + if (requiredParameters && this.canSubmitParameters(connectionState)) + this.notifyParametersRequired(requiredParameters); + + // Otherwise, just show general connection state + else + this.notifyConnectionState(connectionState); + } + } + + + /** + * Logs out the current user, redirecting them to back to the root + * after logout completes. + */ + logout(): void { + this.authenticationService.logout().subscribe({ + error: this.requestService.IGNORE + }); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.html new file mode 100644 index 0000000000..276f829c08 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.html @@ -0,0 +1,30 @@ + +
    + {{ client.userCount }} +
      +
        + +
      • +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts new file mode 100644 index 0000000000..8f62a7f7fb --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts @@ -0,0 +1,274 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + AfterViewInit, + Component, + DoCheck, + ElementRef, + Input, + KeyValueDiffer, + KeyValueDiffers, + OnChanges, + Renderer2, + SimpleChanges, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import { ManagedClient } from '../../types/ManagedClient'; +import { TranslocoService } from '@ngneat/transloco'; +import { take } from 'rxjs'; +import { AuthenticationResult } from '../../../auth/types/AuthenticationResult'; + +/** + * A component that displays a status indicator showing the number of users + * joined to a connection. The specific usernames of those users are visible in + * a tooltip on mouseover, and small notifications are displayed as users + * join/leave the connection. + */ +@Component({ + selector: 'guac-client-user-count', + templateUrl: './guac-client-user-count.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacClientUserCountComponent implements AfterViewInit, OnChanges, DoCheck { + + /** + * The client whose current users should be displayed. + */ + @Input({required: true}) client!: ManagedClient; + + /** + * The maximum number of messages displayed by this directive at any + * given time. Old messages will be discarded as necessary to ensure + * the number of messages displayed never exceeds this value. + */ + private readonly MAX_MESSAGES: number = 3; + + /** + * A reference to the list element that should contain any notifications regarding users + * joining or leaving the connection. + */ + @ViewChild('clientUserCountMessages') + private readonly messagesRef!: ElementRef; + + /** + * The list that should contain any notifications regarding users + * joining or leaving the connection. + */ + private messages!: HTMLUListElement; + + /** + * Map of the usernames of all users of the current connection to the + * number of concurrent connections those users have to the current + * connection. + */ + userCounts: Record = {}; + + /** + * The ManagedClient attached to this directive at the time the + * notification update scope watch was last invoked. This is necessary + * as $scope.$watchGroup() does not allow for the callback to know + * whether the scope was previously uninitialized (it's "oldValues" + * parameter receives a copy of the new values if there are no old + * values). + */ + private oldClient: ManagedClient | null = null; + + /** + * TODO: Document + * @private + */ + private clientDiffer?: KeyValueDiffer; + + /** + * Inject required services. + */ + constructor(private translocoService: TranslocoService, + private renderer: Renderer2, + private differs: KeyValueDiffers) { + } + + ngAfterViewInit(): void { + this.messages = this.messagesRef.nativeElement; + } + + /** + * Displays a message noting that a change related to a particular user + * of this connection has occurred. + * + * @param str + * The key of the translation string containing the message to + * display. This translation key must accept "USERNAME" as the + * name of the translation parameter containing the username of + * the user in question. + * + * @param username + * The username of the user in question. + */ + private notify(str: string, username: string): void { + this.translocoService.selectTranslate(str, {'USERNAME': username}) + .pipe(take(1)) + .subscribe(text => { + + if (this.messages.childNodes.length === 3) + this.renderer.removeChild(this.messages, this.messages.lastChild); + + + const message = this.renderer.createElement('li'); + this.renderer.addClass(message, 'client-user-count-message'); + this.renderer.setProperty(message, 'textContent', text); + this.messages.insertBefore(message, this.messages.firstChild); + + // Automatically remove the notification after its "fadeout" + // animation ends. NOTE: This will not fire if the element is + // not visible at all. + this.renderer.listen(message, 'animationend', () => { + this.renderer.removeChild(this.messages, message); + }); + + }); + } + + /** + * Displays a message noting that a particular user has joined the + * current connection. + * + * @param username + * The username of the user that joined. + */ + private notifyUserJoined(username: string): void { + if (this.isAnonymous(username)) + this.notify('CLIENT.TEXT_ANONYMOUS_USER_JOINED', username); + else + this.notify('CLIENT.TEXT_USER_JOINED', username); + } + + /** + * Displays a message noting that a particular user has left the + * current connection. + * + * @param username + * The username of the user that left. + */ + private notifyUserLeft(username: string): void { + if (this.isAnonymous(username)) + this.notify('CLIENT.TEXT_ANONYMOUS_USER_LEFT', username); + else + this.notify('CLIENT.TEXT_USER_LEFT', username); + } + + /** + * Returns whether the given username represents an anonymous user. + * + * @param username + * The username of the user to check. + * + * @returns + * true if the given username represents an anonymous user, false + * otherwise. + */ + isAnonymous(username: string): boolean { + return username === AuthenticationResult.ANONYMOUS_USERNAME; + } + + /** + * Returns the translation key of the translation string that should be + * used to render the number of connections a user with the given + * username has to the current connection. The appropriate string will + * vary by whether the user is anonymous. + * + * @param username + * The username of the user to check. + * + * @returns + * The translation key of the translation string that should be + * used to render the number of connections the user with the given + * username has to the current connection. + */ + getUserCountTranslationKey(username: string): string { + return this.isAnonymous(username) ? 'CLIENT.INFO_ANONYMOUS_USER_COUNT' : 'CLIENT.INFO_USER_COUNT'; + } + + ngOnChanges({client}: SimpleChanges): void { + if (client) { + this.clientDiffer = this.differs.find(client.currentValue).create(); + } + } + + ngDoCheck(): void { + if (!this.clientDiffer) return; + + const changes = this.clientDiffer.diff(this.client); + + // TODO: $scope.$watchGroup([ 'client', 'client.userCount' ], function usersChanged() { + + // Update visible notifications as users join/leave + if(changes) { + + // Resynchronize directive with state of any attached client when + // the client changes, to ensure notifications are only shown for + // future changes in users present + if (this.oldClient !== this.client) { + + this.userCounts = {}; + this.oldClient = this.client; + + for (let username in this.client.users) { + const connections = this.client.users[username]; + const count = Object.keys(connections).length; + this.userCounts[username] = count; + } + + return; + + } + + // Display join/leave notifications for users who are currently + // connected but whose connection counts have changed + for (let username in this.client.users) { + const connections = this.client.users[username]; + + const count = Object.keys(connections).length; + const known = this.userCounts[username] || 0; + + if (count > known) + this.notifyUserJoined(username); + else if (count < known) + this.notifyUserLeft(username); + + this.userCounts[username] = count; + + } + + // Display leave notifications for users who are no longer connected + for (let username in this.userCounts) { + const count = this.userCounts[username]; + if (!this.client.users[username]) { + this.notifyUserLeft(username); + delete this.userCounts[username]; + } + } + + } + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.html new file mode 100644 index 0000000000..204ce7db0e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.html @@ -0,0 +1,37 @@ + +
      +
      +
      -
      +
      + % +
      + +
      +
      +
      +
      + +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts new file mode 100644 index 0000000000..0016d8c1e2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { ManagedClient } from '../../types/ManagedClient'; + +/** + * A component for controlling the zoom level and scale-to-fit behavior of + * a single Guacamole client. + */ +@Component({ + selector: 'guac-client-zoom', + templateUrl: './guac-client-zoom.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacClientZoomComponent { + + /** + * The client to control the zoom/autofit of. + */ + @Input({required: true}) client!: ManagedClient; + + /** + * Zooms in by 10%, automatically disabling autofit. + */ + zoomIn(): void { + this.client.clientProperties.autoFit = false; + this.client.clientProperties.scale += 0.1; + } + + /** + * Zooms out by 10%, automatically disabling autofit. + */ + zoomOut(): void { + this.client.clientProperties.autoFit = false; + this.client.clientProperties.scale -= 0.1; + } + + /** + * TODO: Got removed in commit b0febd340226c8d21de7ba4df2807149c8489c10 + * Either remove this method and its call in the template or reimplement it. + */ + zoomSet(): void { + // this.menu.autoFit = false; + // this.client.clientProperties.autoFit = false; + }; + + /** + * Resets the client autofit setting to false. + */ + clearAutoFit(): void { + this.client.clientProperties.autoFit = false; + } + + /** + * Notifies that the autofit setting has been manually changed by the + * user. + */ + autoFitChanged(): void { + + // Reset to 100% scale when autofit is first disabled + if (!this.client.clientProperties.autoFit) + this.client.clientProperties.scale = 1; + + } + + /** + * TODO: Got removed in commit b0febd340226c8d21de7ba4df2807149c8489c10 + * Either remove this method and its call in the template or reimplement it. + */ + changeAutoFit() { + + } + + /** + * TODO: Got removed in commit b0febd340226c8d21de7ba4df2807149c8489c10 + * Either remove this method and its call in the template or reimplement it. + */ + autoFitDisabled() { + // return this.client.clientProperties.minZoom >= 1; + return false; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.html new file mode 100644 index 0000000000..d576ddd5c9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.html @@ -0,0 +1,35 @@ + +
      + + +
      + +
      +
      +
      +
      + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts new file mode 100644 index 0000000000..7db02c0375 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts @@ -0,0 +1,662 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, + ElementRef, + Inject, + Input, + OnChanges, + OnInit, + SimpleChanges, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../../events/types/GuacFrontendEventArguments'; +import { ManagedClient } from '../../types/ManagedClient'; +import { ManagedClientService } from '../../services/managed-client.service'; +import { DOCUMENT } from '@angular/common'; + +/** + * A component for the guacamole client. + */ +@Component({ + selector: 'guac-client', + templateUrl: './guac-client.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacClientComponent implements OnInit, OnChanges { + + /** + * The client to display within this guacClient directive. + */ + @Input({required: true, alias: 'client'}) managedClient!: ManagedClient; + + /** + * Whether translation of touch to mouse events should emulate an + * absolute pointer device, or a relative pointer device. + */ + @Input({required: true}) emulateAbsoluteMouse!: boolean; + + /** + * Whether the local, hardware mouse cursor is in use. + */ + private localCursor: boolean = false; + + /** + * The current Guacamole client instance. + */ + private guacamoleClient: Guacamole.Client | null = null; + + /** + * The display of the current Guacamole client instance. + */ + private display: Guacamole.Display | null = null; + + /** + * The element associated with the display of the current + * Guacamole client instance. + */ + private displayElement: Element | null = null; + + /** + * A reference to the element which must contain the Guacamole display element. + */ + @ViewChild('display', {static: true}) + private readonly displayContainerRef!: ElementRef; + + /** + * The element which must contain the Guacamole display element. + */ + private displayContainer!: HTMLDivElement; + + @ViewChild('main', {static: true}) + private readonly mainRef!: ElementRef; + + /** + * The main containing element for the entire directive. + */ + private main!: HTMLDivElement; + + /** + * Guacamole mouse event object, wrapped around the main client + * display. + * + * @type Guacamole.Mouse + */ + private mouse!: Guacamole.Mouse; + + /** + * Guacamole absolute mouse emulation object, wrapped around the + * main client display. + * + * @type Guacamole.Mouse.Touchscreen + */ + private touchScreen!: Guacamole.Mouse.Touchscreen; + + /** + * Guacamole relative mouse emulation object, wrapped around the + * main client display. + * + * @type Guacamole.Mouse.Touchpad + */ + private touchPad!: Guacamole.Mouse.Touchpad; + + /** + * Guacamole touch event handling object, wrapped around the main + * client dislay. + * + * @type Guacamole.Touch + */ + private touch!: Guacamole.Touch; + + /** + * TODO: Document + * @private + */ + private window: Window; + + /** + * Inject required services. + */ + constructor(private managedClientService: ManagedClientService, + private guacEventService: GuacEventService, + @Inject(DOCUMENT) private document: Document) { + this.window = this.document.defaultView as Window; + } + + ngOnInit(): void { + this.main = this.mainRef.nativeElement; + this.displayContainer = this.displayContainerRef.nativeElement; + + + this.mouse = new Guacamole.Mouse(this.displayContainer); + this.touchScreen = new Guacamole.Mouse.Touchscreen(this.displayContainer); + this.touchPad = new Guacamole.Mouse.Touchpad(this.displayContainer); + this.touch = new Guacamole.Touch(this.displayContainer); + + // Ensure focus is regained via mousedown before forwarding event + this.mouse.on('mousedown', () => this.document.body.focus.bind(this.document.body)()); + + // Forward all mouse events + this.mouse.onEach(['mousedown', 'mousemove', 'mouseup'], + (event: Guacamole.Event) => this.handleMouseEvent(event as Guacamole.Mouse.MouseEvent)); + + // Hide software cursor when mouse leaves display + this.mouse.on('mouseout', () => { + if (!this.display) return; + this.display.showCursor(false); + }); + + // Update remote clipboard if local clipboard changes + this.guacEventService.on('guacClipboard', ({data}) => { + this.managedClientService.setClipboard(this.managedClient, data); + }); + + // Translate local keydown events to remote keydown events if keyboard is enabled + this.guacEventService.on('guacKeydown', ({event, keysym}) => { + if (this.managedClient.clientProperties.focused) { + this.guacamoleClient?.sendKeyEvent(1, keysym); + event.preventDefault(); + } + }); + + // Translate local keyup events to remote keyup events if keyboard is enabled + this.guacEventService.on('guacKeyup', ({event, keysym}) => { + if (this.managedClient.clientProperties.focused) { + this.guacamoleClient?.sendKeyEvent(0, keysym); + event.preventDefault(); + } + }); + + // Universally handle all synthetic keydown events + this.guacEventService.on('guacSyntheticKeydown', ({keysym}) => { + if (this.managedClient.clientProperties.focused) + this.guacamoleClient?.sendKeyEvent(1, keysym); + }); + + // Universally handle all synthetic keyup events + this.guacEventService.on('guacSyntheticKeyup', ({keysym}) => { + if (this.managedClient.clientProperties.focused) + this.guacamoleClient?.sendKeyEvent(0, keysym); + }); + + + this.main.addEventListener('dragenter', this.notifyDragStart, false); + this.main.addEventListener('dragover', this.notifyDragStart, false); + this.main.addEventListener('dragleave', this.notifyDragEnd, false); + + // File drop event handler + this.main.addEventListener('drop', (e) => { + + this.notifyDragEnd(e); + + // Ignore file drops if no attached client + if (!this.managedClient) + return; + + // Upload each file + const files = (e as DragEvent).dataTransfer?.files; + if (!files) return; + + for (let i = 0; i < files.length; i++) + this.managedClientService.uploadFile(this.managedClient, files[i]); + + }, false); + + + this.attachManagedClient(this.managedClient); + } + + /** + * Updates the scale of the attached Guacamole.Client based on current window + * size and "auto-fit" setting. + */ + private updateDisplayScale(): void { + + if (!this.display) return; + + // Calculate scale to fit screen + this.managedClient.clientProperties.minScale = Math.min( + /* TODO */(this.main as any).offsetWidth / Math.max(this.display.getWidth(), 1), + /* TODO */ (this.main as any).offsetHeight / Math.max(this.display.getHeight(), 1) + ); + + // Calculate appropriate maximum zoom level + this.managedClient.clientProperties.maxScale = Math.max(this.managedClient.clientProperties.minScale, 3); + + // Clamp zoom level, maintain auto-fit + if (this.display.getScale() < this.managedClient.clientProperties.minScale || this.managedClient.clientProperties.autoFit) + this.managedClient.clientProperties.scale = this.managedClient.clientProperties.minScale; + + else if (this.display.getScale() > this.managedClient.clientProperties.maxScale) + this.managedClient.clientProperties.scale = this.managedClient.clientProperties.maxScale; + + } + + /** + * Scrolls the client view such that the mouse cursor is visible. + * + * @param mouseState + * The current mouse state. + */ + private scrollToMouse(mouseState: Guacamole.Mouse.State): void { + + // Determine mouse position within view + const mouse_view_x = mouseState.x + this.displayContainer.offsetLeft - this.main.scrollLeft; + const mouse_view_y = mouseState.y + this.displayContainer.offsetTop - this.main.scrollTop; + + // Determine viewport dimensions + const view_width = /* TODO */(this.main as any).offsetWidth; + const view_height = /* TODO */(this.main as any).offsetHeight; + + // Determine scroll amounts based on mouse position relative to document + + let scroll_amount_x; + if (mouse_view_x > view_width) + scroll_amount_x = mouse_view_x - view_width; + else if (mouse_view_x < 0) + scroll_amount_x = mouse_view_x; + else + scroll_amount_x = 0; + + let scroll_amount_y; + if (mouse_view_y > view_height) + scroll_amount_y = mouse_view_y - view_height; + else if (mouse_view_y < 0) + scroll_amount_y = mouse_view_y; + else + scroll_amount_y = 0; + + // Scroll (if necessary) to keep mouse on screen. + /* TODO */ + (this.main as any).scrollLeft += scroll_amount_x; + /* TODO */ + (this.main as any).scrollTop += scroll_amount_y; + + } + + /** + * Handles a mouse event originating from the user's actual mouse. + * This differs from handleEmulatedMouseEvent() in that the + * software mouse cursor must be shown only if the user's browser + * does not support explicitly setting the hardware mouse cursor. + * + * @param event + * The mouse event to handle. + */ + private handleMouseEvent(event: Guacamole.Mouse.MouseEvent): void { + + // Do not attempt to handle mouse state changes if the client + // or display are not yet available + if (!this.guacamoleClient || !this.display) + return; + + event.stopPropagation(); + event.preventDefault(); + + // Send mouse state, show cursor if necessary + this.display.showCursor(!this.localCursor); + this.guacamoleClient.sendMouseState(event.state, true); + + } + + /** + * Handles a mouse event originating from one of Guacamole's mouse + * emulation objects. This differs from handleMouseState() in that + * the software mouse cursor must always be shown (as the emulated + * mouse device will not have its own cursor). + * + * @param event + * The mouse event to handle. + */ + private handleEmulatedMouseEvent(event: Guacamole.Mouse.MouseEvent): void { + + // Do not attempt to handle mouse state changes if the client + // or display are not yet available + if (!this.guacamoleClient || !this.display) + return; + + event.stopPropagation(); + event.preventDefault(); + + // Ensure software cursor is shown + this.display.showCursor(true); + + // Send mouse state, ensure cursor is visible + this.scrollToMouse(event.state); + this.guacamoleClient.sendMouseState(event.state, true); + + } + + /** + * Handles a touch event originating from the user's device. + * + * @param event + * The touch event. + */ + private handleTouchEvent(event: Guacamole.Touch.Event): void { + + // Do not attempt to handle touch state changes if the client + // or display are not yet available + if (!this.guacamoleClient || !this.display) + return; + + event.preventDefault(); + + // Send touch state, hiding local cursor + this.display.showCursor(false); + this.guacamoleClient.sendTouchState(event.state, true); + + } + + /** + * TODO + * @param managedClient + */ + private attachManagedClient(managedClient: ManagedClient): void { + + if (!this.displayContainer) + return; + + // Remove any existing display + this.displayContainer.innerHTML = ''; + + // Only proceed if a client is given + if (!this.managedClient) + return; + + // Get Guacamole client instance + this.guacamoleClient = managedClient.client; + + // Attach possibly new display + this.display = this.guacamoleClient.getDisplay(); + this.display.scale(this.managedClient.clientProperties.scale); + + // Add display element + this.displayElement = this.display.getElement(); + this.displayContainer.appendChild(this.displayElement!); + + // Do nothing when the display element is clicked on + this.display.getElement().onclick = (e: any) => { + e.preventDefault(); + return false; + }; + + // Connect and update interface to match required size, deferring + // connecting until a future element resize if the main element + // size (desired display size) is not known and thus can't be sent + // during the handshake + this.mainElementResized(); + } + + ngOnChanges(changes: SimpleChanges): void { + + // Attach any given managed client + if (changes['managedClient']) { + const managedClient = changes['managedClient'].currentValue as ManagedClient; + this.attachManagedClient(managedClient); + } + + /* TODO: Reimplement + * // Update actual view scrollLeft when scroll properties change + * $scope.$watch('client.clientProperties.scrollLeft', function scrollLeftChanged(scrollLeft) { + * main.scrollLeft = scrollLeft; + * $scope.client.clientProperties.scrollLeft = main.scrollLeft; + * }); + * + * // Update actual view scrollTop when scroll properties change + * $scope.$watch('client.clientProperties.scrollTop', function scrollTopChanged(scrollTop) { + * main.scrollTop = scrollTop; + * $scope.client.clientProperties.scrollTop = main.scrollTop; + * }); + * + * // Update scale when display is resized + * $scope.$watch('client.managedDisplay.size', function setDisplaySize() { + * $scope.$evalAsync(updateDisplayScale); + * }); + * + * // Keep local cursor up-to-date + * $scope.$watch('client.managedDisplay.cursor', function setCursor(cursor) { + * if (cursor) + * localCursor = mouse.setCursor(cursor.canvas, cursor.x, cursor.y); + * }); + * + * // Update touch event handling depending on remote multi-touch + * // support and mouse emulation mode + * $scope.$watchGroup([ + * 'client.multiTouchSupport', + * 'emulateAbsoluteMouse' + * ], function touchBehaviorChanged() { + * + * // Clear existing event handling + * touch.offEach(['touchstart', 'touchmove', 'touchend'], handleTouchEvent); + * touchScreen.offEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); + * touchPad.offEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); + * + * // Directly forward local touch events + * if ($scope.client.multiTouchSupport) + * touch.onEach(['touchstart', 'touchmove', 'touchend'], handleTouchEvent); + * + * // Switch to touchscreen if mouse emulation is required and + * // absolute mouse emulation is preferred + * else if ($scope.emulateAbsoluteMouse) + * touchScreen.onEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); + * + * // Use touchpad for mouse emulation if absolute mouse emulation + * // is not preferred + * else + * touchPad.onEach(['mousedown', 'mousemove', 'mouseup'], handleEmulatedMouseEvent); + * + * }); + * + * // Adjust scale if modified externally + * $scope.$watch('client.clientProperties.scale', function changeScale(scale) { + * + * // Fix scale within limits + * scale = Math.max(scale, $scope.client.clientProperties.minScale); + * scale = Math.min(scale, $scope.client.clientProperties.maxScale); + * + * // If at minimum zoom level, hide scroll bars + * if (scale === $scope.client.clientProperties.minScale) + * main.style.overflow = "hidden"; + * + * // If not at minimum zoom level, show scroll bars + * else + * main.style.overflow = "auto"; + * + * // Apply scale if client attached + * if (display) + * display.scale(scale); + * + * if (scale !== $scope.client.clientProperties.scale) + * $scope.client.clientProperties.scale = scale; + * + * }); + * + * // If autofit is set, the scale should be set to the minimum scale, filling the screen + * $scope.$watch('client.clientProperties.autoFit', function changeAutoFit(autoFit) { + * if(autoFit) + * $scope.client.clientProperties.scale = $scope.client.clientProperties.minScale; + * }); + */ + } + + /** + * Sends the current size of the main element (the display container) + * to the Guacamole server, requesting that the remote display be + * resized. If the Guacamole client is not yet connected, it will be + * connected and the current size will sent through the initial + * handshake. If the size of the main element is not yet known, this + * function may need to be invoked multiple times until the size is + * known and the client may be connected. + */ + mainElementResized(): void { + + // Send new display size, if changed + if (this.guacamoleClient && this.display && this.main.offsetWidth && this.main.offsetHeight) { + + // Connect, if not already connected + this.managedClientService.connect(this.managedClient, /* TODO */(this.main as any).offsetWidth, /* TODO */(this.main as any).offsetHeight); + + const pixelDensity = this. window.devicePixelRatio || 1; + const width = /* TODO */(this.main as any).offsetWidth * pixelDensity; + const height = /* TODO */(this.main as any).offsetHeight * pixelDensity; + + if (this.display.getWidth() !== width || this.display.getHeight() !== height) + this.guacamoleClient.sendSize(width, height); + + } + + // TODO: $scope.$evalAsync(updateDisplayScale); + this.updateDisplayScale(); + + } + + // Scroll client display if absolute mouse is in use (the same drag + // gesture is needed for moving the mouse pointer with relative mouse) + clientDrag(inProgress: boolean, startX: number, startY: number, currentX: number, currentY: number, deltaX: number, deltaY: number): boolean { + + if (this.emulateAbsoluteMouse) { + this.managedClient.clientProperties.scrollLeft -= deltaX; + this.managedClient.clientProperties.scrollTop -= deltaY; + } + + return false; + + } + + /** + * If a pinch gesture is in progress, the scale of the client display when + * the pinch gesture began. + */ + private initialScale: number | null = null; + + /** + * If a pinch gesture is in progress, the X coordinate of the point on the + * client display that was centered within the pinch at the time the + * gesture began. + */ + private initialCenterX: number = 0; + + /** + * If a pinch gesture is in progress, the Y coordinate of the point on the + * client display that was centered within the pinch at the time the + * gesture began. + */ + private initialCenterY: number = 0; + + /** + * Zoom and pan client via pinch gestures. + */ + clientPinch(inProgress: boolean, startLength: number, currentLength: number, centerX: number, centerY: number): boolean { + + // Do not handle pinch gestures if they would conflict with remote + // handling of similar gestures + if (this.managedClient.multiTouchSupport > 1) + return false; + + // Do not handle pinch gestures while relative mouse is in use (2+ + // contact point gestures are used by relative mouse emulation to + // support right click, middle click, and scrolling) + if (!this.emulateAbsoluteMouse) + return false; + + // Stop gesture if not in progress + if (!inProgress) { + this.initialScale = null; + return false; + } + + // Set initial scale if gesture has just started + if (!this.initialScale) { + this.initialScale = this.managedClient.clientProperties.scale; + this.initialCenterX = (centerX + this.managedClient.clientProperties.scrollLeft) / this.initialScale; + this.initialCenterY = (centerY + this.managedClient.clientProperties.scrollTop) / this.initialScale; + } + + // Determine new scale absolutely + let currentScale = this.initialScale * currentLength / startLength; + + // Fix scale within limits - scroll will be miscalculated otherwise + currentScale = Math.max(currentScale, this.managedClient.clientProperties.minScale); + currentScale = Math.min(currentScale, this.managedClient.clientProperties.maxScale); + + // Update scale based on pinch distance + this.managedClient.clientProperties.autoFit = false; + this.managedClient.clientProperties.scale = currentScale; + + // Scroll display to keep original pinch location centered within current pinch + this.managedClient.clientProperties.scrollLeft = this.initialCenterX * currentScale - centerX; + this.managedClient.clientProperties.scrollTop = this.initialCenterY * currentScale - centerY; + + return false; + + } + + /** + * Whether a drag/drop operation is currently in progress (the user has + * dragged a file over the Guacamole connection but has not yet + * dropped it). + */ + dropPending: boolean = false; + + /** + * Displays a visual indication that dropping the file currently + * being dragged is possible. Further propagation and default behavior + * of the given event is automatically prevented. + * + * @param {Event} e + * The event related to the in-progress drag/drop operation. + */ + notifyDragStart(e: Event): void { + + e.preventDefault(); + e.stopPropagation(); + + // TODO: $scope.$apply(() => { + this.dropPending = true; + // }); + + }; + + /** + * Removes the visual indication that dropping the file currently + * being dragged is possible. Further propagation and default behavior + * of the given event is automatically prevented. + * + * @param {Event} e + * The event related to the end of the former drag/drop operation. + */ + private notifyDragEnd(e: Event): void { + + e.preventDefault(); + e.stopPropagation(); + + // TODO: $scope.$apply(() => { + this.dropPending = false; + // }); + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.html new file mode 100644 index 0000000000..51d6b526df --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.html @@ -0,0 +1,41 @@ + +
      + + +
      +

      {{'CLIENT.SECTION_HEADER_FILE_TRANSFERS' | transloco}}

      + +
      + + +
      +
      +

      {{ client.name }}

      +
      + + +
      +
      +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.ts new file mode 100644 index 0000000000..23b447896d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer-manager/guac-file-transfer-manager.component.ts @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { ManagedClientGroup } from '../../types/ManagedClientGroup'; +import { ManagedFileTransferState } from '../../types/ManagedFileTransferState'; +import { ManagedClient } from '../../types/ManagedClient'; +import { ManagedClientService } from '../../services/managed-client.service'; + +/** + * Component which displays all active file transfers. + */ +@Component({ + selector: 'guac-file-transfer-manager', + templateUrl: './guac-file-transfer-manager.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacFileTransferManagerComponent { + + /** + * The client group whose file transfers should be managed by this + * directive. + */ + @Input({required: true}) clientGroup!: ManagedClientGroup | null; + + /** + * Inject required services. + */ + constructor(private managedClientService: ManagedClientService) { + } + + /** + * Determines whether the given file transfer state indicates an + * in-progress transfer. + * + * @param transferState + * The file transfer state to check. + * + * @returns + * true if the given file transfer state indicates an in- + * progress transfer, false otherwise. + */ + private isInProgress(transferState: ManagedFileTransferState): boolean { + switch (transferState.streamState) { + + // IDLE or OPEN file transfers are active + case ManagedFileTransferState.StreamState.IDLE: + case ManagedFileTransferState.StreamState.OPEN: + return true; + + // All others are not active + default: + return false; + + } + } + + /** + * Removes all file transfers which are not currently in-progress. + */ + clearCompletedTransfers(): void { + + // Nothing to clear if no client group attached + if (!this.clientGroup) + return; + + // Remove completed uploads + this.clientGroup.clients.forEach(client => { + client.uploads = client.uploads.filter(upload => this.isInProgress(upload.transferState)); + }); + + } + + /** + * @borrows ManagedClientGroup.hasMultipleClients + */ + hasMultipleClients(group: ManagedClientGroup | null): boolean { + return ManagedClientGroup.hasMultipleClients(group); + } + + /** + * @borrows ManagedClientService.hasTransfers + */ + hasTransfers(client: ManagedClient): boolean { + return this.managedClientService.hasTransfers(client); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.html new file mode 100644 index 0000000000..871122080c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.html @@ -0,0 +1,43 @@ + +
      + + +
      + + +
      +
      +
      +
      + {{transfer.filename}} +
      + + +

      {{translatedErrorMessage}}

      + +
      + + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.ts new file mode 100644 index 0000000000..d238f1f848 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-file-transfer/guac-file-transfer.component.ts @@ -0,0 +1,246 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, + DoCheck, + Input, + KeyValueDiffer, + KeyValueDiffers, + OnChanges, + SimpleChanges, + ViewEncapsulation +} from '@angular/core'; +import { ManagedFileUpload } from '../../types/ManagedFileUpload'; +import { ManagedFileTransferState } from '../../types/ManagedFileTransferState'; +import { saveAs } from 'file-saver'; +import { GuacTranslateService } from '../../services/guac-translate.service'; + +/** + * Component which displays an active file transfer, providing links for + * downloads, if applicable. + */ +@Component({ + selector: 'guac-file-transfer', + templateUrl: './guac-file-transfer.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacFileTransferComponent implements DoCheck, OnChanges { + + /** + * The file transfer to display. + */ + @Input({required: true}) transfer!: ManagedFileUpload; + + /** + * The translated error message for the current status code. + */ + translatedErrorMessage?: string = ''; + + /** + * TODO + */ + private transferDiffer?: KeyValueDiffer; + + /** + * Inject required services. + */ + constructor(private guacTranslate: GuacTranslateService, private differs: KeyValueDiffers) { + } + + /** + * Returns the unit string that is most appropriate for the + * number of bytes transferred thus far - either 'gb', 'mb', 'kb', + * or 'b'. + * + * @returns + * The unit string that is most appropriate for the number of + * bytes transferred thus far. + */ + getProgressUnit(): string { + + const bytes = this.transfer.progress || 0; + + // Gigabytes + if (bytes > 1000000000) + return 'gb'; + + // Megabytes + if (bytes > 1000000) + return 'mb'; + + // Kilobytes + if (bytes > 1000) + return 'kb'; + + // Bytes + return 'b'; + + } + + /** + * Returns the amount of data transferred thus far, in the units + * returned by getProgressUnit(). + * + * @returns + * The amount of data transferred thus far, in the units + * returned by getProgressUnit(). + */ + getProgressValue(): number | string | undefined { + + const bytes = this.transfer.progress; + if (!bytes) + return bytes; + + // Convert bytes to necessary units + switch (this.getProgressUnit()) { + + // Gigabytes + case 'gb': + return (bytes / 1000000000).toFixed(1); + + // Megabytes + case 'mb': + return (bytes / 1000000).toFixed(1); + + // Kilobytes + case 'kb': + return (bytes / 1000).toFixed(1); + + // Bytes + case 'b': + default: + return bytes; + + } + + } + + /** + * Returns the percentage of bytes transferred thus far, if the + * overall length of the file is known. + * + * @returns + * The percentage of bytes transferred thus far, if the + * overall length of the file is known. + */ + getPercentDone(): number { + return this.transfer.progress! / this.transfer.length! * 100; + } + + /** + * Determines whether the associated file transfer is in progress. + * + * @returns + * true if the file transfer is in progress, false otherwise. + */ + isInProgress(): boolean { + + // Not in progress if there is no transfer + if (!this.transfer) + return false; + + // Determine in-progress status based on stream state + switch (this.transfer.transferState.streamState) { + + // IDLE or OPEN file transfers are active + case ManagedFileTransferState.StreamState.IDLE: + case ManagedFileTransferState.StreamState.OPEN: + return true; + + // All others are not active + default: + return false; + + } + + } + + /** + * Returns whether the file associated with this file transfer can + * be saved locally via a call to save(). + * + * @returns + * true if a call to save() will result in the file being + * saved, false otherwise. + */ + isSavable(): boolean { + return !!(this.transfer as any).blob; + } + + /** + * Saves the downloaded file, if any. If this transfer is an upload + * or the download is not yet complete, this function has no + * effect. + */ + save(): void { + + // Ignore if no blob exists + if (!(this.transfer as any).blob) + return; + + // Save file + saveAs((this.transfer as any).blob, this.transfer.filename); + + } + + /** + * Returns whether an error has occurred. If an error has occurred, + * the transfer is no longer active, and the text of the error can + * be read from getErrorText(). + * + * @returns + * true if an error has occurred during transfer, false + * otherwise. + */ + hasError(): boolean { + return this.transfer.transferState.streamState === ManagedFileTransferState.StreamState.ERROR; + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes['transfer']) { + // Update the object that should be used to check for changes + this.transferDiffer = this.differs.find(this.transfer).create(); + } + } + + ngDoCheck(): void { + + if (!this.transferDiffer || !this.transfer) return; + const changes = this.transferDiffer.diff(this.transferDiffer); + + if (changes) { // TODO: $scope.$watch('transfer.transferState.statusCode' + + // TODO: Determine translation name of error + console.log('TODO: Determine translation name of error', changes); + + // Determine translation name of error + const errorName: string = 'CLIENT.ERROR_UPLOAD_' + this.transfer.transferState.statusCode.toString(16).toUpperCase(); + + // Use translation string, or the default if no translation is found for this error code + this.guacTranslate.translateWithFallback(errorName, 'CLIENT.ERROR_UPLOAD_DEFAULT').subscribe( + translationResult => this.translatedErrorMessage = translationResult.message + ); + + } + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.html new file mode 100644 index 0000000000..16d37da96b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.html @@ -0,0 +1,29 @@ + +
      + + +
      +
      +
      +
      +
      +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.ts new file mode 100644 index 0000000000..14a9391542 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-thumbnail/guac-thumbnail.component.ts @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, + DoCheck, + ElementRef, + Input, + KeyValueDiffer, + KeyValueDiffers, + OnChanges, + Renderer2, + SimpleChanges, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import { ManagedClient } from '../../types/ManagedClient'; + +/** + * A component for displaying a Guacamole client as a non-interactive + * thumbnail. + */ +@Component({ + selector: 'guac-thumbnail', + templateUrl: './guac-thumbnail.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacThumbnailComponent implements OnChanges, DoCheck { + + /** + * The client to display within this guacThumbnail directive. + */ + @Input() client?: ManagedClient; + + /** + * The display of the current Guacamole client instance. + */ + private display: Guacamole.Display | null = null; + + /** + * The element associated with the display of the current + * Guacamole client instance. + */ + private displayElement: Element | null = null; + + /** + * The element which must contain the Guacamole display element. + */ + @ViewChild('display') + private displayContainer!: ElementRef; + + /** + * TODO + */ + private clientDiffer?: KeyValueDiffer; + + /** + * + * @param main + * The main containing element for the entire directive. + */ + constructor(private main: ElementRef, private renderer: Renderer2, private differs: KeyValueDiffers) { + } + + /** + * Updates the scale of the attached Guacamole.Client based on current window + * size and "auto-fit" setting. + */ + updateDisplayScale(): void { + + if (!this.display) return; + + // Fit within available area + this.display.scale(Math.min( + this.main.nativeElement.offsetWidth / Math.max(this.display.getWidth(), 1), + this.main.nativeElement.offsetHeight / Math.max(this.display.getHeight(), 1) + )); + + } + + ngOnChanges(changes: SimpleChanges): void { + + // Attach any given managed client + if (changes['client']) { + + const managedClient = changes['client'].currentValue as ManagedClient | undefined; + + this.clientDiffer = this.differs.find(managedClient).create(); + + // Remove any existing display + this.renderer.setProperty(this.displayContainer.nativeElement, 'innerHTML', '') + + // Only proceed if a client is given + if (!managedClient) + return; + + // Get Guacamole client instance + const client: Guacamole.Client = managedClient.client; + + // Attach possibly new display + this.display = client.getDisplay(); + + // Add display element + this.displayElement = this.display.getElement(); + this.renderer.appendChild(this.displayContainer.nativeElement, this.displayElement); + } + + } + + ngDoCheck(): void { + + if (!this.clientDiffer || !this.client) return; + const changes = this.clientDiffer.diff(this.client); + if (changes) { + console.log('TODO: Update scale when display is resized', changes); + // TODO: Update scale when display is resized + // $scope.$watch('client.managedDisplay.size', function setDisplaySize(size) { + // $scope.$evalAsync($scope.updateDisplayScale); + // }); + } + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.html new file mode 100644 index 0000000000..81e47241f5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.html @@ -0,0 +1,53 @@ + +
      +
      +
      + +
      +

      + + {{ client.title }} + + +

      + + + + + + + + + +
      + +
      +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.ts new file mode 100644 index 0000000000..434f5eb8af --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-clients/guac-tiled-clients.component.ts @@ -0,0 +1,190 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { + GuacFrontendEventArguments +} from '../../../events/types/GuacFrontendEventArguments'; +import { ManagedClientGroup } from '../../types/ManagedClientGroup'; +import { ManagedClient } from '../../types/ManagedClient'; +import filter from 'lodash/filter'; +import { GuacClickCallback, GuacEventService } from 'guacamole-frontend-lib'; +import { ManagedClientService } from '../../services/managed-client.service'; + +/** + * A component which displays one or more Guacamole clients in an evenly-tiled + * view. The number of rows and columns used for the arrangement of tiles is + * automatically determined by the number of clients present. + */ +@Component({ + selector: 'guac-tiled-clients', + templateUrl: './guac-tiled-clients.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacTiledClientsComponent implements OnChanges { + + /** + * The function to invoke when the "close" button in the header of a + * client tile is clicked. The ManagedClient that is closed will be + * supplied as the function argument. + */ + @Input({required: true}) onClose!: (client: ManagedClient) => void; + + /** + * The group of Guacamole clients that should be displayed in an + * evenly-tiled grid arrangement. + */ + @Input({required: true}) clientGroup!: ManagedClientGroup | null; + + /** + * Whether translation of touch to mouse events should emulate an + * absolute pointer device, or a relative pointer device. + */ + @Input({required: true}) emulateAbsoluteMouse!: boolean; + + /** + * The currently-focused ManagedClient or null if there are no focused + * clients or if multiple clients are focused. + */ + private focusedClient: ManagedClient | null = null; + + /** + * Inject required services. + */ + constructor(private guacEventService: GuacEventService, + private managedClientService: ManagedClientService) { + } + + /** + * Returns the currently-focused ManagedClient. If there is no such + * client, or multiple clients are focused, null is returned. + * + * @returns + * The currently-focused client, or null if there are no focused + * clients or if multiple clients are focused. + */ + private getFocusedClient(): ManagedClient | null { + + const managedClientGroup = this.clientGroup; + if (managedClientGroup) { + const focusedClients = filter(managedClientGroup.clients, client => client.clientProperties.focused); + if (focusedClients.length === 1) + return focusedClients[0]; + } + + return null; + + } + + ngOnChanges({clientGroup}: SimpleChanges): void { + + if (clientGroup) { + const newFocusedClient = this.getFocusedClient(); + + // Notify whenever identify of currently-focused client changes + if (this.focusedClient !== newFocusedClient) + this.guacEventService.broadcast('guacClientFocused', {newFocusedClient}) + + this.focusedClient = newFocusedClient; + } + + } + + /** + * Returns a callback for guacClick that assigns or updates keyboard + * focus to the given client, allowing that client to receive and + * handle keyboard events. Multiple clients may have keyboard focus + * simultaneously. + * + * @param client + * The client that should receive keyboard focus. + * + * @return + * The callback that guacClient should invoke when the given client + * has been clicked. + */ + getFocusAssignmentCallback(client: ManagedClient): GuacClickCallback { + return (shift, ctrl) => { + + // Clear focus of all other clients if not selecting multiple + if (!shift && !ctrl) { + this.clientGroup?.clients.forEach(client => { + client.clientProperties.focused = false; + }); + } + + client.clientProperties.focused = true; + + // Fill in any gaps if performing rectangular multi-selection + // via shift-click + if (shift && this.clientGroup) { + + let minRow = this.clientGroup.rows - 1; + let minColumn = this.clientGroup.columns - 1; + let maxRow = 0; + let maxColumn = 0; + + // Determine extents of selected area + ManagedClientGroup.forEach(this.clientGroup, (client, row, column) => { + if (client.clientProperties.focused) { + minRow = Math.min(minRow, row); + minColumn = Math.min(minColumn, column); + maxRow = Math.max(maxRow, row); + maxColumn = Math.max(maxColumn, column); + } + }); + + ManagedClientGroup.forEach(this.clientGroup, (client, row, column) => { + client.clientProperties.focused = + row >= minRow + && row <= maxRow + && column >= minColumn + && column <= maxColumn; + }); + + } + + }; + } + + /** + * @borrows ManagedClientGroup.hasMultipleClients + */ + hasMultipleClients(group: ManagedClientGroup | null): boolean { + return ManagedClientGroup.hasMultipleClients(group); + } + + /** + * @borrows ManagedClientGroup.getClientGrid + */ + getClientGrid(group: ManagedClientGroup | null): ManagedClient[][] { + if (group === null) + return []; + + return ManagedClientGroup.getClientGrid(group); + } + + /** + * @borrows ManagedClientService~isShared + */ + isShared(client: ManagedClient): boolean { + return this.managedClientService.isShared(client); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.html new file mode 100644 index 0000000000..66859b90b3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.html @@ -0,0 +1,32 @@ + +
      +
      +
      + +
      + +
      + +
      +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.ts new file mode 100644 index 0000000000..2022ee2a50 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-tiled-thumbnails/guac-tiled-thumbnails.component.ts @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { ManagedClientGroup } from '../../types/ManagedClientGroup'; +import { ManagedClient } from '../../types/ManagedClient'; + +/** + * A component for displaying a group of Guacamole clients as a non-interactive + * thumbnail of tiled client displays. + */ +@Component({ + selector: 'guac-tiled-thumbnails', + templateUrl: './guac-tiled-thumbnails.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacTiledThumbnailsComponent { + + /** + * The group of clients to display as a thumbnail of tiled client + * displays. + */ + @Input({required: true}) clientGroup!: ManagedClientGroup; + + /** + * The overall height of the thumbnail view of the tiled grid of + * clients within the client group, in pixels. This value is + * intentionally based off a snapshot of the current browser size at + * the time the directive comes into existence to ensure the contents + * of the thumbnail are familiar in appearance and aspect ratio. + */ + height = Math.min(window.innerHeight, 128); + + /** + * The overall width of the thumbnail view of the tiled grid of + * clients within the client group, in pixels. This value is + * intentionally based off a snapshot of the current browser size at + * the time the directive comes into existence to ensure the contents + * of the thumbnail are familiar in appearance and aspect ratio. + */ + width = window.innerWidth / window.innerHeight * this.height; + + /** + * @borrows ManagedClientGroup.getClientGrid + */ + getClientGrid(group: ManagedClientGroup): ManagedClient[][] { + return ManagedClientGroup.getClientGrid(group); + } + + /** + * Inject required services. + */ + constructor() { + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/directives/guac-zoom-ctrl.directive.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/directives/guac-zoom-ctrl.directive.ts new file mode 100644 index 0000000000..79d2c0abb4 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/directives/guac-zoom-ctrl.directive.ts @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; + +/** + * A directive which modifies the parsing of a form control value when used + * on a number input field. The behavior of this directive for other input elements + * is undefined. Converts between human-readable zoom percentage and display scale. + */ +@Directive({ + selector: '[guacZoomCtrl]', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => GuacZoomCtrlDirective), + multi: true + } + ] +}) +export class GuacZoomCtrlDirective implements ControlValueAccessor { + + /** + * Callback function that has to be called when the control's value changes in the UI. + * + * @param value + * The new value of the control. + */ + private onChange!: (value: any) => void; + + /** + * Callback function that has to be called when the control's value changes in the UI. + */ + private onTouched!: () => void; + + constructor(private renderer: Renderer2, private el: ElementRef) { + } + + registerOnChange(fn: any): void { + this.onChange = fn; + } + + registerOnTouched(fn: any): void { + this.onTouched = fn; + } + + setDisabledState(isDisabled: boolean): void { + this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled); + } + + /** + * Called by the forms API to write to the view when programmatic changes from model to view are requested. + * Multiplies the value by 100. + * + * @param value + * The new value for the input element. + */ + writeValue(value: any): void { + const newValue = Math.round(value * 100); + this.renderer.setProperty(this.el.nativeElement, 'value', newValue); + } + + + /** + * Form control will be updated on input. + * The value is divided by 100. + */ + @HostListener('input', ['$event.target.value']) + onInput(value: string): void { + const parsedValue = Math.round(Number(value)) / 100; + this.onChange(parsedValue); + this.onTouched(); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts new file mode 100644 index 0000000000..6d7ad6ff92 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts @@ -0,0 +1,342 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { + SessionStorageFactory +} from '../../storage/session-storage-factory.service'; +import { ManagedClient } from '../types/ManagedClient'; +import { ManagedClientGroup } from '../types/ManagedClientGroup'; +import find from 'lodash/find'; +import findIndex from 'lodash/findIndex'; +import remove from 'lodash/remove'; +import { ManagedClientService } from './managed-client.service'; + +/** + * A service for managing several active Guacamole clients. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacClientManagerService { + + /** + * Getter/setter which retrieves or sets the map of all active managed + * clients. Each key is the ID of the connection used by that client. + */ + private readonly storedManagedClients: Function = this.sessionStorageFactory.create({}, () => { + + // Disconnect all clients when storage is destroyed + this.clear(); + + }); + + /** + * Getter/setter which retrieves or sets the array of all active managed + * client groups. + */ + private readonly storedManagedClientGroups: Function = this.sessionStorageFactory.create([], () => { + + // Disconnect all clients when storage is destroyed + this.clear(); + + }); + + /** + * Reference to the global window object. + */ + readonly window: Window; + + /** + * Inject required services. + */ + constructor(@Inject(DOCUMENT) private document: Document, + private sessionStorageFactory: SessionStorageFactory, + private managedClientService: ManagedClientService) { + this.window = this.document.defaultView as Window; + + // Disconnect all clients when window is unloaded + this.window.addEventListener('unload', () => this.clear()); + } + + /** + * Returns a map of all active managed clients. Each key is the ID of the + * connection used by that client. + * + * @returns {Object.} + * A map of all active managed clients. + */ + getManagedClients(): Record { + return this.storedManagedClients(); + } + + /** + * Returns an array of all managed client groups. + * + * @returns + * An array of all active managed client groups. + */ + getManagedClientGroups(): ManagedClientGroup[] { + return this.storedManagedClientGroups(); + } + + /** + * Removes the ManagedClient with the given ID from all + * ManagedClientGroups, automatically adjusting the tile size of the + * clients that remain in each group. All client groups that are empty + * after the client is removed will also be removed. + * + * @param id + * The ID of the ManagedClient to remove. + */ + private ungroupManagedClient(id: string): void { + + const managedClientGroups: ManagedClientGroup[] = this.storedManagedClientGroups(); + + // Remove client from all groups + managedClientGroups.forEach(group => { + const removed = remove(group.clients, client => (client.id === id)); + if (removed.length) { + + // Reset focus state if client is being removed from a group + // that isn't currently attached (focus may otherwise be + // retained and result in a newly added connection unexpectedly + // sharing focus) + if (!group.attached) + removed.forEach(client => { + client.clientProperties.focused = false; + }); + + // Recalculate group grid if number of clients is changing + ManagedClientGroup.recalculateTiles(group); + + } + }); + + // Remove any groups that are now empty + remove(managedClientGroups, group => !group.clients.length); + + } + + /** + * Removes the existing ManagedClient associated with the connection having + * the given ID, if any. If no such a ManagedClient already exists, this + * function has no effect. + * + * @param id + * The ID of the connection whose ManagedClient should be removed. + * + * @returns + * true if an existing client was removed, false otherwise. + */ + removeManagedClient(id: string): boolean { + + const managedClients: Record = this.storedManagedClients(); + + // Remove client if it exists + if (id in managedClients) { + + // Pull client out of any containing groups + this.ungroupManagedClient(id); + + // Disconnect and remove + managedClients[id].client.disconnect(); + delete managedClients[id]; + + // A client was removed + return true; + + } + + // No client was removed + return false; + + } + + /** + * Creates a new ManagedClient associated with the connection having the + * given ID. If such a ManagedClient already exists, it is disconnected and + * replaced. + * + * @param id + * The ID of the connection whose ManagedClient should be retrieved. + * + * @returns + * The ManagedClient associated with the connection having the given + * ID. + */ + replaceManagedClient(id: string): ManagedClient { + + const managedClients: Record = this.storedManagedClients(); + const managedClientGroups: ManagedClientGroup[] = this.storedManagedClientGroups(); + + // Remove client if it exists + if (id in managedClients) { + + const hadFocus = managedClients[id].clientProperties.focused; + managedClients[id].client.disconnect(); + delete managedClients[id]; + + // Remove client from all groups + managedClientGroups.forEach(group => { + + const index = findIndex(group.clients, client => (client.id === id)); + if (index === -1) + return; + + group.clients[index] = managedClients[id] = this.managedClientService.getInstance(id); + managedClients[id].clientProperties.focused = hadFocus; + + }); + + } + + return managedClients[id]; + + } + + /** + * Returns the ManagedClient associated with the connection having the + * given ID. If no such ManagedClient exists, a new ManagedClient is + * created. + * + * @param id + * The ID of the connection whose ManagedClient should be retrieved. + * + * @returns + * The ManagedClient associated with the connection having the given + * ID. + */ + getManagedClient(id: string): ManagedClient { + + const managedClients = this.storedManagedClients(); + + // Ensure any existing client is removed from its containing group + // prior to being returned + this.ungroupManagedClient(id); + + // Create new managed client if it doesn't already exist + if (!(id in managedClients)) + managedClients[id] = this.managedClientService.getInstance(id); + + // Return existing client + return managedClients[id]; + + } + + /** + * Returns the ManagedClientGroup having the given ID. If no such + * ManagedClientGroup exists, a new ManagedClientGroup is created by + * extracting the relevant connections from the ID. + * + * @param id + * The ID of the ManagedClientGroup to retrieve or create. + * + * @returns + * The ManagedClientGroup having the given ID. + */ + getManagedClientGroup(id: string): ManagedClientGroup { + + const managedClientGroups: ManagedClientGroup[] = this.storedManagedClientGroups(); + const existingGroup = find(managedClientGroups, (group) => { + return id === ManagedClientGroup.getIdentifier(group); + }); + + // Prefer to return the existing group if it exactly matches + if (existingGroup) + return existingGroup; + + const clients: ManagedClient[] = []; + const clientIds = ManagedClientGroup.getClientIdentifiers(id); + + // Separate active clients by whether they should be displayed within + // the current view + clientIds.forEach(id => { + clients.push(this.getManagedClient(id)); + }); + + const group = new ManagedClientGroup({ + clients: clients + }); + + // Focus the first client if there are no clients focused + ManagedClientGroup.verifyFocus(group); + + managedClientGroups.push(group); + return group; + + } + + /** + * Removes the existing ManagedClientGroup having the given ID, if any, + * disconnecting and removing all ManagedClients associated with that + * group. If no such a ManagedClientGroup currently exists, this function + * has no effect. + * + * @param id + * The ID of the ManagedClientGroup to remove. + * + * @returns + * true if a ManagedClientGroup was removed, false otherwise. + */ + removeManagedClientGroup(id: string): boolean { + + const managedClients: Record = this.storedManagedClients(); + const managedClientGroups: ManagedClientGroup[] = this.storedManagedClientGroups(); + + // Remove all matching groups (there SHOULD only be one) + const removed = remove(managedClientGroups, (group) => ManagedClientGroup.getIdentifier(group) === id); + + // Disconnect all clients associated with the removed group(s) + removed.forEach((group) => { + group.clients.forEach((client) => { + + const id = client.id; + if (managedClients[id]) { + managedClients[id].client.disconnect(); + delete managedClients[id]; + } + + }); + }); + + return !!removed.length; + + } + + /** + * Disconnects and removes all currently-connected clients and client + * groups. + */ + clear(): void { + + const managedClients: Record = this.storedManagedClients(); + + // Disconnect each managed client + for (let id in managedClients) + managedClients[id].client.disconnect(); + + // Clear managed clients and client groups + this.storedManagedClients({}); + this.storedManagedClientGroups([]); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts new file mode 100644 index 0000000000..c0895b4e0d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; +import { GuacTranslateService } from './guac-translate.service'; +import { TRANSLOCO_MISSING_HANDLER, TranslocoService, TranslocoTestingModule } from '@ngneat/transloco'; +import { GuacMissingHandler } from '../../locale/locale.module'; +import { testScheduler } from '../../util/test-helper'; +import { TranslationResult } from '../types/TranslationResult'; + + +describe('GuacTranslateService', () => { + let service: GuacTranslateService; + let transloco: TranslocoService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + TranslocoTestingModule.forRoot({ + langs: {}, + translocoConfig: { + availableLangs: ['en'], + defaultLang: 'en', + + }, + preloadLangs: true, + }) + ], + providers: [ + { + provide: TRANSLOCO_MISSING_HANDLER, + useClass: GuacMissingHandler + } + ] + }); + service = TestBed.inject(GuacTranslateService); + }); + + beforeEach(() => { + transloco = TestBed.inject(TranslocoService); + }) + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should return requested translation if available', () => { + testScheduler.run(({expectObservable}) => { + + const translationId = 'ID'; + const translationMessage = 'message'; + const defaultTranslationId = 'DEFAULT_ID'; + + transloco.setTranslation({[translationId]: translationMessage}); + + const result = service.translateWithFallback(translationId, defaultTranslationId); + + const expected = new TranslationResult({ + id: translationId, + message: translationMessage + }); + + expectObservable(result).toBe('(a|)', {a: expected}); + }); + }); + + + it('should return translation for default id if available but requested id is not', () => { + testScheduler.run(({expectObservable}) => { + + const translationId = 'ID'; + const defaultTranslationId = 'DEFAULT_ID'; + const defaultTranslationMessage = 'default message'; + + transloco.setTranslation({[defaultTranslationId]: defaultTranslationMessage}); + + const result = service.translateWithFallback(translationId, defaultTranslationId); + + const expected = new TranslationResult({ + id: defaultTranslationId, + message: defaultTranslationMessage + }); + + expectObservable(result).toBe('(a|)', {a: expected}); + }); + }); + + it('should return the literal value of `defaultTranslationId` for both the ID and message if neither id could be translated', () => { + testScheduler.run(({expectObservable}) => { + + const translationId = 'ID'; + const defaultTranslationId = 'DEFAULT_ID'; + + const result = service.translateWithFallback(translationId, defaultTranslationId); + + const expected = new TranslationResult({ + id: defaultTranslationId, + message: defaultTranslationId + }); + + expectObservable(result).toBe('(a|)', {a: expected}); + }); + }); + + +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.ts new file mode 100644 index 0000000000..cb03a6ea5a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.ts @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { TranslocoService } from '@ngneat/transloco'; +import { Observable, of, switchMap, take } from 'rxjs'; +import { TranslationResult } from '../types/TranslationResult'; +import { HashMap } from '@ngneat/transloco/lib/types'; +import { translationValueIfMissing } from '../../locale/locale.module'; + +/** + * A wrapper around the angular-translate $translate service that offers a + * convenient way to fall back to a default translation if the requested + * translation is not available. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacTranslateService { + + /** + * Inject required services. + */ + constructor(private translocoService: TranslocoService) { + } + + /** + * Returns an observable that will emit a TranslationResult containing either the + * requested ID and message (if translated), or the default ID and message if translated, + * or the literal value of `defaultTranslationId` for both the ID and message if neither + * is translated. + * + * @param translationId + * The requested translation ID, which may or may not be translated. + * + * @param defaultTranslationId + * The translation ID that will be used if no translation is found for `translationId`. + * + * @returns + * An observable which emits a TranslationResult containing the results from + * the translation attempt. + */ + translateWithFallback(translationId: string, defaultTranslationId: string): Observable { + + // Use null as a fallback value to detect missing translations more easily + const params: HashMap = translationValueIfMissing(null); + + // Attempt to translate the requested translation ID + return this.translocoService.selectTranslate(translationId, params) + .pipe( + take(1), + switchMap((translation) => { + + // If the requested translation is available, use that + if (translation !== null) + return of(new TranslationResult({id: translationId, message: translation})); + + // Otherwise, try the default translation ID + return this.translocoService.selectTranslate(defaultTranslationId, params) + .pipe( + take(1), + switchMap((defaultTranslation) => { + + // Default translation worked, so use that + if (defaultTranslation !== null) + return of(new TranslationResult({ + id: defaultTranslationId, + message: defaultTranslation + })); + + // Neither translation is available; as a fallback, return default ID for both + return of(new TranslationResult({ + id: defaultTranslationId, + message: defaultTranslationId + })); + }) + ) + }) + ); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts new file mode 100644 index 0000000000..d22a19136c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts @@ -0,0 +1,859 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import { ClientIdentifier } from '../../navigation/types/ClientIdentifier'; +import { + GuacAudioService, + GuacImageService, + GuacVideoService, +} from 'guacamole-frontend-lib'; +import { DOCUMENT } from '@angular/common'; +import { AuthenticationService } from '../../auth/service/authentication.service'; +import { PreferenceService } from '../../settings/services/preference.service'; +import { ManagedClient } from '../types/ManagedClient'; +import { TunnelService } from '../../rest/service/tunnel.service'; +import { RequestService } from '../../rest/service/request.service'; +import isEmpty from 'lodash/isEmpty'; +import { ManagedArgument } from '../types/ManagedArgument'; +import { NOOP } from '../../util/noop'; +import { ManagedFilesystemService } from './managed-filesystem.service'; +import { ConnectionGroupService } from '../../rest/service/connection-group.service'; +import { ActiveConnectionService } from '../../rest/service/active-connection.service'; +import { ConnectionService } from '../../rest/service/connection.service'; +import { ManagedFilesystem } from '../types/ManagedFilesystem'; +import { SharingProfile } from '../../rest/types/SharingProfile'; +import { catchError, Observable, tap } from 'rxjs'; +import { ManagedShareLink } from '../types/ManagedShareLink'; +import { UserCredentials } from '../../rest/types/UserCredentials'; +import { ManagedFileUploadService } from './managed-file-upload.service'; +import { ClientIdentifierService } from '../../navigation/service/client-identifier.service'; +import { GuacHistoryService } from '../../history/guac-history.service'; +import { ClipboardService } from '../../clipboard/services/clipboard.service'; +import { ManagedClientState } from '../types/ManagedClientState'; +import { ClipboardData } from '../../clipboard/types/ClipboardData'; +import { ManagedClientThumbnail } from '../types/ManagedClientThumbnail'; +import { ManagedDisplay } from '../types/ManagedDisplay'; + +/** + * A service for working with ManagedClient objects. + */ +@Injectable({ + providedIn: 'root' +}) +export class ManagedClientService { + + /** + * The minimum amount of time to wait between updates to the client + * thumbnail, in milliseconds. + */ + readonly THUMBNAIL_UPDATE_FREQUENCY: number = 5000; + + /** + * Reference to the window object. + */ + readonly window: Window; + + constructor( + @Inject(DOCUMENT) private document: Document, + private authenticationService: AuthenticationService, + private preferenceService: PreferenceService, + private tunnelService: TunnelService, + private requestService: RequestService, + private clipboardService: ClipboardService, + private managedFilesystemService: ManagedFilesystemService, + private managedFileUploadService: ManagedFileUploadService, + private connectionService: ConnectionService, + private connectionGroupService: ConnectionGroupService, + private activeConnectionService: ActiveConnectionService, + private guacHistory: GuacHistoryService, + private guacAudio: GuacAudioService, + private guacVideo: GuacVideoService, + private guacImage: GuacImageService, + private clientIdentifierService: ClientIdentifierService + ) { + this.window = this.document.defaultView as Window; + } + + /** + * Returns a promise which resolves with the string of connection + * parameters to be passed to the Guacamole client during connection. This + * string generally contains the desired connection ID, display resolution, + * and supported audio/video/image formats. The returned promise is + * guaranteed to resolve successfully. + * + * @param identifier + * The identifier representing the connection or group to connect to. + * + * @param width + * The optimal display width, in local CSS pixels. + * + * @param height + * The optimal display height, in local CSS pixels. + * + * @returns + * A promise which resolves with the string of connection parameters to + * be passed to the Guacamole client, once the string is ready. + */ + private getConnectString(identifier: ClientIdentifier, width: number, height: number): Promise { + + return new Promise((resolve, reject) => { + + // Calculate optimal width/height for display + const pixel_density = this.window.devicePixelRatio || 1; + const optimal_dpi = pixel_density * 96; + const optimal_width = width * pixel_density; + const optimal_height = height * pixel_density; + + // Build base connect string + let connectString = + 'token=' + encodeURIComponent(this.authenticationService.getCurrentToken()!) + + '&GUAC_DATA_SOURCE=' + encodeURIComponent(identifier.dataSource) + + '&GUAC_ID=' + encodeURIComponent(identifier.id!) + + '&GUAC_TYPE=' + encodeURIComponent(identifier.type) + + '&GUAC_WIDTH=' + Math.floor(optimal_width) + + '&GUAC_HEIGHT=' + Math.floor(optimal_height) + + '&GUAC_DPI=' + Math.floor(optimal_dpi) + + '&GUAC_TIMEZONE=' + encodeURIComponent(this.preferenceService.preferences.timezone); + + // Add audio mimetypes to connect string + this.guacAudio.supported.forEach(function (mimetype) { + connectString += '&GUAC_AUDIO=' + encodeURIComponent(mimetype); + }); + + // Add video mimetypes to connect string + this.guacVideo.supported.forEach(function (mimetype) { + connectString += '&GUAC_VIDEO=' + encodeURIComponent(mimetype); + }); + + // Add image mimetypes to connect string + this.guacImage.getSupportedMimetypes().then(function supportedMimetypesKnown(mimetypes) { + + // Add each image mimetype + mimetypes.forEach(mimetype => { + connectString += '&GUAC_IMAGE=' + encodeURIComponent(mimetype); + }); + + // Connect string is now ready - nothing else is deferred + resolve(connectString); + + }); + }); + + } + + /** + * Requests the creation of a new audio stream, recorded from the user's + * local audio input device. If audio input is supported by the connection, + * an audio stream will be created which will remain open until the remote + * desktop requests that it be closed. If the audio stream is successfully + * created but is later closed, a new audio stream will automatically be + * established to take its place. The mimetype used for all audio streams + * produced by this function is defined by + * ManagedClient.AUDIO_INPUT_MIMETYPE. + * + * @param client + * The Guacamole.Client for which the audio stream is being requested. + */ + private requestAudioStream(client: Guacamole.Client): void { + + // Create new audio stream, associating it with an AudioRecorder + const stream = client.createAudioStream(ManagedClient.AUDIO_INPUT_MIMETYPE); + const recorder = Guacamole.AudioRecorder.getInstance(stream, ManagedClient.AUDIO_INPUT_MIMETYPE); + + // If creation of the AudioRecorder failed, simply end the stream + if (!recorder) + stream.sendEnd(); + + // Otherwise, ensure that another audio stream is created after this + // audio stream is closed + else + recorder.onclose = this.requestAudioStream.bind(this, client); + + } + + /** + * Creates a new ManagedClient representing the specified connection or + * connection group. The ManagedClient will not initially be connected, + * and must be explicitly connected by invoking ManagedClient.connect(). + * + * @param {String} id + * The ID of the connection or group to connect to. This String must be + * a valid ClientIdentifier string, as would be generated by + * ClientIdentifierService.toString(). + * + * @returns {ManagedClient} + * A new ManagedClient instance which represents the connection or + * connection group having the given ID. + */ + getInstance(id: string): ManagedClient { + + let tunnel: Guacamole.Tunnel; + + // If WebSocket available, try to use it. + if ('WebSocket' in this.window) + tunnel = new Guacamole.ChainedTunnel( + new Guacamole.WebSocketTunnel('websocket-tunnel'), + new Guacamole.HTTPTunnel('tunnel') + ); + + // If no WebSocket, then use HTTP. + else + tunnel = new Guacamole.HTTPTunnel('tunnel'); + + // Get new client instance + const client: Guacamole.Client = new Guacamole.Client(tunnel); + + // Associate new managed client with new client and tunnel + const managedClient: ManagedClient = new ManagedClient({ + id: id, + client: client, + tunnel: tunnel + }); + + // Fire events for tunnel errors + tunnel.onerror = function tunnelError(status: Guacamole.Status) { + // TODO: $rootScope.$apply(function handleTunnelError() { + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.TUNNEL_ERROR, + status.code); + // TODO: }); + }; + + // Pull protocol-specific information from tunnel once tunnel UUID is + // known + tunnel.onuuid = (uuid: string) => { + this.tunnelService.getProtocol(uuid).subscribe({ + next: protocol => { + managedClient.protocol = protocol.name !== undefined ? protocol.name : null; + managedClient.forms = protocol.connectionForms; + }, error: this.requestService.WARN + }); + }; + + // Update connection state as tunnel state changes + tunnel.onstatechange = (state: number) => { + // TODO: 1 $rootScope.$evalAsync(function updateTunnelState() { + + switch (state) { + + // Connection is being established + case Guacamole.Tunnel.State.CONNECTING: + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.CONNECTING); + break; + + // Connection is established / no longer unstable + case Guacamole.Tunnel.State.OPEN: + ManagedClientState.setTunnelUnstable(managedClient.clientState, false); + break; + + // Connection is established but misbehaving + case Guacamole.Tunnel.State.UNSTABLE: + ManagedClientState.setTunnelUnstable(managedClient.clientState, true); + break; + + // Connection has closed + case Guacamole.Tunnel.State.CLOSED: + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.DISCONNECTED); + break; + + } + + // TODO: 1 }); + }; + + // Update connection state as client state changes + client.onstatechange = (clientState: number) => { + // TODO: 2 $rootScope.$evalAsync(function updateClientState() { + + switch (clientState) { + + // Idle + case Guacamole.Client.State.IDLE: + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.IDLE); + break; + + // Connecting + case Guacamole.Client.State.CONNECTING: + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.CONNECTING); + break; + + // Connected + waiting + case Guacamole.Client.State.WAITING: + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.WAITING); + break; + + // Connected + case Guacamole.Client.State.CONNECTED: + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.CONNECTED); + + // Sync current clipboard data + this.clipboardService.getClipboard().then((data) => { + this.setClipboard(managedClient, data); + }); + + // Begin streaming audio input if possible + this.requestAudioStream(client); + + // Update thumbnail with initial display contents + this.updateThumbnail(managedClient); + break; + + // Update history during disconnect phases + case Guacamole.Client.State.DISCONNECTING: + case Guacamole.Client.State.DISCONNECTED: + this.updateThumbnail(managedClient); + break; + + } + + // TODO: 2}); + }; + + // Disconnect and update status when the client receives an error + client.onerror = (status: Guacamole.Status) => { + // TODO: 3 $rootScope.$apply(function handleClientError() { + + // Disconnect, if connected + client.disconnect(); + + // Update state + ManagedClientState.setConnectionState(managedClient.clientState, + ManagedClientState.ConnectionState.CLIENT_ERROR, + status.code); + + // TODO: 3 }); + }; + + // Update user count when a new user joins + client.onjoin = (id: string, username: string) => { + // TODO: 4 $rootScope.$apply(function usersChanged() { + + const connections = managedClient.users[username] || {}; + managedClient.users[username] = connections; + + managedClient.userCount++; + connections[id] = true; + + // TODO: 4 }); + }; + + // Update user count when a user leaves + client.onleave = function userLeft(id: string, username: string) { + // TODO: 5 $rootScope.$apply(function usersChanged() { + + const connections = managedClient.users[username] || {}; + managedClient.users[username] = connections; + + managedClient.userCount--; + delete connections[id]; + + // Delete user entry after no connections remain + if (isEmpty(connections)) + delete managedClient.users[username]; + + // TODO: 5 }); + }; + + // Automatically update the client thumbnail + client.onsync = () => { + + const thumbnail: ManagedClientThumbnail | null = managedClient.thumbnail; + const timestamp: number = new Date().getTime(); + + // Update thumbnail if it doesn't exist or is old + if (!thumbnail || timestamp - thumbnail.timestamp >= this.THUMBNAIL_UPDATE_FREQUENCY) { + // TODO: 6 $rootScope.$apply(function updateClientThumbnail() { + this.updateThumbnail(managedClient); + // TODO: 6 }); + } + + }; + + // Test for argument mutability whenever an argument value is + // received + client.onargv = (stream: Guacamole.InputStream, mimetype: string, name: string) => { + + // Ignore arguments which do not use a mimetype currently supported + // by the web application + if (mimetype !== 'text/plain') + return; + + const reader = new Guacamole.StringReader(stream); + + // Assemble received data into a single string + let value = ''; + reader.ontext = text => { + value += text; + }; + + // Test mutability once stream is finished, storing the current + // value for the argument only if it is mutable + reader.onend = () => { + ManagedArgument.getInstance(managedClient, name, value).then(argument => { + managedClient.arguments[name] = argument; + }, function ignoreImmutableArguments() { + }); + }; + + }; + + // Handle any received clipboard data + client.onclipboard = (stream: Guacamole.InputStream, mimetype: string) => { + + let reader: Guacamole.StringReader | Guacamole.BlobReader; + + // If the received data is text, read it as a simple string + if (/^text\//.exec(mimetype)) { + + reader = new Guacamole.StringReader(stream); + + // Assemble received data into a single string + let data = ''; + reader.ontext = text => { + data += text; + }; + + // Set clipboard contents once stream is finished + reader.onend = () => { + this.clipboardService.setClipboard(new ClipboardData({ + source: managedClient.id, + type: mimetype, + data: data + })).catch(NOOP); + }; + + } + + // Otherwise read the clipboard data as a Blob + else { + reader = new Guacamole.BlobReader(stream, mimetype); + reader.onend = () => { + this.clipboardService.setClipboard(new ClipboardData({ + source: managedClient.id, + type: mimetype, + data: (reader as Guacamole.BlobReader).getBlob() + })).catch(NOOP); + }; + } + + }; + + // Update level of multi-touch support when known + client.onmultitouch = (layer: Guacamole.Display.VisibleLayer, touches: number) => { + managedClient.multiTouchSupport = touches; + }; + + // Update title when a "name" instruction is received + client.onname = name => { + // TODO: 7 $rootScope.$apply(function updateClientTitle() { + managedClient.title = name; + // TODO: 7 }); + }; + + // Handle any received files + client.onfile = (stream: Guacamole.InputStream, mimetype: string, filename: string) => { + this.tunnelService.downloadStream(tunnel.uuid, stream, mimetype, filename); + }; + + // Handle any received filesystem objects + client.onfilesystem = (object: Guacamole.Object, name: string) => { + // TODO: 8 $rootScope.$apply(function exposeFilesystem() { + managedClient.filesystems.push(this.managedFilesystemService.getInstance(managedClient, object, name)); + // TODO: 8 }); + }; + + // Handle any received prompts + client.onrequired = (parameters: string[]) => { + // TODO: 9 $rootScope.$apply(function promptUser() { + managedClient.requiredParameters = {}; + parameters.forEach(name => { + managedClient.requiredParameters![name] = ''; + }); + // TODO: 9 }); + }; + + // Manage the client display + managedClient.managedDisplay = ManagedDisplay.getInstance(client.getDisplay()); + + // Parse connection details from ID + const clientIdentifier = this.clientIdentifierService.fromString(id); + + // Defer actually connecting the Guacamole client until + // ManagedClient.connect() is explicitly invoked + + // If using a connection, pull connection name and protocol information + if (clientIdentifier.type === ClientIdentifier.Types.CONNECTION) { + this.connectionService.getConnection(clientIdentifier.dataSource, clientIdentifier.id!) + .subscribe({ + next: connection => { + managedClient.name = managedClient.title = connection.name; + }, error: this.requestService.WARN + }); + } + + // If using a connection group, pull connection name + else if (clientIdentifier.type === ClientIdentifier.Types.CONNECTION_GROUP) { + this.connectionGroupService.getConnectionGroup(clientIdentifier.dataSource, clientIdentifier.id) + .subscribe({ + next: group => { + managedClient.name = managedClient.title = group.name; + }, error: this.requestService.WARN + }); + } + + // If using an active connection, pull corresponding connection, then + // pull connection name and protocol information from that + else if (clientIdentifier.type === ClientIdentifier.Types.ACTIVE_CONNECTION) { + this.activeConnectionService.getActiveConnection(clientIdentifier.dataSource, clientIdentifier.id!) + .subscribe({ + next: activeConnection => { + + // Attempt to retrieve connection details only if the + // underlying connection is known + if (activeConnection.connectionIdentifier) { + this.connectionService.getConnection(clientIdentifier.dataSource, activeConnection.connectionIdentifier) + .subscribe({ + next: connection => { + managedClient.name = managedClient.title = connection.name; + }, error: this.requestService.WARN + }); + } + + }, error: this.requestService.WARN + }); + } + + return managedClient; + + } + + /** + * Connects the given ManagedClient instance to its associated connection + * or connection group. If the ManagedClient has already been connected, + * including if connected but subsequently disconnected, this function has + * no effect. + * + * @param managedClient + * The ManagedClient to connect. + * + * @param width + * The optimal display width, in local CSS pixels. If omitted, the + * browser window width will be used. + * + * @param height + * The optimal display height, in local CSS pixels. If omitted, the + * browser window height will be used. + */ + connect(managedClient: ManagedClient, width: number, height: number): void { + + // Ignore if already connected + if (managedClient.clientState.connectionState !== ManagedClientState.ConnectionState.IDLE) + return; + + // Parse connection details from ID + const clientIdentifier = this.clientIdentifierService.fromString(managedClient.id); + + // Connect the Guacamole client + this.getConnectString(clientIdentifier, width, height) + .then(function connectClient(connectString) { + managedClient.client.connect(connectString); + }); + + } + + /** + * Uploads the given file to the server through the given Guacamole client. + * The file transfer can be monitored through the corresponding entry in + * the uploads array of the given managedClient. + * + * @param managedClient + * The ManagedClient through which the file is to be uploaded. + * + * @param file + * The file to upload. + * + * @param filesystem + * The filesystem to upload the file to, if any. If not specified, the + * file will be sent as a generic Guacamole file stream. + * + * @param [directory=filesystem.currentDirectory] + * The directory within the given filesystem to upload the file to. If + * not specified, but a filesystem is given, the current directory of + * that filesystem will be used. + */ + uploadFile(managedClient: ManagedClient, file: File, filesystem?: ManagedFilesystem, directory?: ManagedFilesystem.File): void { + + // Use generic Guacamole file streams by default + let object = null; + let streamName = null; + + // If a filesystem is given, determine the destination object and stream + if (filesystem) { + object = filesystem.object; + streamName = (directory || filesystem.currentDirectory).streamName + '/' + file.name; + } + + // Start and manage file upload + managedClient.uploads.push(this.managedFileUploadService.getInstance(managedClient, file, object, streamName)); + + } + + /** + * Sends the given clipboard data over the given Guacamole client, setting + * the contents of the remote clipboard to the data provided. If the given + * clipboard data was originally received from that client, the data is + * ignored and this function has no effect. + * + * @param managedClient + * The ManagedClient over which the given clipboard data is to be sent. + * + * @param data + * The clipboard data to send. + */ + setClipboard(managedClient: ManagedClient, data: ClipboardData): void { + + // Ignore clipboard data that was received from this connection + if (data.source === managedClient.id) + return; + + let writer: Guacamole.StringWriter | Guacamole.BlobWriter; + + // Create stream with proper mimetype + const stream = managedClient.client.createClipboardStream(data.type); + + // Send data as a string if it is stored as a string + if (typeof data.data === 'string') { + writer = new Guacamole.StringWriter(stream); + writer.sendText(data.data); + writer.sendEnd(); + } + + // Otherwise, assume the data is a File/Blob + else { + + // Write File/Blob asynchronously + writer = new Guacamole.BlobWriter(stream); + writer.oncomplete = function clipboardSent() { + writer.sendEnd(); + }; + + // Begin sending data + writer.sendBlob(data.data); + + } + + } + + /** + * Assigns the given value to the connection parameter having the given + * name, updating the behavior of the connection in real-time. If the + * connection parameter is not editable, this function has no effect. + * + * @param managedClient + * The ManagedClient instance associated with the active connection + * being modified. + * + * @param name + * The name of the connection parameter to modify. + * + * @param value + * The value to attempt to assign to the given connection parameter. + */ + setArgument(managedClient: ManagedClient, name: string, value: string): void { + const managedArgument = managedClient.arguments[name]; + if (managedArgument && ManagedArgument.setValue(managedArgument, value)) + delete managedClient.arguments[name]; + } + + /** + * Sends the given connection parameter values using "argv" streams, + * updating the behavior of the connection in real-time if the server is + * expecting or requiring these parameters. + * + * @param managedClient + * The ManagedClient instance associated with the active connection + * being modified. + * + * @param values + * The set of values to attempt to assign to corresponding connection + * parameters, where each object key is the connection parameter being + * set. + */ + sendArguments(managedClient: ManagedClient, values: Record | null): void { + for (let name in values) { + const value = values[name]; + + const stream = managedClient.client.createArgumentValueStream('text/plain', name); + const writer = new Guacamole.StringWriter(stream); + writer.sendText(value); + writer.sendEnd(); + } + } + + /** + * Retrieves the current values of all editable connection parameters as a + * set of name/value pairs suitable for use as the model of a form which + * edits those parameters. + * + * @param client + * The ManagedClient instance associated with the active connection + * whose parameter values are being retrieved. + * + * @returns + * A new set of name/value pairs containing the current values of all + * editable parameters. + */ + getArgumentModel(client: ManagedClient): Record { + + const model: Record = {}; + + for (let argumentName in client.arguments) { + const managedArgument = client.arguments[argumentName]; + + model[managedArgument.name] = managedArgument.value; + } + + return model; + + } + + /** + * Produces a sharing link for the given ManagedClient using the given + * sharing profile. The resulting sharing link, and any required login + * information, can be retrieved from the shareLinks property + * of the given ManagedClient once the various underlying service calls + * succeed. + * + * @param client + * The ManagedClient which will be shared via the generated sharing + * link. + * + * @param sharingProfile + * The sharing profile to use to generate the sharing link. + * + * @returns + * An observable which completes once the sharing link has been + * successfully generated, and fails if generating the link fails. + */ + createShareLink(client: ManagedClient, sharingProfile: SharingProfile): Observable { + + // Retrieve sharing credentials for the sake of generating a share link + return this.tunnelService.getSharingCredentials(client.tunnel.uuid, sharingProfile.identifier) + .pipe( + // Add a new share link once the credentials are ready + tap(sharingCredentials => { + client.shareLinks[sharingProfile.identifier] = + ManagedShareLink.getInstance(sharingProfile, sharingCredentials) + }), + catchError(this.requestService.WARN) + ); + + } + + /** + * Returns whether the given ManagedClient is being shared. A ManagedClient + * is shared if it has any associated share links. + * + * @param client + * The ManagedClient to check. + * + * @returns + * true if the ManagedClient has at least one associated share link, + * false otherwise. + */ + isShared(client: ManagedClient): boolean { + + // The connection is shared if at least one share link exists + for (let dummy in client.shareLinks) + return true; + + // No share links currently exist + return false; + + } + + /** + * Returns whether the given client has any associated file transfers, + * regardless of those file transfers' state. + * + * @param client TODO: type was {GuacamoleClient} + * The client for which file transfers should be checked. + * + * @returns + * true if there are any file transfers associated with the + * given client, false otherwise. + */ + hasTransfers(client: ManagedClient): boolean { + return !!(client && client.uploads && client.uploads.length); + } + + /** + * Store the thumbnail of the given managed client within the connection + * history under its associated ID. If the client is not connected, this + * function has no effect. + * + * @param managedClient + * The client whose history entry should be updated. + */ + updateThumbnail(managedClient: ManagedClient): void { + + const display = managedClient.client.getDisplay(); + + // Update stored thumbnail of previous connection + if (display && display.getWidth() > 0 && display.getHeight() > 0) { + + // Get screenshot + const canvas = display.flatten(); + + // Calculate scale of thumbnail (max 320x240, max zoom 100%) + const scale = Math.min(320 / canvas.width, 240 / canvas.height, 1); + + // Create thumbnail canvas + const thumbnail = this.document.createElement('canvas'); + thumbnail.width = canvas.width * scale; + thumbnail.height = canvas.height * scale; + + // Scale screenshot to thumbnail + const context = thumbnail.getContext('2d') as CanvasRenderingContext2D; + context.drawImage(canvas, + 0, 0, canvas.width, canvas.height, + 0, 0, thumbnail.width, thumbnail.height + ); + + // Store updated thumbnail within client + managedClient.thumbnail = new ManagedClientThumbnail({ + timestamp: new Date().getTime(), + canvas: thumbnail + }); + + // Update historical thumbnail + this.guacHistory.updateThumbnail(managedClient.id, thumbnail.toDataURL('image/png')); + + } + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-file-upload.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-file-upload.service.ts new file mode 100644 index 0000000000..ca1e84a846 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-file-upload.service.ts @@ -0,0 +1,166 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../events/types/GuacFrontendEventArguments'; +import { RequestService } from '../../rest/service/request.service'; +import { TunnelService } from '../../rest/service/tunnel.service'; +import { ManagedFileUpload } from '../types/ManagedFileUpload'; +import { ManagedClient } from '../types/ManagedClient'; +import { ManagedFileTransferState } from '../types/ManagedFileTransferState'; +import { Error } from '../../rest/types/Error'; + +/** + * A service for creating new ManagedFileUpload instances. + */ +@Injectable({ + providedIn: 'root' +}) +export class ManagedFileUploadService { + + /** + * Inject required services. + */ + constructor(private requestService: RequestService, + private tunnelService: TunnelService, + private guacEventService: GuacEventService) { + } + + /** + * Creates a new ManagedFileUpload which uploads the given file to the + * server through the given Guacamole client. + * + * @param managedClient + * The ManagedClient through which the file is to be uploaded. + * + * @param file + * The file to upload. + * + * @param object + * The object to upload the file to, if any, such as a filesystem + * object. + * + * @param streamName + * The name of the stream to upload the file to. If an object is given, + * this must be specified. + * + * @return + * A new ManagedFileUpload object which can be used to track the + * progress of the upload. + */ + getInstance(managedClient: ManagedClient, file: File, object?: any, streamName: string | null = null): ManagedFileUpload { + + const managedFileUpload = new ManagedFileUpload(); + + // Pull Guacamole.Tunnel and Guacamole.Client from given ManagedClient + const client = managedClient.client; + const tunnel = managedClient.tunnel; + + // Open file for writing + let stream: Guacamole.OutputStream; + if (!object) + stream = client.createFileStream(file.type, file.name); + + // If object/streamName specified, upload to that instead of a file + // stream + else + stream = object.createOutputStream(file.type, streamName); + + // Notify that the file transfer is pending + // TODO: $rootScope.$evalAsync(function uploadStreamOpen() { + + // Init managed upload + managedFileUpload.filename = file.name; + managedFileUpload.mimetype = file.type; + managedFileUpload.progress = 0; + managedFileUpload.length = file.size; + + // Notify that stream is open + ManagedFileTransferState.setStreamState(managedFileUpload.transferState, + ManagedFileTransferState.StreamState.OPEN); + + // TODO: }); + + // Upload file once stream is acknowledged + stream.onack = (status: Guacamole.Status) => { + + // Notify of any errors from the Guacamole server + if (status.isError()) { + // TODO: $rootScope.$apply(function uploadStreamError() { + ManagedFileTransferState.setStreamState(managedFileUpload.transferState, + ManagedFileTransferState.StreamState.ERROR, status.code); + // TODO: }); + return; + } + + // Begin upload + this.tunnelService.uploadToStream(tunnel.uuid, stream, file, length => { + // TODO: $rootScope.$apply(function uploadStreamProgress() { + managedFileUpload.progress = length; + // TODO: }); + }) + + // Notify if upload succeeds + .then(() => { + + // Upload complete + managedFileUpload.progress = file.size; + + // Close the stream + stream.sendEnd(); + ManagedFileTransferState.setStreamState(managedFileUpload.transferState, + ManagedFileTransferState.StreamState.CLOSED); + + // Notify of upload completion + this.guacEventService.broadcast('guacUploadComplete', {filename: file.name}); + }, + + // Notify if upload fails + this.requestService.createPromiseErrorCallback((error: any) => { + + // Use provide status code if the error is coming from the stream + if (error.type === Error.Type.STREAM_ERROR) + ManagedFileTransferState.setStreamState(managedFileUpload.transferState, + ManagedFileTransferState.StreamState.ERROR, + error.statusCode); + + // Fail with internal error for all other causes + else + ManagedFileTransferState.setStreamState(managedFileUpload.transferState, + ManagedFileTransferState.StreamState.ERROR, + Guacamole.Status.Code.INTERNAL_ERROR); + + // Close the stream + stream.sendEnd(); + + })); + + // Ignore all further acks + stream.onack = null; + + + }; + + return managedFileUpload; + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts new file mode 100644 index 0000000000..fde2e8763e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts @@ -0,0 +1,213 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { TunnelService } from '../../rest/service/tunnel.service'; +import { ManagedFilesystem } from '../types/ManagedFilesystem'; +import { ManagedClient } from '../types/ManagedClient'; + +/** + * A service for working with ManagedFilesystem objects. + */ +@Injectable({ + providedIn: 'root' +}) +export class ManagedFilesystemService { + + /** + * Inject required services. + */ + constructor(private tunnelService: TunnelService) { + } + + /** + * Refreshes the contents of the given file, if that file is a directory. + * Only the immediate children of the file are refreshed. Files further + * down the directory tree are not refreshed. + * + * @param filesystem + * The filesystem associated with the file being refreshed. + * + * @param file + * The file being refreshed. + */ + refresh(filesystem: ManagedFilesystem, file: ManagedFilesystem.File): void { + + // @ts-ignore + // Do not attempt to refresh the contents of directories + if (file.mimetype !== Guacamole.Object.STREAM_INDEX_MIMETYPE) + return; + + // Request contents of given file + filesystem.object.requestInputStream(file.streamName, (stream: Guacamole.InputStream, mimetype: string) => { + + // @ts-ignore + // Ignore stream if mimetype is wrong + if (mimetype !== Guacamole.Object.STREAM_INDEX_MIMETYPE) { + stream.sendAck('Unexpected mimetype', Guacamole.Status.Code.UNSUPPORTED); + return; + } + + // Signal server that data is ready to be received + stream.sendAck('Ready', Guacamole.Status.Code.SUCCESS); + + // Read stream as JSON + const reader = new Guacamole.JSONReader(stream); + + // Acknowledge received JSON blobs + reader.onprogress = function onprogress() { + stream.sendAck('Received', Guacamole.Status.Code.SUCCESS); + }; + + // Reset contents of directory + reader.onend = function jsonReady() { + // TODO: $rootScope.$evalAsync(function updateFileContents() { + + // Empty contents + file.files = {}; + + // Determine the expected filename prefix of each stream + let expectedPrefix = file.streamName; + if (expectedPrefix.charAt(expectedPrefix.length - 1) !== '/') + expectedPrefix += '/'; + + // For each received stream name + const mimetypes = reader.getJSON(); + for (let name in mimetypes) { + + // Assert prefix is correct + if (name.substring(0, expectedPrefix.length) !== expectedPrefix) + continue; + + // Extract filename from stream name + const filename = name.substring(expectedPrefix.length); + + // Deduce type from mimetype + let type = ManagedFilesystem.File.Type.NORMAL; + // @ts-ignore + if (mimetypes[name] === Guacamole.Object.STREAM_INDEX_MIMETYPE) + type = ManagedFilesystem.File.Type.DIRECTORY; + + // Add file entry + file.files[filename] = new ManagedFilesystem.File({ + mimetype: mimetypes[name], + streamName: name, + type: type, + parent: file, + name: filename + }); + + } + + // TODO: }); + }; + + }); + + } + + /** + * Creates a new ManagedFilesystem instance from the given Guacamole.Object + * and human-readable name. Upon creation, a request to populate the + * contents of the root directory will be automatically dispatched. + * + * @param client + * The client that originally received the "filesystem" instruction + * that resulted in the creation of this ManagedFilesystem. + * + * @param object + * The Guacamole.Object defining the filesystem. + * + * @param name + * A human-readable name for the filesystem. + * + * @returns + * The newly-created ManagedFilesystem. + */ + getInstance(client: ManagedClient, object: Guacamole.Object, name: string): ManagedFilesystem { + + // Init new filesystem object + const managedFilesystem = new ManagedFilesystem({ + client: client, + object: object, + name: name, + root: new ManagedFilesystem.File({ + // @ts-ignore + mimetype: Guacamole.Object.STREAM_INDEX_MIMETYPE, + // @ts-ignore + streamName: Guacamole.Object.ROOT_STREAM, + type: ManagedFilesystem.File.Type.DIRECTORY + }) + }); + + // Retrieve contents of root + this.refresh(managedFilesystem, managedFilesystem.root); + + return managedFilesystem; + + } + + /** + * Downloads the given file from the server using the given Guacamole + * client and filesystem. The browser will automatically start the + * download upon completion of this function. + * + * @param managedFilesystem + * The ManagedFilesystem from which the file is to be downloaded. Any + * path information provided must be relative to this filesystem. + * + * @param path + * The full, absolute path of the file to download. + */ + downloadFile(managedFilesystem: ManagedFilesystem, path: string): void { + + // Request download + managedFilesystem.object.requestInputStream(path, (stream: Guacamole.InputStream, mimetype: string) => { + + // Parse filename from string + const filename = path.match(/(.*[\\/])?(.*)/)![2]; + + // Start download + this.tunnelService.downloadStream(managedFilesystem.client.tunnel.uuid, stream, mimetype, filename); + + }); + + } + + /** + * Changes the current directory of the given filesystem, automatically + * refreshing the contents of that directory. + * + * @param filesystem + * The filesystem whose current directory should be changed. + * + * @param file + * The directory to change to. + */ + changeDirectory(filesystem: ManagedFilesystem, file: ManagedFilesystem.File): void { + + // Refresh contents + this.refresh(filesystem, file); + + // Set current directory + filesystem.currentDirectory = file; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/client.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/client.css new file mode 100644 index 0000000000..8d0c801f39 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/client.css @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +body.client { + background: black; + padding: 0; + margin: 0; + overflow: hidden; +} + +#preload { + visibility: hidden; + position: absolute; + left: 0; + right: 0; + width: 0; + height: 0; + overflow: hidden; +} + +.client-view { + + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + font-size: 0px; + +} + +.client-view-content { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: column; + -ms-flex-pack: end; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: vertical; + -moz-box-pack: end; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: vertical; + -webkit-box-pack: end; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: column; + -webkit-flex-pack: end; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: column; + flex-pack: end; + + width: 100%; + height: 100%; + + font-size: 12pt; + +} + +.client-view .client-body { + -ms-flex: 1 1 auto; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + flex: 1 1 auto; + position: relative; +} + +.client-view .client-bottom { + -ms-flex: 0 0 auto; + -moz-box-flex: 0; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; +} + +.client-view .client-body guac-tiled-clients { + + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + + width: auto; + height: auto; + +} + +.client .menu .header h2 { + text-transform: none; +} + +.client .user-menu .menu-contents li a.disconnect { + background-repeat: no-repeat; + background-size: 1em; + background-position: 0.75em center; + padding-left: 2.5em; + background-image: url('^images/x.svg'); +} + +.client .drop-pending .display { + background: #3161a9; +} + +.client .drop-pending .display > *{ + opacity: 0.5; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-select-menu.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-select-menu.css new file mode 100644 index 0000000000..69aefada41 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-select-menu.css @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#guac-menu .header h2.connection-select-menu { + overflow: visible; +} + +.connection-select-menu { + padding: 0; + min-width: 0; +} + +.connection-select-menu .menu-dropdown { + border: none; +} + +.connection-select-menu .menu-dropdown .menu-contents { + font-weight: normal; + font-size: 0.8em; + right: auto; + left: 0; + max-width: 100vw; + width: 400px; +} + +.connection-select-menu .menu-dropdown .menu-contents .filter input { + border-bottom: 1px solid rgba(0,0,0,0.125); + border-left: none; +} + +.connection-select-menu .menu-dropdown .menu-contents .filter { + margin-bottom: 0.5em; + padding: 0; +} + +.connection-select-menu .menu-dropdown .menu-contents .group-list .caption { + display: inline-block; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; +} + +.connection-select-menu .menu-dropdown .menu-contents .caption .connection, +.connection-select-menu .menu-dropdown .menu-contents .caption .connection-group { + display: inline-block; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-warning.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-warning.css new file mode 100644 index 0000000000..3c60a534eb --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/connection-warning.css @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#connection-warning { + + position: absolute; + right: 0.25em; + bottom: 0.25em; + z-index: 20; + + width: 3in; + max-width: 100%; + min-height: 1em; + + border-left: 2em solid #FA0; + box-shadow: 1px 1px 2px rgba(0,0,0,0.25); + background: #FFE; + padding: 0.5em 0.75em; + font-size: .8em; + +} + +#connection-warning::before { + + content: ' '; + display: block; + position: absolute; + left: -2em; + top: 0; + + width: 1.25em; + height: 100%; + margin: 0 0.375em; + + background: url('^images/warning.svg'); + background-size: contain; + background-position: center; + background-repeat: no-repeat; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/display.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/display.css new file mode 100644 index 0000000000..3b4a02da10 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/display.css @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.software-cursor { + cursor: url('^images/mouse/blank.gif'),url('^images/mouse/blank.cur'),default; + overflow: hidden; + cursor: none; +} + +.guac-error .software-cursor { + cursor: default; +} + +div.main { + overflow: auto; + width: 100%; + height: 100%; + position: relative; + font-size: 0px; +} + +div.displayOuter { + height: 100%; + width: 100%; + position: absolute; + left: 0; + top: 0; + display: table; +} + +div.displayMiddle { + width: 100%; + height: 100%; + display: table-cell; + vertical-align: middle; + text-align: center; +} + +div.display { + display: inline-block; +} + +div.display * { + position: relative; +} + +div.display > * { + margin-left: auto; + margin-right: auto; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-browser.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-browser.css new file mode 100644 index 0000000000..783ff9cc4c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-browser.css @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* Hide directory contents by default */ + +.file-browser .directory > .children { + padding-left: 1em; + display: none; +} + +.file-browser .list-item .caption { + white-space: nowrap; + border: 1px solid transparent; +} + +.file-browser .list-item.focused .caption { + border: 1px dotted rgba(0, 0, 0, 0.5); + background: rgba(204, 221, 170, 0.5); +} + +/* Directory / file icons */ + +.file-browser .normal-file > .caption .icon { + background-image: url('^images/file.svg'); +} + +.file-browser .directory > .caption .icon { + background-image: url('^images/folder-closed.svg'); +} + +.file-browser .directory.previous > .caption .icon { + background-image: url('^images/folder-up.svg'); +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-transfer-dialog.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-transfer-dialog.css new file mode 100644 index 0000000000..66d39a0aaa --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/file-transfer-dialog.css @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#file-transfer-dialog { + + position: absolute; + right: 0; + bottom: 0; + z-index: 20; + + font-size: 0.8em; + + width: 4in; + max-width: 100%; + max-height: 3in; + +} + +#file-transfer-dialog .transfer-manager { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: column; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: vertical; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: vertical; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: column; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: column; + + max-width: inherit; + max-height: inherit; + + border: 1px solid rgba(0, 0, 0, 0.5); + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.25); + +} + +#file-transfer-dialog .transfer-manager .header { + -ms-flex: 0 0 auto; + -moz-box-flex: 0; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; +} + +#file-transfer-dialog .transfer-manager .transfer-manager-body { + + -ms-flex: 1 1 auto; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + flex: 1 1 auto; + + overflow: auto; + +} + +/* + * Shrink maximum height if viewport is too small for default 3in dialog. + */ +@media all and (max-height: 3in) { + + #file-transfer-dialog { + max-height: 1.5in; + } + +} + +/* + * If viewport is too small for even the 1.5in dialog, fit all available space. + */ +@media all and (max-height: 1.5in) { + + #file-transfer-dialog { + height: 100%; + } + + #file-transfer-dialog .transfer-manager { + position: absolute; + left: 0.5em; + top: 0.5em; + right: 0.5em; + bottom: 0.5em; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/filesystem-menu.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/filesystem-menu.css new file mode 100644 index 0000000000..6a9c28ea9e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/filesystem-menu.css @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#filesystem-menu .header h2 { + font-size: 1em; + font-weight: normal; + padding-top: 0; + padding-bottom: 0; +} + +#filesystem-menu .header { + -ms-flex-align: center; + -moz-box-align: center; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +#filesystem-menu .menu-body { + padding: 0.25em; +} + +#filesystem-menu .header.breadcrumbs { + display: block; + background: rgba(0,0,0,0.0125); + border-bottom: 1px solid rgba(0,0,0,0.05); + box-shadow: none; + margin-top: 0; + border-top: none; +} + +#filesystem-menu .header.breadcrumbs .breadcrumb { + display: inline-block; + padding: 0.5em; + font-size: 0.8em; + font-weight: bold; +} + +#filesystem-menu .header.breadcrumbs .breadcrumb:hover { + background-color: #CDA; + cursor: pointer; +} + +#filesystem-menu .header.breadcrumbs .breadcrumb.root { + background-size: 1.5em 1.5em; + -moz-background-size: 1.5em 1.5em; + -webkit-background-size: 1.5em 1.5em; + -khtml-background-size: 1.5em 1.5em; + background-repeat: no-repeat; + background-position: center center; + background-image: url('^images/drive.svg'); + width: 2em; + height: 2em; + padding: 0; + vertical-align: middle; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/guac-menu.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/guac-menu.css new file mode 100644 index 0000000000..651801e15f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/guac-menu.css @@ -0,0 +1,170 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#guac-menu .content { + + padding: 0; + margin: 0; + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: column; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: vertical; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: vertical; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: column; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: column; + +} + +#guac-menu .content > * { + + margin: 0; + + -ms-flex: 0 0 auto; + -moz-box-flex: 0; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; + +} + +#guac-menu .content > * + * { + margin-top: 1em; +} + +#guac-menu .header h2 { + white-space: nowrap; + overflow: hidden; + width: 100%; + text-overflow: ellipsis; +} + +#guac-menu #mouse-settings .choice { + text-align: center; +} + +#guac-menu #mouse-settings .choice .figure { + display: inline-block; + vertical-align: middle; + width: 75%; + max-width: 320px; +} + +#guac-menu #keyboard-settings .caption { + font-size: 0.9em; + margin-left: 2em; + margin-right: 2em; +} + +#guac-menu #mouse-settings .figure .caption { + text-align: center; + font-size: 0.9em; +} + +#guac-menu #mouse-settings .figure img { + display: block; + width: 100%; + max-width: 320px; + margin: 1em auto; +} + +#guac-menu #keyboard-settings .figure { + float: right; + max-width: 30%; + margin: 1em; +} + +#guac-menu #keyboard-settings .figure img { + width: 100%; +} + +#guac-menu #zoom-settings { + text-align: center; +} + +#guac-menu #devices .device { + + padding: 1em; + border: 1px solid rgba(0, 0, 0, 0.125); + background: rgba(0, 0, 0, 0.04); + + padding-left: 3.5em; + background-size: 1.5em 1.5em; + -moz-background-size: 1.5em 1.5em; + -webkit-background-size: 1.5em 1.5em; + -khtml-background-size: 1.5em 1.5em; + + background-repeat: no-repeat; + background-position: 1em center; + +} + +#guac-menu #devices .device:hover { + cursor: pointer; + border-color: black; +} + +#guac-menu #devices .device.filesystem { + background-image: url('^images/drive.svg'); +} + +#guac-menu #share-links { + + padding: 1em; + border: 1px solid rgba(0, 0, 0, 0.125); + background: rgba(0, 0, 0, 0.04); + + font-size: 0.8em; + +} + +#guac-menu #share-links h3 { + padding-bottom: 0; +} + +#guac-menu #share-links th { + white-space: nowrap; +} + +#guac-menu #share-links a[href] { + + display: block; + padding: 0 1em; + + font-family: monospace; + font-weight: bold; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/keyboard.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/keyboard.css new file mode 100644 index 0000000000..5bf38889a7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/keyboard.css @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.keyboard-container { + + text-align: center; + + width: 100%; + margin: 0; + padding: 0; + + border-top: 1px solid black; + background: #222; + opacity: 0.85; + + z-index: 1; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/menu.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/menu.css new file mode 100644 index 0000000000..0417598ad1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/menu.css @@ -0,0 +1,146 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.menu { + overflow: hidden; + position: absolute; + top: 0; + height: 100%; + max-width: 100%; + width: 480px; + background: #EEE; + box-shadow: inset -1px 0 2px white, 1px 0 2px black; + z-index: 100; + -webkit-transition: left 0.125s, opacity 0.125s; + -moz-transition: left 0.125s, opacity 0.125s; + -ms-transition: left 0.125s, opacity 0.125s; + -o-transition: left 0.125s, opacity 0.125s; + transition: left 0.125s, opacity 0.125s; +} + +.menu-content { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: column; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: vertical; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: vertical; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: column; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: column; + + width: 100%; + height: 100%; + +} + +.menu-content .header { + + -ms-flex: 0 0 auto; + -moz-box-flex: 0; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; + + margin-bottom: 0; + +} + +.menu-body { + + -ms-flex: 1 1 auto; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + flex: 1 1 auto; + + padding: 1em; + overflow: auto; + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: column; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: vertical; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: vertical; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: column; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: column; + +} + +.menu-body > * { + -ms-flex: 0 0 auto; + -moz-box-flex: 0; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; +} + +.menu-section h3 { + margin: 0; + padding: 0; + padding-bottom: 1em; +} + +.menu-section ~ .menu-section h3 { + padding-top: 1em; +} + +.menu, +.menu.closed { + left: -480px; + opacity: 0; +} + +.menu.open { + left: 0px; + opacity: 1; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/notification.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/notification.css new file mode 100644 index 0000000000..9e0a1c332e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/notification.css @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.client-status-modal { + + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + + display: none; + background: rgba(0, 0, 0, 0.5); + +} + +.client-status-modal.shown { + display: block; +} + +.client-status-modal guac-modal { + position: absolute; +} + +.client-status-modal .notification { + background: rgba(40, 40, 40, 0.75); + color: white; + width: 100%; + max-width: 100%; + padding: 1em; + text-align: center; + border: none; +} + +.client-status-modal .notification.error { + background: rgba(112, 9, 8, 0.75) +} + +.client-status-modal .notification .title-bar { + display: none +} + +.client-status-modal .notification .button { + background: transparent; + border: 2px solid white; + box-shadow: none; + text-shadow: none; + font-weight: normal; +} + +.client-status-modal .notification .button:hover { + text-decoration: underline; + background: rgba(255, 255, 255, 0.25); +} + +.client-status-modal .notification .button:active { + background: rgba(255, 255, 255, 0.5); +} + +.client-status-modal .notification .parameters { + width: 100%; + max-width: 5in; + margin: 0 auto; +} + +.client-status-modal .notification .parameters h3, +.client-status-modal .notification .parameters .password-field .toggle-password { + display: none; +} + +.client-status-modal .notification .parameters input[type=email], +.client-status-modal .notification .parameters input[type=number], +.client-status-modal .notification .parameters input[type=password], +.client-status-modal .notification .parameters input[type=text], +.client-status-modal .notification .parameters textarea { + background: transparent; + border: 2px solid white; + color: white; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/share-menu.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/share-menu.css new file mode 100644 index 0000000000..7110262408 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/share-menu.css @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.share-menu { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: row; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: horizontal; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: horizontal; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: row; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: row; + +} + +.share-menu .menu-dropdown .menu-title { + + padding-left: 2em; + + background-repeat: no-repeat; + background-size: 1em; + background-position: 0.5em center; + background-image: url('^images/share.svg'); + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/thumbnail-display.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/thumbnail-display.css new file mode 100644 index 0000000000..84ec356a8e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/thumbnail-display.css @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +div.thumbnail-main { + overflow: hidden; + width: 100%; + height: 100%; + position: relative; + font-size: 0px; +} + +.thumbnail-main .display { + pointer-events: none; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/tiled-client-grid.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/tiled-client-grid.css new file mode 100644 index 0000000000..3ae9016f25 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/tiled-client-grid.css @@ -0,0 +1,277 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Overall tiled grid layout. + */ + +.tiled-client-grid { + width: 100%; + height: 100%; +} + +.tiled-client-grid, +.tiled-client-grid .tiled-client-row, +.tiled-client-grid .tiled-client-cell, +.tiled-client-grid .client-tile { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.tiled-client-grid { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +.tiled-client-grid .tiled-client-row { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} + +/* + * Rendering of individual clients within tiles. + */ + +.tiled-client-grid .client-tile { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + line-height: 1.5; +} + +.tiled-client-grid .client-tile .client-tile-header { + + display: -webkit-box; + + display: -webkit-flex; + + display: -ms-flexbox; + + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + + margin: 0; + background: #444; + padding: 0 0.25em; + font-size: 0.8em; + color: white; + z-index: 30; + min-height: 1.5em; + +} + +.tiled-client-grid .client-tile.focused .client-tile-header { + background-color: #3161a9; +} + +.tiled-client-grid .client-tile .client-tile-header > * { + -webkit-box-flex: 0; + -webkit-flex: 0; + -ms-flex: 0; + flex: 0; +} + +.tiled-client-grid .client-tile .client-tile-header .client-tile-name { + + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + + padding: 0 0.5em; + margin-bottom: -0.125em; + +} + +.tiled-client-grid .client-tile .main { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.tiled-client-grid .client-tile-disconnect, +.tiled-client-grid .client-tile-shared-indicator { + max-height: 1em; + height: 100%; +} + +.tiled-client-grid .client-tile-shared-indicator { + display: none; +} + +.tiled-client-grid .shared .client-tile-shared-indicator { + display: inline; +} + +.tiled-client-grid .client-user-count { + + visibility: hidden; + + display: block; + position: absolute; + right: 0; + top: 0; + z-index: 1; + + border-radius: 0.25em; + padding: 0.125em 0.75em; + margin: 0.5em; + + background: #055; + color: white; + font-weight: bold; + font-size: 0.8em; + +} + +.tiled-client-grid .client-user-count::before { + + content: ' '; + display: inline-block; + + margin-bottom: -0.2em; + padding-right: 0.25em; + width: 1em; + height: 1em; + + background: center / contain no-repeat url('^images/user-icons/guac-user-white.svg'); + background-size: contain; + background-position: center; + background-repeat: no-repeat; + +} + +.tiled-client-grid .client-user-count .client-user-count-users, +.tiled-client-grid .client-user-count .client-user-count-messages { + + position: absolute; + right: 0; + + margin: 0; + padding: 0; + margin-top: 0.5em; + list-style: none; + +} + +.tiled-client-grid .client-user-count .client-user-count-users, +.tiled-client-grid .client-user-count .client-user-count-message { + border-radius: 0.25em; + background: black; + color: white; + padding: 0.5em; +} + +.tiled-client-grid .client-user-count .client-user-count-message { + white-space: nowrap; + animation: 1s linear 3s fadeout; +} + +.tiled-client-grid .client-tile-header .client-user-count { + display: inline-block; + position: relative; + white-space: nowrap; + background: black; + padding-left: 0.5em; + padding-right: 0.75em; +} + +.tiled-client-grid .client-tile-header .client-user-count::before { + padding-right: 0.75em; +} + +.tiled-client-grid .joined .client-user-count { + visibility: visible; +} + +.tiled-client-grid .client-user-count .client-user-count-users { + display: none; +} + +.tiled-client-grid .client-user-count:hover .client-user-count-users { + display: block; +} + +.tiled-client-grid .client-user-count .client-user-count-user::after { + content: ', '; + margin-right: 0.25em; +} + +.tiled-client-grid .client-user-count .client-user-count-user:last-child::after { + content: none; +} + +.tiled-client-grid .client-user-count .client-user-count-user { + display: inline-block; +} + +.tiled-client-grid .client-user-count .client-user-count-user.anonymous { + font-style: italic; + opacity: 0.5; +} + +.tiled-client-grid .client-user-count .client-user-count-users { + width: 256px; + max-width: 75vw; + white-space: normal; + border: 1px solid #333; +} + +.tiled-client-grid .client-user-count .client-user-count-users::before { + + content: ' '; + display: block; + + position: absolute; + right: 0.5em; + top: -0.5em; + + width: 1em; + height: 1em; + + background: black; + border: 1px solid #333; + border-right: none; + border-bottom: none; + transform: rotate(45deg); + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer-manager.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer-manager.css new file mode 100644 index 0000000000..9b47919c46 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer-manager.css @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.transfer-manager { + background: white; +} + +.transfer-manager .header h2 { + font-size: 1em; + padding-top: 0; + padding-bottom: 0; +} + +.transfer-manager .header { + margin: 0; + -ms-flex-align: center; + -moz-box-align: center; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +.transfer-manager h3 { + margin: 0.25em; + font-size: 1em; + margin-bottom: 0; + opacity: 0.5; + text-align: center; +} + +.transfer-manager .transfers { + display: table; + padding: 0.25em; + width: 100%; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer.css new file mode 100644 index 0000000000..879e58b573 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/transfer.css @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.transfer { + display: table-row; +} + +.transfer .transfer-status { + display: table-cell; + padding: 0.25em; + position: relative; +} + +.transfer .text { + display: table-cell; + text-align: right; + padding: 0.25em +} + +.transfer .filename { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + position: relative; + font-family: monospace; + font-weight: bold; + padding: 0.125em; +} + +@keyframes transfer-progress { + from {background-position: 0px 0px;} + to {background-position: 64px 0px;} +} + +@-webkit-keyframes transfer-progress { + from {background-position: 0px 0px;} + to {background-position: 64px 0px;} +} + +.transfer .progress { + + width: 100%; + padding: 0.25em; + + position: absolute; + top: 0; + left: 0; + bottom: 0; + opacity: 0.25; + +} + +.transfer.in-progress .progress { + + background-color: #EEE; + background-image: url('^images/progress.svg'); + + background-size: 16px 16px; + -moz-background-size: 16px 16px; + -webkit-background-size: 16px 16px; + -khtml-background-size: 16px 16px; + + animation-name: transfer-progress; + animation-duration: 2s; + animation-timing-function: linear; + animation-iteration-count: infinite; + + -webkit-animation-name: transfer-progress; + -webkit-animation-duration: 2s; + -webkit-animation-timing-function: linear; + -webkit-animation-iteration-count: infinite; + +} + +.transfer .progress .bar { + display: none; + background: #A3D655; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 0; +} + +.transfer.in-progress .progress .bar { + display: initial; +} + +.transfer.savable { + cursor: pointer; +} + +.transfer.savable .filename { + color: blue; + text-decoration: underline; +} + +.transfer.error { + background: #FDD; +} + +.transfer.error .text, +.transfer.error .progress .bar { + display: none; +} + +.transfer .error-text { + display: none; +} + +.transfer.error .error-text { + display: block; + margin: 0; + margin-top: 0.5em; + width: 100%; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/viewport.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/viewport.css new file mode 100644 index 0000000000..f1bf157c5c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/viewport.css @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.viewport { + position: absolute; + bottom: 0; + right: 0; + width: 100%; + height: 100%; + overflow: hidden; +} \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/zoom.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/zoom.css new file mode 100644 index 0000000000..03aa6826c2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/styles/zoom.css @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.client-zoom .client-zoom-out, +.client-zoom .client-zoom-in, +.client-zoom .client-zoom-state { + display: inline-block; + vertical-align: middle; +} + +.client-zoom .client-zoom-out, +.client-zoom .client-zoom-in { + max-width: 3em; + border: 1px solid rgba(0, 0, 0, 0.5); + background: rgba(0, 0, 0, 0.1); + border-radius: 2em; + margin: 0.5em; + cursor: pointer; +} + +.client-zoom .client-zoom-out img, +.client-zoom .client-zoom-in img { + width: 100%; + opacity: 0.5; +} + +.client-zoom .client-zoom-out:hover, +.client-zoom .client-zoom-in:hover { + border: 1px solid rgba(0, 0, 0, 1); + background: #CDA; +} + +.client-zoom .client-zoom-out:hover img, +.client-zoom .client-zoom-in:hover img { + opacity: 1; +} + +.client-zoom .client-zoom-state { + font-size: 1.5em; +} + +.client-zoom .client-zoom-autofit { + text-align: left; + margin-top: 1em; +} + +.client-zoom .client-zoom-state input { + width: 2em; + font-size: 1em; + padding: 0; + background: transparent; + border-color: rgba(0, 0, 0, 0.125); +} + +.client-zoom .client-zoom-state input::-webkit-inner-spin-button, +.client-zoom .client-zoom-state input::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientMenu.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientMenu.ts new file mode 100644 index 0000000000..2639cf8fdf --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientMenu.ts @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ScrollState } from 'guacamole-frontend-lib'; +import { WritableSignal } from '@angular/core'; + +/** + * Properties of the client menu. + */ +export interface ClientMenu { + + /** + * Whether the menu is currently shown. + */ + shown: WritableSignal; + + /** + * The currently selected input method. This may be any of the values + * defined within preferenceService.inputMethods. + */ + inputMethod: WritableSignal; + + /** + * Whether translation of touch to mouse events should emulate an + * absolute pointer device, or a relative pointer device. + */ + emulateAbsoluteMouse: WritableSignal; + + /** + * The current scroll state of the menu. + */ + scrollState: WritableSignal; + + /** + * The current desired values of all editable connection parameters as + * a set of name/value pairs, including any changes made by the user. + */ + connectionParameters: Record; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientProperties.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientProperties.ts new file mode 100644 index 0000000000..2c3f67d71c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ClientProperties.ts @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * A service for generating new guacClient properties objects. + * Object used for interacting with a guacClient directive. + */ +export class ClientProperties { + /** + * Whether the display should be scaled automatically to fit within the + * available space. + * + * @default true + */ + autoFit: boolean; + + /** + * The current scale. If autoFit is true, the effect of setting this + * value is undefined. + * + * @default 1 + */ + scale: number; + + /** + * The minimum scale value. + * + * @default 1 + */ + minScale: number; + + /** + * The maximum scale value. + * + * @default 3 + */ + maxScale: number; + + /** + * Whether this client should receive keyboard events. + * + * @default false + */ + focused: boolean; + + /** + * The relative Y coordinate of the scroll offset of the display within + * the client element. + * + * @default 0 + */ + scrollTop: number; + + /** + * The relative X coordinate of the scroll offset of the display within + * the client element. + * + * @default 0 + */ + scrollLeft: number; + + /** + * @param template + * The object whose properties should be copied within the new + * ClientProperties. + */ + constructor(template: Partial = {}) { + this.autoFit = template.autoFit || true; + this.scale = template.scale || 1; + this.minScale = template.minScale || 1; + this.maxScale = template.maxScale || 3; + this.focused = template.focused || false; + this.scrollTop = template.scrollTop || 0; + this.scrollLeft = template.scrollLeft || 0; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ConnectionListContext.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ConnectionListContext.ts new file mode 100644 index 0000000000..cd0e9945e8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ConnectionListContext.ts @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Arbitrary context that should be exposed to the guacGroupList directive + * displaying the dropdown list of available connections within the + * Guacamole menu. + */ +export interface ConnectionListContext { + + /** + * The set of clients desired within the current view. For each client + * that should be present within the current view, that client's ID + * will map to "true" here. + */ + attachedClients: Record; + + /** + * Notifies that the client with the given ID has been added or + * removed from the set of clients desired within the current view, + * and the current view should be updated accordingly. + * + * @param id + * The ID of the client that was added or removed from the current + * view. + */ + updateAttachedClients(id: string): void; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedArgument.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedArgument.ts new file mode 100644 index 0000000000..81eb99e902 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedArgument.ts @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ManagedClient } from './ManagedClient'; + +/** + * Provides the ManagedArgument class used by ManagedClient. + * Represents an argument (connection parameter) which may be + * changed by the user while the connection is open. + */ +export class ManagedArgument { + + /** + * The name of the connection parameter. + */ + name: string; + + /** + * The current value of the connection parameter. + */ + value: string; + + /** + * A valid, open output stream which may be used to apply a new value + * to the connection parameter. + */ + stream: Guacamole.OutputStream; + + /** + * Create a new ManagedArgument. + * + * @param template + * The object whose properties should be copied within the new + * ManagedArgument. + */ + constructor(template: ManagedArgument) { + this.name = template.name; + this.value = template.value; + this.stream = template.stream; + } + + /** + * Requests editable access to a given connection parameter, returning a + * promise which is resolved with a ManagedArgument instance that provides + * such access if the parameter is indeed editable. + * + * @param managedClient + * The ManagedClient instance associated with the connection for which + * an editable version of the connection parameter is being retrieved. + * + * @param name + * The name of the connection parameter. + * + * @param value + * The current value of the connection parameter, as received from a + * prior, inbound "argv" stream. + * + * @returns + * A promise which is resolved with the new ManagedArgument instance + * once the requested parameter has been verified as editable. + */ + static getInstance(managedClient: ManagedClient, name: string, value: string): Promise { + + return new Promise((resolve, reject) => { + + + // Create internal, fully-populated instance of ManagedArgument, to be + // returned only once mutability of the associated connection parameter + // has been verified + const managedArgument = new ManagedArgument({ + name: name, + value: value, + stream: managedClient.client.createArgumentValueStream('text/plain', name) + }); + + // The connection parameter is editable only if a successful "ack" is + // received + managedArgument.stream.onack = (status: Guacamole.Status) => { + if (status.isError()) + reject(status); + else + resolve(managedArgument); + }; + + }); + + } + + /** + * Sets the given editable argument (connection parameter) to the given + * value, updating the behavior of the associated connection in real-time. + * If successful, the ManagedArgument provided cannot be used for future + * calls to setValue() and must be replaced with a new instance. This + * function only has an effect if the new parameter value is different from + * the current value. + * + * @param managedArgument + * The ManagedArgument instance associated with the connection + * parameter being modified. + * + * @param value + * The new value to assign to the connection parameter. + * + * @returns + * true if the connection parameter was sent and the provided + * ManagedArgument instance may no longer be used for future setValue() + * calls, false if the connection parameter was NOT sent as it has not + * changed. + */ + static setValue(managedArgument: ManagedArgument, value: string): boolean { + + // Stream new value only if value has changed + if (value !== managedArgument.value) { + + const writer = new Guacamole.StringWriter(managedArgument.stream); + writer.sendText(value); + writer.sendEnd(); + + // ManagedArgument instance is no longer usable + return true; + + } + + // No parameter value change was attempted and the ManagedArgument + // instance may be reused + return false; + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClient.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClient.ts new file mode 100644 index 0000000000..3e193e0717 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClient.ts @@ -0,0 +1,224 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Form } from '../../rest/types/Form'; +import { ClientProperties } from './ClientProperties'; +import { ManagedClientState } from './ManagedClientState'; +import { ManagedClientThumbnail } from './ManagedClientThumbnail'; +import { ManagedDisplay } from './ManagedDisplay'; +import { ManagedFileUpload } from './ManagedFileUpload'; +import { ManagedShareLink } from './ManagedShareLink'; +import { ManagedArgument } from './ManagedArgument'; +import { ManagedFilesystem } from './ManagedFilesystem'; +import { Optional } from '../../util/utility-types'; + +/** + * Type definition for the template parameter accepted by the ManagedClient constructor. + * Properties that have a default value are optional. + */ +export type ManagedClientTemplate = Optional; + +/** + * Object which serves as a surrogate interface, encapsulating a Guacamole + * client while it is active, allowing it to be maintained in the + * background. One or more ManagedClients are grouped within + * ManagedClientGroups before being attached to the client view. + */ +export class ManagedClient { + + /** + * The ID of the connection associated with this client. + */ + id: string; + + /** + * The actual underlying Guacamole client. + */ + client: Guacamole.Client; + + /** + * The tunnel being used by the underlying Guacamole client. + */ + tunnel: Guacamole.Tunnel; + + /** + * The display associated with the underlying Guacamole client. + */ + managedDisplay?: ManagedDisplay; + + /** + * The name returned associated with the connection or connection + * group in use. + */ + name?: string; + + /** + * The title which should be displayed as the page title for this + * client. + */ + title?: string; + + /** + * The name which uniquely identifies the protocol of the connection in + * use. If the protocol cannot be determined, such as when a connection + * group is in use, this will be null. + */ + protocol: string | null; + + /** + * An array of forms describing all known parameters for the connection + * in use, including those which may not be editable. + */ + forms: Form[]; + + /** + * The most recently-generated thumbnail for this connection, as + * stored within the local connection history. If no thumbnail is + * stored, this will be null. + */ + thumbnail: ManagedClientThumbnail | null; + + /** + * The current state of all parameters requested by the server via + * "required" instructions, where each object key is the name of a + * requested parameter and each value is the current value entered by + * the user or null if no parameters are currently being requested. + */ + requiredParameters: Record | null; + + /** + * All uploaded files. As files are uploaded, their progress can be + * observed through the elements of this array. It is intended that + * this array be manipulated externally as needed. + */ + uploads: ManagedFileUpload[]; + + /** + * All currently-exposed filesystems. When the Guacamole server exposes + * a filesystem object, that object will be made available as a + * ManagedFilesystem within this array. + */ + filesystems: ManagedFilesystem[]; + + /** + * The current number of users sharing this connection, excluding the + * user that originally started the connection. Duplicate connections + * from the same user are included in this total. + */ + userCount: number; + + /** + * All users currently sharing this connection, excluding the user that + * originally started the connection. If the connection is not shared, + * this object will be empty. This map consists of key/value pairs + * where each key is the user's username and each value is an object + * tracking the unique connections currently used by that user (a map + * of Guacamole protocol user IDs to boolean values). + */ + users: Record>; + + /** + * All available share links generated for the this ManagedClient via + * ManagedClient.createShareLink(). Each resulting share link is stored + * under the identifier of its corresponding SharingProfile. + */ + shareLinks: Record; + + /** + * The number of simultaneous touch contacts supported by the remote + * desktop. Unless explicitly declared otherwise by the remote desktop + * after connecting, this will be 0 (multi-touch unsupported). + */ + multiTouchSupport: number; + + /** + * The current state of the Guacamole client (idle, connecting, + * connected, terminated with error, etc.). + */ + clientState: ManagedClientState; + + /** + * Properties associated with the display and behavior of the Guacamole + * client. + */ + clientProperties: ClientProperties; + + /** + * All editable arguments (connection parameters), stored by their + * names. Arguments will only be present within this set if their + * current values have been exposed by the server via an inbound "argv" + * stream and the server has confirmed that the value may be changed + * through a successful "ack" to an outbound "argv" stream. + */ + arguments: Record; + + /** + * The mimetype of audio data to be sent along the Guacamole connection if + * audio input is supported. + */ + static readonly AUDIO_INPUT_MIMETYPE: string = 'audio/L16;rate=44100,channels=2'; + + /** + * Create a new ManagedClient. + * + * @param template + * The object whose properties should be copied within the new + * ManagedClient. + */ + constructor(template: ManagedClientTemplate) { + this.id = template.id; + this.client = template.client; + this.tunnel = template.tunnel; + this.managedDisplay = template.managedDisplay; + this.name = template.name; + this.title = template.title; + this.protocol = template.protocol || null; + this.forms = template.forms || []; + this.thumbnail = template.thumbnail = null; + this.requiredParameters = null; + this.uploads = template.uploads || []; + this.filesystems = template.filesystems || []; + this.userCount = template.userCount || 0; + this.users = template.users || {}; + this.shareLinks = template.shareLinks || {}; + this.multiTouchSupport = template.multiTouchSupport || 0; + this.clientState = template.clientState || new ManagedClientState(); + this.clientProperties = template.clientProperties || new ClientProperties(); + this.arguments = template.arguments || {}; + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientGroup.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientGroup.ts new file mode 100644 index 0000000000..f48a6d67ea --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientGroup.ts @@ -0,0 +1,367 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ManagedClient } from './ManagedClient'; +import filter from 'lodash/filter'; +import findIndex from 'lodash/findIndex'; +import isArray from 'lodash/isArray'; +import isString from 'lodash/isString'; +import map from 'lodash/map'; + +export namespace ManagedClientGroup { + + /** + * A callback that is invoked for a ManagedClient within a ManagedClientGroup. + * + * @param client + * The relevant ManagedClient. + * + * @param row + * The row number of the client within the tiled grid, where 0 is the + * first row. + * + * @param column + * The column number of the client within the tiled grid, where 0 is + * the first column. + * + * @param index + * The index of the client within the relevant + * {@link ManagedClientGroup#clients} array. + */ + export type ClientCallback = (client: ManagedClient, row: number, column: number, index: number) => void; + +} + +/** + * Serves as a grouping of ManagedClients. Each + * ManagedClientGroup may be attached, detached, and reattached dynamically + * from different client views, with its contents automatically displayed + * in a tiled arrangement if needed. + * + * Used by the guacClientManager service. + */ +export class ManagedClientGroup { + + /** + * The time that this group was last brought to the foreground of + * the current tab, as the number of milliseconds elapsed since + * midnight of January 1, 1970 UTC. If the group has not yet been + * viewed, this will be 0. + */ + lastUsed: number; + + /** + * Whether this ManagedClientGroup is currently attached to the client + * interface (true) or is running in the background (false). + * + * @default false + */ + attached: boolean; + + /** + * The clients that should be displayed within the client interface + * when this group is attached. + * + * @default [] + */ + clients: ManagedClient[]; + + /** + * The number of rows that should be used when arranging the clients + * within this group in a grid. By default, this value is automatically + * calculated from the number of clients. + */ + rows: number; + + /** + * The number of columns that should be used when arranging the clients + * within this group in a grid. By default, this value is automatically + * calculated from the number of clients. + */ + columns: number; + + /** + * Create a new ManagedClientGroup. + * + * @param template + * The object whose properties should be copied within the new + * ManagedClientGroup. + */ + constructor(template: Partial = {}) { + this.lastUsed = template.lastUsed || 0; + this.attached = template.attached || false; + this.clients = template.clients || []; + this.rows = template.rows || ManagedClientGroup.getRows(this); + this.columns = template.columns || ManagedClientGroup.getColumns(this); + } + + /** + * Updates the number of rows and columns stored within the given + * ManagedClientGroup such that the clients within the group are evenly + * distributed. This function should be called whenever the size of a + * group changes. + * + * @param group + * The ManagedClientGroup that should be updated. + */ + static recalculateTiles(group: ManagedClientGroup): void { + + const recalculated = new ManagedClientGroup({ + clients: group.clients + }); + + group.rows = recalculated.rows; + group.columns = recalculated.columns; + + } + + /** + * Returns the unique ID representing the given ManagedClientGroup or set + * of client IDs. The ID of a ManagedClientGroup consists simply of the + * IDs of all its ManagedClients, separated by periods. + * + * @param group + * The ManagedClientGroup or array of client IDs to determine the + * ManagedClientGroup ID of. + * + * @returns + * The unique ID representing the given ManagedClientGroup, or the + * unique ID that would represent a ManagedClientGroup containing the + * clients with the given IDs. + */ + static getIdentifier(group: ManagedClientGroup | string[]): string { + + if (!isArray(group)) + group = map(group.clients, client => client.id); + + return group.join('.'); + + } + + /** + * Returns an array of client identifiers for all clients contained within + * the given ManagedClientGroup. Order of the identifiers is preserved + * with respect to the order of the clients within the group. + * + * @param group + * The ManagedClientGroup to retrieve the client identifiers from, + * or its ID. + * + * @returns + * The client identifiers of all clients contained within the given + * ManagedClientGroup. + */ + static getClientIdentifiers(group: ManagedClientGroup | string): string[] { + + if (isString(group)) + return group.split(/\./); + + return group.clients.map(client => client.id); + + } + + /** + * Returns the number of columns that should be used to evenly arrange + * all provided clients in a tiled grid. + * + * @param group + * The ManagedClientGroup to calculate the number of columns for. + * + * @returns + * The number of columns that should be used for the grid of + * clients. + */ + static getColumns(group: ManagedClientGroup): number { + + if (!group.clients.length) + return 0; + + return Math.ceil(Math.sqrt(group.clients.length)); + + } + + /** + * Returns the number of rows that should be used to evenly arrange all + * provided clients in a tiled grid. + * + * @param group + * The ManagedClientGroup to calculate the number of rows for. + * + * @returns + * The number of rows that should be used for the grid of clients. + */ + static getRows(group: ManagedClientGroup): number { + + if (!group.clients.length) + return 0; + + return Math.ceil(group.clients.length / ManagedClientGroup.getColumns(group)); + + } + + /** + * Returns the title which should be displayed as the page title if the + * given client group is attached to the interface. + * + * @param group + * The ManagedClientGroup to determine the title of. + * + * @returns + * The title of the given ManagedClientGroup. + */ + static getTitle(group: ManagedClientGroup): string | undefined { + + // Use client-specific title if only one client + if (group.clients.length === 1) + return group.clients[0].title; + + // With multiple clients, somehow combining multiple page titles would + // be confusing. Instead, use the combined names. + return ManagedClientGroup.getName(group); + + } + + /** + * Returns the combined names of all clients within the given + * ManagedClientGroup, as determined by the names of the associated + * connections or connection groups. + * + * @param group + * The ManagedClientGroup to determine the name of. + * + * @returns + * The combined names of all clients within the given + * ManagedClientGroup. + */ + static getName(group: ManagedClientGroup): string { + + // Generate a name from ONLY the focused clients, unless there are no + // focused clients + let relevantClients = filter(group.clients, client => client.clientProperties.focused); + if (!relevantClients.length) + relevantClients = group.clients; + + return filter(relevantClients, (client => !!client.name)).map(client => client.name).join(', ') || '...'; + + } + + /** + * Loops through each of the clients associated with the given + * ManagedClientGroup, invoking the given callback for each client. + * + * @param group + * The ManagedClientGroup to loop through. + * + * @param callback + * The callback to invoke for each of the clients within the given + * ManagedClientGroup. + */ + static forEach(group: ManagedClientGroup, callback: ManagedClientGroup.ClientCallback): void { + let current = 0; + for (let row = 0; row < group.rows; row++) { + for (let column = 0; column < group.columns; column++) { + + callback(group.clients[current], row, column, current); + current++; + + if (current >= group.clients.length) + return; + + } + } + } + + /** + * Returns whether the given ManagedClientGroup contains more than one + * client. + * + * @param group + * The ManagedClientGroup to test. + * + * @returns + * true if two or more clients are currently present in the given + * group, false otherwise. + */ + static hasMultipleClients(group: ManagedClientGroup | null): boolean { + return !!group && group.clients.length > 1; + } + + /** + * Returns a two-dimensional array of all ManagedClients within the given + * group, arranged in the grid defined by {@link ManagedClientGroup#rows} + * and {@link ManagedClientGroup#columns}. If any grid cell lacks a + * corresponding client (because the number of clients does not divide + * evenly into a grid), that cell will be null. + * + * For the sake of AngularJS scope watches, the results of calling this + * function are cached and will always favor modifying an existing array + * over creating a new array, even for nested arrays. + * + * @param group + * The ManagedClientGroup defining the tiled grid arrangement of + * ManagedClients. + * + * @returns + * A two-dimensional array of all ManagedClients within the given + * group. + */ + static getClientGrid(group: ManagedClientGroup): ManagedClient[][] { + + let index = 0; + + // Operate on cached copy of grid + const clientGrid = (group as any)._grid || ((group as any)._grid = []); + + // Delete any rows in excess of the required size + clientGrid.splice(group.rows); + + for (let row = 0; row < group.rows; row++) { + + // Prefer to use existing column arrays, deleting any columns in + // excess of the required size + const currentRow = clientGrid[row] || (clientGrid[row] = []); + currentRow.splice(group.columns); + + for (let column = 0; column < group.columns; column++) { + currentRow[column] = group.clients[index++] || null; + } + + } + + return clientGrid; + + } + + /** + * Verifies that focus is assigned to at least one client in the given + * group. If no client has focus, focus is assigned to the first client in + * the group. + * + * @param group + * The group to verify. + */ + static verifyFocus(group: ManagedClientGroup | null): void { + + // Focus the first client if there are no clients focused + if (group && group.clients.length >= 1 && findIndex(group.clients, client => client.clientProperties.focused) === -1) { + group.clients[0].clientProperties.focused = true; + } + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts new file mode 100644 index 0000000000..10e7d672de --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts @@ -0,0 +1,174 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the ManagedClient class used by the guacClientManager service. + * Object which represents the state of a Guacamole client and its tunnel, + * including any error conditions. + */ +export class ManagedClientState { + + /** + * The current connection state. Valid values are described by + * ManagedClientState.ConnectionState. + * + * @default ManagedClientState.ConnectionState.IDLE + */ + connectionState: string; + + /** + * Whether the network connection used by the tunnel seems unstable. If + * the network connection is unstable, the remote desktop connection + * may perform poorly or disconnect. + * + * @default false + */ + tunnelUnstable: boolean; + + /** + * The status code of the current error condition, if connectionState + * is CLIENT_ERROR or TUNNEL_ERROR. For all other connectionState + * values, this will be @link{Guacamole.Status.Code.SUCCESS}. + * + * @default Guacamole.Status.Code.SUCCESS + */ + statusCode: number; + + /** + * @param template + * The object whose properties should be copied within the new + * ManagedClientState. + */ + constructor(template: Partial = {}) { + this.connectionState = template.connectionState || ManagedClientState.ConnectionState.IDLE; + this.tunnelUnstable = template.tunnelUnstable || false; + this.statusCode = template.statusCode || Guacamole.Status.Code.SUCCESS; + } + + /** + * Valid connection state strings. Each state string is associated with a + * specific state of a Guacamole connection. + */ + static ConnectionState = { + /** + * The Guacamole connection has not yet been attempted. + * + * @type String + */ + IDLE: "IDLE", + + /** + * The Guacamole connection is being established. + * + * @type String + */ + CONNECTING: "CONNECTING", + + /** + * The Guacamole connection has been successfully established, and the + * client is now waiting for receipt of initial graphical data. + * + * @type String + */ + WAITING: "WAITING", + + /** + * The Guacamole connection has been successfully established, and + * initial graphical data has been received. + * + * @type String + */ + CONNECTED: "CONNECTED", + + /** + * The Guacamole connection has terminated successfully. No errors are + * indicated. + * + * @type String + */ + DISCONNECTED: "DISCONNECTED", + + /** + * The Guacamole connection has terminated due to an error reported by + * the client. The associated error code is stored in statusCode. + * + * @type String + */ + CLIENT_ERROR: "CLIENT_ERROR", + + /** + * The Guacamole connection has terminated due to an error reported by + * the tunnel. The associated error code is stored in statusCode. + * + * @type String + */ + TUNNEL_ERROR: "TUNNEL_ERROR" + } + + /** + * Sets the current client state and, if given, the associated status code. + * If an error is already represented, this function has no effect. If the + * client state was previously marked as unstable, that flag is implicitly + * cleared. + * + * @param clientState + * The ManagedClientState to update. + * + * @param connectionState + * The connection state to assign to the given ManagedClientState, as + * listed within ManagedClientState.ConnectionState. + * + * @param [statusCode] + * The status code to assign to the given ManagedClientState, if any, + * as listed within Guacamole.Status.Code. If no status code is + * specified, the status code of the ManagedClientState is not touched. + */ + static setConnectionState(clientState: ManagedClientState, connectionState: string, statusCode?: number): void { + + // Do not set state after an error is registered + if (clientState.connectionState === ManagedClientState.ConnectionState.TUNNEL_ERROR + || clientState.connectionState === ManagedClientState.ConnectionState.CLIENT_ERROR) + return; + + // Update connection state + clientState.connectionState = connectionState; + clientState.tunnelUnstable = false; + + // Set status code, if given + if (statusCode) + clientState.statusCode = statusCode; + + } + + /** + * Updates the given client state, setting whether the underlying tunnel + * is currently unstable. An unstable tunnel is not necessarily + * disconnected, but appears to be misbehaving and may be disconnected. + * + * @param clientState + * The ManagedClientState to update. + * + * @param unstable + * Whether the underlying tunnel of the connection currently appears + * unstable. + */ + static setTunnelUnstable(clientState: ManagedClientState, unstable: boolean): void { + clientState.tunnelUnstable = unstable; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientThumbnail.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientThumbnail.ts new file mode 100644 index 0000000000..dbbe804b72 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientThumbnail.ts @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the ManagedClientThumbnail class used by ManagedClient. + * Object which represents a thumbnail of the Guacamole client display, + * along with the time that the thumbnail was generated. + */ +export class ManagedClientThumbnail { + + /** + * The time that this thumbnail was generated, as the number of + * milliseconds elapsed since midnight of January 1, 1970 UTC. + */ + timestamp: number; + + /** + * The thumbnail of the Guacamole client display. + */ + canvas: HTMLCanvasElement; + + /** + * Create a new ManagedClientThumbnail. + * + * @param template + * The object whose properties should be copied within the new + * ManagedClientThumbnail. + */ + constructor(template: ManagedClientThumbnail) { + this.timestamp = template.timestamp; + this.canvas = template.canvas; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedDisplay.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedDisplay.ts new file mode 100644 index 0000000000..a7fd73c134 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedDisplay.ts @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +declare namespace ManagedDisplay { + type Dimensions = typeof ManagedDisplay.Dimensions.prototype; + type Cursor = typeof ManagedDisplay.Cursor.prototype; +} + +/** + * Provides the ManagedDisplay class used by the guacClientManager service. + * Object which serves as a surrogate interface, encapsulating a Guacamole + * display while it is active, allowing it to be detached and reattached + * from different client views. + */ +export class ManagedDisplay { + /** + * The underlying Guacamole display. + */ + display?: Guacamole.Display; + + /** + * The current size of the Guacamole display. + */ + size?: ManagedDisplay.Dimensions; + + /** + * The current mouse cursor, if any. + */ + cursor?: ManagedDisplay.Cursor; + + /** + * @param {ManagedDisplay|Object} [template={}] + * The object whose properties should be copied within the new + * ManagedDisplay. + */ + constructor(template: Partial = {}) { + this.display = template.display; + this.size = new ManagedDisplay.Dimensions(template.size); + this.cursor = template.cursor; + } + + /** + * Object which represents the size of the Guacamole display. + * + * @constructor + * @param {ManagedDisplay.Dimensions|Object} template + * The object whose properties should be copied within the new + * ManagedDisplay.Dimensions. + */ + static Dimensions = class Dimensions { + + /** + * The current width of the Guacamole display, in pixels. + */ + width: number; + + /** + * The current width of the Guacamole display, in pixels. + */ + height: number; + + constructor(template: Partial = {}) { + this.width = template.width || 0; + this.height = template.height || 0; + } + } + + /** + * Object which represents a mouse cursor used by the Guacamole display. + * + * @constructor + * @param {ManagedDisplay.Cursor|Object} template + * The object whose properties should be copied within the new + * ManagedDisplay.Cursor. + */ + static Cursor = class Cursor { + + /** + * The actual mouse cursor image. + */ + canvas?: HTMLCanvasElement; + + /** + * The X coordinate of the cursor hotspot. + */ + x?: number; + + /** + * The Y coordinate of the cursor hotspot. + */ + y?: number; + + constructor(template: Partial = {}) { + this.canvas = template.canvas; + this.x = template.x; + this.y = template.y; + } + } + + /** + * Creates a new ManagedDisplay which represents the current state of the + * given Guacamole display. + * + * @param display + * The Guacamole display to represent. Changes to this display will + * affect this ManagedDisplay. + * + * @returns + * A new ManagedDisplay which represents the current state of the + * given Guacamole display. + */ + static getInstance(display: Guacamole.Display): ManagedDisplay { + + const managedDisplay = new ManagedDisplay({ + display: display + }); + + // Store changes to display size + display.onresize = function setClientSize() { + //TODO $rootScope.$apply(function updateClientSize() { + //updateClientSize + managedDisplay.size = new ManagedDisplay.Dimensions({ + width: display.getWidth(), + height: display.getHeight() + }); + // }); + }; + + // Store changes to display cursor + display.oncursor = function setClientCursor(canvas, x, y) { + //TODO: $rootScope.$apply(function updateClientCursor() { + //updateClientCursor + managedDisplay.cursor = new ManagedDisplay.Cursor({ + canvas: canvas, + x: x, + y: y + }); + // }); + }; + + return managedDisplay; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileTransferState.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileTransferState.ts new file mode 100644 index 0000000000..7b2a085324 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileTransferState.ts @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Represents the state of a Guacamole stream, including any + * error conditions. + * + * This class is used by the guacClientManager service. + */ +export class ManagedFileTransferState { + + /** + * The current stream state. Valid values are described by + * ManagedFileTransferState.StreamState. + * + * @default ManagedFileTransferState.StreamState.IDLE + */ + streamState: ManagedFileTransferState.StreamState; + + /** + * The status code of the current error condition, if streamState + * is ERROR. For all other streamState values, this will be + * {@link Guacamole.Status.Code.SUCCESS}. + * + * @default Guacamole.Status.Code.SUCCESS + */ + statusCode: number; + + /** + * Create a new ManagedFileTransferState object. + * + * @param {ManagedFileTransferState|Object} [template={}] + * The object whose properties should be copied within the new + * ManagedFileTransferState. + */ + constructor(template: Partial = {}) { + this.streamState = template.streamState || ManagedFileTransferState.StreamState.IDLE; + this.statusCode = template.statusCode || Guacamole.Status.Code.SUCCESS; + } + + /** + * Sets the current transfer state and, if given, the associated status + * code. If an error is already represented, this function has no effect. + * + * @param transferState + * The ManagedFileTransferState to update. + * + * @param streamState + * The stream state to assign to the given ManagedFileTransferState, as + * listed within ManagedFileTransferState.StreamState. + * + * @param statusCode + * The status code to assign to the given ManagedFileTransferState, if + * any, as listed within Guacamole.Status.Code. If no status code is + * specified, the status code of the ManagedFileTransferState is not + * touched. + */ + static setStreamState(transferState: ManagedFileTransferState, streamState: ManagedFileTransferState.StreamState, statusCode?: number): void { + + // Do not set state after an error is registered + if (transferState.streamState === ManagedFileTransferState.StreamState.ERROR) + return; + + // Update stream state + transferState.streamState = streamState; + + // Set status code, if given + if (statusCode) + transferState.statusCode = statusCode; + + } +} + +export namespace ManagedFileTransferState { + + /** + * Valid stream state strings. Each state string is associated with a + * specific state of a Guacamole stream. + */ + export enum StreamState { + + /** + * The stream has not yet been opened. + */ + IDLE = 'IDLE', + + /** + * The stream has been successfully established. Data can be sent or + * received. + */ + OPEN = 'OPEN', + + /** + * The stream has terminated successfully. No errors are indicated. + */ + CLOSED = 'CLOSED', + + /** + * The stream has terminated due to an error. The associated error code + * is stored in statusCode. + */ + ERROR = 'ERROR' + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileUpload.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileUpload.ts new file mode 100644 index 0000000000..97738d752e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFileUpload.ts @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ManagedFileTransferState } from './ManagedFileTransferState'; +import { Optional } from '../../util/utility-types'; + +/** + * Object which serves as a surrogate interface, encapsulating a Guacamole + * file upload while it is active, allowing it to be detached and + * reattached from different client views. + */ +export class ManagedFileUpload { + + /** + * The current state of the file transfer stream. + */ + transferState: ManagedFileTransferState; + + /** + * The mimetype of the file being transferred. + */ + mimetype?: string; + + /** + * The filename of the file being transferred. + */ + filename?: string; + + /** + * The number of bytes transferred so far. + */ + progress?: number; + + /** + * The total number of bytes in the file. + */ + length?: number; + + /** + * Create a new ManagedFileUpload object. + * + * @param template + * The object whose properties should be copied within the new + * ManagedFileUpload. + */ + constructor(template: Optional = {}) { + this.transferState = template.transferState || new ManagedFileTransferState(); + this.mimetype = template.mimetype; + this.filename = template.filename; + this.progress = template.progress; + this.length = template.length; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFilesystem.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFilesystem.ts new file mode 100644 index 0000000000..d21045c7b4 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedFilesystem.ts @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ManagedClient } from './ManagedClient'; +import { Optional } from '../../util/utility-types'; + +/** + * Provides the ManagedFilesystem class used by ManagedClient to represent + * available remote filesystems. + * + * Serves as a surrogate interface, encapsulating a Guacamole + * filesystem object while it is active, allowing it to be detached and + * reattached from different client views. + */ +export class ManagedFilesystem { + + /** + * The client that originally received the "filesystem" instruction + * that resulted in the creation of this ManagedFilesystem. + */ + client: ManagedClient; + + /** + * The Guacamole filesystem object, as received via a "filesystem" + * instruction. + */ + object: Guacamole.Object; + + /** + * The declared, human-readable name of the filesystem + */ + name: string; + + /** + * The root directory of the filesystem. + */ + root: ManagedFilesystem.File; + + /** + * The current directory being viewed or manipulated within the + * filesystem. + */ + currentDirectory: ManagedFilesystem.File; + + /** + * Creates a new ManagedFilesystem. + * + * @param template + * The object whose properties should be copied within the new + * ManagedFilesystem. + */ + constructor(template: Optional) { + this.client = template.client; + this.object = template.object; + this.name = template.name; + this.root = template.root; + this.currentDirectory = template.currentDirectory || template.root; + } + +} + +export namespace ManagedFilesystem { + + /** + * A file within a ManagedFilesystem. Each ManagedFilesystem.File provides + * sufficient information for retrieval or replacement of the file's + * contents, as well as the file's name and type. + */ + export class File { + + /** + * The mimetype of the data contained within this file. + */ + mimetype: string; + + /** + * The name of the stream representing this files contents within its + * associated filesystem object. + */ + streamName: string; + + /** + * The type of this file. All legal file type strings are defined + * within ManagedFilesystem.File.Type. + */ + type: string; + + /** + * The name of this file. + */ + name?: string; + + /** + * The parent directory of this file. In the case of the root + * directory, this will be null. + */ + parent?: ManagedFilesystem.File; + + /** + * Map of all known files contained within this file by name. This is + * only applicable to directories. + */ + files: Record; + + /** + * Creates a new ManagedFilesystem.File object. + * + * @param template + * The object whose properties should be copied within the new + * ManagedFilesystem.File. + */ + constructor(template: Optional) { + this.mimetype = template.mimetype; + this.streamName = template.streamName; + this.type = template.type; + this.name = template.name; + this.parent = template.parent; + this.files = template.files || {}; + } + } + +} + +export namespace ManagedFilesystem.File { + + /** + * All legal type strings for a ManagedFilesystem.File. + */ + export enum Type { + /** + * A normal file. As ManagedFilesystem does not currently represent any + * other non-directory types of files, like symbolic links, this type + * string may be used for any non-directory file. + */ + NORMAL = 'NORMAL', + + /** + * A directory. + */ + DIRECTORY = 'DIRECTORY' + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedShareLink.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedShareLink.ts new file mode 100644 index 0000000000..68c2948088 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedShareLink.ts @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { UserCredentials } from '../../rest/types/UserCredentials'; +import { SharingProfile } from '../../rest/types/SharingProfile'; + +/** + * Represents a link which can be used to gain access to an + * active Guacamole connection. + * + * This class is used by ManagedClient to represent + * generated connection sharing links. + */ +export class ManagedShareLink { + + /** + * The human-readable display name of this share link. + */ + name?: string; + + /** + * The actual URL of the link which can be used to access the shared + * connection. + */ + href: string; + + /** + * The sharing profile which was used to generate the share link. + */ + sharingProfile: SharingProfile; + + /** + * The credentials from which the share link was derived. + */ + sharingCredentials: UserCredentials; + + /** + * Create a new ManagedShareLink object. + * + * @param template + * The object whose properties should be copied within the new + * ManagedShareLink. + */ + constructor(template: ManagedShareLink) { + this.name = template.name; + this.href = template.href; + this.sharingProfile = template.sharingProfile; + this.sharingCredentials = template.sharingCredentials; + } + + /** + * Creates a new ManagedShareLink from a set of UserCredentials and the + * SharingProfile which was used to generate those UserCredentials. + * + * @param sharingProfile + * The SharingProfile which was used, via the REST API, to generate the + * given UserCredentials. + * + * @param sharingCredentials + * The UserCredentials object returned by the REST API in response to a + * request to share a connection using the given SharingProfile. + * + * @return + * A new ManagedShareLink object can be used to access the connection + * shared via the given SharingProfile and resulting UserCredentials. + */ + static getInstance(sharingProfile: SharingProfile, sharingCredentials: UserCredentials): ManagedShareLink { + + // Generate new share link using the given profile and credentials + return new ManagedShareLink({ + name: sharingProfile.name, + href: UserCredentials.getLink(sharingCredentials), + sharingProfile: sharingProfile, + sharingCredentials: sharingCredentials + }); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/TranslationResult.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/TranslationResult.ts new file mode 100644 index 0000000000..89548c2df4 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/TranslationResult.ts @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Object which represents the result of a translation as returned from + * the guacTranslate service. + * + * Used by the guacTranslate service. This class contains + * both the translated message and the translation ID that generated the message, in the case + * where it's unknown whether a translation is defined or not. + */ +export class TranslationResult { + + /** + * The translation ID. + */ + id?: string; + + /** + * The translated message. + */ + message?: string; + + /** + * Creates a new TranslationResult. + * + * @param template + * The object whose properties should be copied within the new + * TranslationResult. + */ + constructor(template: TranslationResult = {}) { + this.id = template.id; + this.message = template.message; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/clipboard.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/clipboard.module.ts new file mode 100644 index 0000000000..c0aaa922bc --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/clipboard.module.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ClipboardComponent } from './components/clipboard/clipboard.component'; + + +/** + * The module for code used to manipulate/observe the clipboard. + */ +@NgModule({ + declarations: [ + ClipboardComponent + ], + imports: [ + CommonModule + ], + exports: [ + ClipboardComponent + ] +}) +export class ClipboardModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.html new file mode 100644 index 0000000000..25c231fbca --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.html @@ -0,0 +1,26 @@ + +
      + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts new file mode 100644 index 0000000000..8057dca6d3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { AfterViewInit, Component, ElementRef, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../../events/types/GuacFrontendEventArguments'; +import { ClipboardData } from '../../types/ClipboardData'; +import { ClipboardService } from '../../services/clipboard.service'; +import { Subject } from 'rxjs'; + +@Component({ + selector: 'guac-clipboard', + templateUrl: './clipboard.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ClipboardComponent implements OnInit, AfterViewInit, OnDestroy { + + /** + * The DOM element which will contain the clipboard contents within the + * user interface provided by this directive. We populate the clipboard + * editor via this DOM element rather than updating a model so that we + * are prepared for future support of rich text contents. + */ + @ViewChild('activeClipboardTextarea') element!: ElementRef; + + destroyed = new Subject(); + + constructor(private readonly clipboardService: ClipboardService, + private guacEventService: GuacEventService) { + } + + /** + * When isActive is set to true then the Clipboard data will be + * displayed in the Clipboard Editor. When false, the Clipboard Editor + * will not be displayed with Clipboard data. + */ + isActive = false; + + /** + * Updates clipboard editor to be active. + */ + setActive() { + this.isActive = true; + } + + /** + * Rereads the contents of the clipboard field, updating the + * ClipboardData object on the scope as necessary. The type of data + * stored within the ClipboardData object will be heuristically + * determined from the HTML contents of the clipboard field. + */ + updateClipboardData() { + // Read contents of clipboard textarea + this.clipboardService.setClipboard(new ClipboardData({ + type: 'text/plain', + data: this.element.nativeElement.value + })); + }; + + /** + * Updates the contents of the clipboard editor to the given data. + * + * @param data + * The ClipboardData to display within the clipboard editor for + * editing. + */ + updateClipboardEditor(data: ClipboardData) { + // If the clipboard data is a string, render it as text + if (typeof data.data === 'string') { + this.element.nativeElement.value = data.data; + } + + // Ignore other data types for now + }; + + ngOnInit(): void { + // Update remote clipboard if local clipboard changes + this.guacEventService.on('guacClipboard', ({data}) => { + this.updateClipboardEditor(data); + }); + } + + ngAfterViewInit(): void { + + // Init clipboard editor with current clipboard contents + this.clipboardService.getClipboard().then((data) => { + this.updateClipboardEditor(data); + }); + } + + ngOnDestroy(): void { + this.destroyed.next(); + this.destroyed.complete(); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts new file mode 100644 index 0000000000..eae72ebf4f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts @@ -0,0 +1,638 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../events/types/GuacFrontendEventArguments'; +import { ClipboardData } from '../types/ClipboardData'; +import { DOCUMENT } from '@angular/common'; +import { SessionStorageFactory } from '../../storage/session-storage-factory.service'; + +/** + * The amount of time to wait before actually serving a request to read + * clipboard data, in milliseconds. Providing a reasonable delay between + * request and read attempt allows the cut/copy operation to settle, in + * case the data we are anticipating to be present is not actually present + * in the clipboard yet. + * + * @constant + */ +const CLIPBOARD_READ_DELAY = 100; + +/** + * A service for maintaining and accessing clipboard data. If possible, this + * service will leverage the local clipboard. If the local clipboard is not + * available, an internal in-memory clipboard will be used instead. + */ +@Injectable({ + providedIn: 'root' +}) +export class ClipboardService { + + /** + * Getter/setter which retrieves or sets the current stored clipboard + * contents. The stored clipboard contents are strictly internal to + * Guacamole, and may not reflect the local clipboard if local clipboard + * access is unavailable. + */ + private readonly storedClipboardData: Function = this.sessionStorageFactory.create(new ClipboardData()); + + /** + * The textarea that will be used to hold the local clipboard contents. + */ + private readonly clipboardContentElement: HTMLTextAreaElement; + + /** + * The promise associated with the current pending clipboard read attempt. + * If no clipboard read is active, this will be null. + * + * @type Promise. + */ + private pendingRead: Promise | null = null; + + /** + * A stack of past node selection ranges. A range convering the nodes + * currently selected within the document can be pushed onto this stack + * with pushSelection(), and the most recently pushed selection can be + * popped off the stack (and thus re-selected) with popSelection(). + * + * @type Range[] + */ + private selectionStack: Range[] = []; + + /** + * Reference to the window object. + */ + private readonly window: Window; + + constructor(@Inject(DOCUMENT) private document: Document, + private readonly sessionStorageFactory: SessionStorageFactory, + private guacEventService: GuacEventService) { + this.window = this.document.defaultView as Window; + + this.clipboardContentElement = this.document.createElement('textarea'); + // Ensure clipboard target is selectable but not visible + this.clipboardContentElement.className = 'clipboard-service-target'; + // Add clipboard target to DOM + document.body.appendChild(this.clipboardContentElement); + + + // Prevent events generated due to execCommand() from disturbing external things + this.clipboardContentElement.addEventListener('cut', this.stopEventPropagation); + this.clipboardContentElement.addEventListener('copy', this.stopEventPropagation); + this.clipboardContentElement.addEventListener('paste', this.stopEventPropagation); + this.clipboardContentElement.addEventListener('input', this.stopEventPropagation); + } + + /** + * Stops the propagation of the given event through the DOM tree. This is + * identical to invoking stopPropagation() on the event directly, except + * that this function is usable as an event handler itself. + * + * @param e + * The event whose propagation through the DOM tree should be stopped. + */ + private stopEventPropagation(e: Event) { + e.stopPropagation(); + }; + + /** + * Pushes the current selection range to the selection stack such that it + * can later be restored with popSelection(). + */ + private pushSelection() { + + if (!this.window) + return; + + // Add a range representing the current selection to the stack + const selection = this.window.getSelection(); + + if (!selection) + return; + + if (selection.getRangeAt && selection.rangeCount) + this.selectionStack.push(selection.getRangeAt(0)); + + }; + + /** + * Pops a selection range off the selection stack restoring the document's + * previous selection state. The selection range will be the most recent + * selection range pushed by pushSelection(). If there are no selection + * ranges currently on the stack, this function has no effect. + */ + private popSelection() { + + // Pull one selection range from the stack + const range = this.selectionStack.pop(); + if (!range) + return; + + // Replace any current selection with the retrieved selection + const selection = this.window.getSelection(); + if (!selection) + return; + selection.removeAllRanges(); + selection.addRange(range); + + }; + + /** + * Selects all nodes within the given element. This will replace the + * current selection with a new selection range that covers the element's + * contents. If the original selection should be preserved, use + * pushSelection() and popSelection(). + * + * @param {Element} element + * The element whose contents should be selected. + */ + private selectAll(element: Element) { + + // Use the select() function defined for input elements, if available + if ((element as HTMLInputElement).select) { + (element as HTMLInputElement).select(); + } + + // Fallback to manual manipulation of the selection + else { + + // Generate a range which selects all nodes within the given element + const range = this.document.createRange(); + range.selectNodeContents(element); + + // Replace any current selection with the generated range + const selection = this.window.getSelection(); + if (!selection) + return; + selection.removeAllRanges(); + selection.addRange(range); + + } + + } + + /** + * Sets the local clipboard, if possible, to the given text. + * + * @param {ClipboardData} data + * The data to assign to the local clipboard should be set. + * + * @return {Promise} + * A promise that will resolve if setting the clipboard was successful, + * and will reject if it failed. + */ + private setLocalClipboard(data: ClipboardData): Promise { + return new Promise((resolve, reject) => { + + try { + if (navigator.clipboard && navigator.clipboard.writeText) { + if (data.type === 'text/plain' && typeof data.data === 'string') { + navigator.clipboard.writeText(data.data).then(resolve).catch(reject); + return; + } + } + } + + // Ignore any hard failures to use Asynchronous Clipboard API, falling + // back to traditional document.execCommand() + catch (ignore) { + } + + const originalElement = this.document.activeElement as HTMLElement; + this.pushSelection(); + + // Copy the given value into the clipboard DOM element + if (typeof data.data === 'string') + this.clipboardContentElement.value = data.data; + else { + this.clipboardContentElement.innerHTML = ''; + const img = document.createElement('img'); + img.src = URL.createObjectURL(data.data); + this.clipboardContentElement.appendChild(img); + } + + // Select all data within the clipboard target + this.clipboardContentElement.focus(); + this.selectAll(this.clipboardContentElement); + + // Attempt to copy data from clipboard element into local clipboard + if (document.execCommand('copy')) { + resolve(); + } else { + reject(); + } + + // Unfocus the clipboard DOM event to avoid mobile keyboard opening, + // restoring whichever element was originally focused + this.clipboardContentElement.blur(); + originalElement.focus(); + this.popSelection(); + }); + } + + /** + * Parses the given data URL, returning its decoded contents as a new Blob. + * If the URL is not a valid data URL, null will be returned instead. + * + * @param url + * The data URL to parse. + * + * @returns + * A new Blob containing the decoded contents of the data URL, or null + * if the URL is not a valid data URL. + */ + parseDataURL(url: string): Blob | null { + + // Parse given string as a data URL + const result = /^data:([^;]*);base64,([a-zA-Z0-9+/]*[=]*)$/.exec(url); + if (!result) + return null; + + // Pull the mimetype and base64 contents of the data URL + const type = result[1]; + const data = this.window.atob(result[2]); + + // Convert the decoded binary string into a typed array + const buffer = new Uint8Array(data.length); + for (let i = 0; i < data.length; i++) + buffer[i] = data.charCodeAt(i); + + // Produce a proper blob containing the data and type provided in + // the data URL + return new Blob([buffer], {type: type}); + } + + /** + * Returns the content of the given element as plain, unformatted text, + * preserving only individual characters and newlines. Formatting, images, + * etc. are not taken into account. + * + * @param element + * The element whose text content should be returned. + * + * @returns + * The plain text contents of the given element, including newlines and + * spacing but otherwise without any formatting. + */ + getTextContent(element: Element): string { + + const blocks = []; + let currentBlock = ''; + + // For each child of the given element + // TODO: Oder doch firstChild wie vorher? + let current = element.firstElementChild; + while (current) { + + // Simply append the content of any text nodes + if (current.nodeType === Node.TEXT_NODE) + currentBlock += current.nodeValue; + + // Render
      as a newline character + else if (current.nodeName === 'BR') + currentBlock += '\n'; + + // Render as alt text, if available + else if (current.nodeName === 'IMG') + currentBlock += current.getAttribute('alt') || ''; + + // For all other nodes, handling depends on whether they are + // block-level elements + else { + + // If we are entering a new block context, start a new block if + // the current block is non-empty + if (currentBlock.length && this.window.getComputedStyle(current).display === 'block') { + + // Trim trailing newline (would otherwise inflate the line count by 1) + if (currentBlock.substring(currentBlock.length - 1) === '\n') + currentBlock = currentBlock.substring(0, currentBlock.length - 1); + + // Finish current block and start a new block + blocks.push(currentBlock); + currentBlock = ''; + + } + + // Append the content of the current element to the current block + currentBlock += this.getTextContent(current); + + } + + // TODO: Oder doch nextSibling wie vorher? + current = current.nextElementSibling; + + } + + // Add any in-progress block + if (currentBlock.length) + blocks.push(currentBlock); + + // Combine all non-empty blocks, separated by newlines + return blocks.join('\n'); + + } + + /** + * Replaces the current text content of the given element with the given + * text. To avoid affecting the position of the cursor within an editable + * element, or firing unnecessary DOM modification events, the underlying + * textContent property of the element is only touched if + * doing so would actually change the text. + * + * @param element + * The element whose text content should be changed. + * + * @param text + * The text content to assign to the given element. + */ + setTextContent(element: Element, text: string) { + + // Strip out any images + element.querySelectorAll('img').forEach(img => { + img.parentNode?.removeChild(img); + }); + + + // Reset text content only if doing so will actually change the content + if (this.getTextContent(element) !== text) + element.textContent = text; + + } + + /** + * Returns the URL of the single image within the given element, if the + * element truly contains only one child and that child is an image. If the + * content of the element is mixed or not an image, null is returned. + * + * @param element + * The element whose image content should be retrieved. + * + * @returns + * The URL of the image contained within the given element, if that + * element contains only a single child element which happens to be an + * image, or null if the content of the element is not purely an image. + */ + getImageContent(element: Element): string | null { + + // Return the source of the single child element, if it is an image + // TODO: FirstElement? + const firstChild = element.firstElementChild; + if (firstChild && firstChild.nodeName === 'IMG' && !firstChild.nextSibling) + return firstChild.getAttribute('src'); + + // Otherwise, the content of this element is not simply an image + return null; + + } + + /** + * Replaces the current contents of the given element with a single image + * having the given URL. To avoid affecting the position of the cursor + * within an editable element, or firing unnecessary DOM modification + * events, the content of the element is only touched if doing so would + * actually change content. + * + * @param element + * The element whose image content should be changed. + * + * @param url + * The URL of the image which should be assigned as the contents of the + * given element. + */ + setImageContent(element: Element, url: string) { + + // Retrieve the URL of the current image contents, if any + const currentImage = this.getImageContent(element); + + // If the current contents are not the given image (or not an image + // at all), reassign the contents + if (currentImage !== url) { + + // Clear current contents + element.innerHTML = ''; + + // Add a new image as the sole contents of the element + const img = document.createElement('img'); + img.src = url; + element.appendChild(img); + + } + + } + + /** + * Get the current value of the local clipboard. + * + * @return {Promise.} + * A promise that will resolve with the contents of the local clipboard + * if getting the clipboard was successful, and will reject if it + * failed. + */ + private getLocalClipboard(): Promise { + + // If the clipboard is already being read, do not overlap the read + // attempts; instead share the result across all requests + if (this.pendingRead) + return this.pendingRead; + + let resolvePendingRead: (data: ClipboardData) => void; + let rejectPendingRead: (reason?: any) => void; + + this.pendingRead = new Promise((resolve, reject) => { + resolvePendingRead = resolve; + rejectPendingRead = reject; + }); + + try { + + // Attempt to read the clipboard using the Asynchronous Clipboard + // API, if it's available + if (navigator.clipboard && navigator.clipboard.readText) { + + navigator.clipboard.readText().then(text => { + resolvePendingRead(new ClipboardData({ + type: 'text/plain', + data: text + })); + }, rejectPendingRead!); + + return this.pendingRead; + } + + } + + // Ignore any hard failures to use Asynchronous Clipboard API, falling + // back to traditional document.execCommand() + catch (ignore) { + } + + // Track the originally-focused element prior to changing focus + const originalElement = document.activeElement as HTMLElement | null; + + /** + * Attempts to paste the clipboard contents into the + * currently-focused element. The promise related to the current + * attempt to read the clipboard will be resolved or rejected + * depending on whether the attempt to paste succeeds. + */ + const performPaste = () => { + + // Attempt paste local clipboard into clipboard DOM element + if (document.execCommand('paste')) { + + // If the pasted data is a single image, resolve with a blob + // containing that image + const currentImage = this.getImageContent(this.clipboardContentElement); + if (currentImage) { + + // Convert the image's data URL into a blob + const blob = this.parseDataURL(currentImage); + if (blob) { + resolvePendingRead(new ClipboardData({ + type: blob.type, + data: blob + })); + } + + // Reject if conversion fails + else + rejectPendingRead(); + + } // end if clipboard is an image + + // Otherwise, assume the clipboard contains plain text + else + resolvePendingRead(new ClipboardData({ + type: 'text/plain', + data: this.clipboardContentElement.value + })); + + } + + // Otherwise, reading from the clipboard has failed + else + rejectPendingRead(); + + }; + + // Mark read attempt as in progress, cleaning up event listener and + // selection once the paste attempt has completed + this.pendingRead = this.pendingRead.finally(() => { + + // Do not use future changes in focus + this.clipboardContentElement.removeEventListener('focus', performPaste); + + // Unfocus the clipboard DOM event to avoid mobile keyboard opening, + // restoring whichever element was originally focused + this.clipboardContentElement.blur(); + originalElement?.focus(); + this.popSelection(); + + // No read is pending any longer + this.pendingRead = null; + + }); + + // Wait for the next event queue run before attempting to read + // clipboard data (in case the copy/cut has not yet completed) + this.window.setTimeout(() => { + + this.pushSelection(); + + // Ensure clipboard element is blurred (and that the "focus" event + // will fire) + this.clipboardContentElement.blur(); + this.clipboardContentElement.addEventListener('focus', performPaste); + + // Clear and select the clipboard DOM element + this.clipboardContentElement.value = ''; + this.clipboardContentElement.focus(); + this.selectAll(this.clipboardContentElement); + + // If focus failed to be set, we cannot read the clipboard + if (this.document.activeElement !== this.clipboardContentElement) + rejectPendingRead(); + + }, CLIPBOARD_READ_DELAY); + + return this.pendingRead!; + } + + /** + * Returns the current value of the internal clipboard shared across all + * active Guacamole connections running within the current browser tab. If + * access to the local clipboard is available, the internal clipboard is + * first synchronized with the current local clipboard contents. If access + * to the local clipboard is unavailable, only the internal clipboard will + * be used. + * + * @return + * A promise that will resolve with the contents of the internal + * clipboard, first retrieving those contents from the local clipboard + * if permission to do so has been granted. This promise is always + * resolved. + */ + getClipboard(): Promise { + return this.getLocalClipboard() + .then((data) => this.storedClipboardData(data), () => this.storedClipboardData()); + } + + /** + * Sets the content of the internal clipboard shared across all active + * Guacamole connections running within the current browser tab. If + * access to the local clipboard is available, the local clipboard is + * first set to the provided clipboard content. If access to the local + * clipboard is unavailable, only the internal clipboard will be used. A + * "guacClipboard" event will be broadcast with the assigned data once the + * operation has completed. + * + * @param data + * The data to assign to the clipboard. + * + * @return + * A promise that will resolve after the clipboard content has been + * set. This promise is always resolved. + */ + setClipboard(data: ClipboardData): Promise { + return this.setLocalClipboard(data).finally(() => { + + // Update internal clipboard and broadcast event notifying of + // updated contents + this.storedClipboardData(data); + this.guacEventService.broadcast('guacClipboard', {data}); + + }); + } + + /** + * Resynchronizes the local and internal clipboards, setting the contents + * of the internal clipboard to that of the local clipboard (if local + * clipboard access is granted) and broadcasting a "guacClipboard" event + * with the current internal clipboard contents for consumption by external + * components like the "guacClient" directive. + */ + resyncClipboard = () => { + this.getLocalClipboard().then(data => this.setClipboard(data)); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/styles/clipboard.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/styles/clipboard.css new file mode 100644 index 0000000000..a1f5710374 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/styles/clipboard.css @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.clipboard, .clipboard-service-target { + background: white; +} + +.clipboard { + position: relative; + border: 1px solid #AAA; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + -khtml-border-radius: 0.25em; + border-radius: 0.25em; + width: 100%; + height: 2in; + white-space: pre; + padding: 0.25em; +} + +.clipboard p, +.clipboard div { + margin: 0; +} + +.clipboard img { + max-width: 100%; + max-height: 100%; + display: block; + margin: 0 auto; + border: 1px solid black; + background: url('^images/checker.svg'); +} + +.clipboard-service-target { + position: fixed; + left: -1em; + right: -1em; + width: 1em; + height: 1em; + white-space: pre; + overflow: hidden; +} + +#clipboard-settings .clipboard.active { + overflow: auto; + font-size: 1em; +} + +#clipboard-settings .clipboard.inactive { + overflow: hidden; + font-size: 0.9em; + opacity: 0.5; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/types/ClipboardData.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/types/ClipboardData.ts new file mode 100644 index 0000000000..772734fbd7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/types/ClipboardData.ts @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the ClipboardData class used for interchange between the + * guacClipboard directive, clipboardService service, etc. + */ +export class ClipboardData { + /** + * The ID of the ManagedClient handling the remote desktop connection + * that originated this clipboard data, or null if the data originated + * from the clipboard editor or local clipboard. + */ + source: string | undefined; + + /** + * The mimetype of the data currently stored within the clipboard. + */ + type: string; + + /** + * The data currently stored within the clipboard. Depending on the + * nature of the stored data, this may be either a String, a Blob, or a + * File. + */ + data: string | Blob | File; + + /** + * Arbitrary data which can be contained by the clipboard. + * + * @constructor + * @param {ClipboardData|Object} [template={}] + * The object whose properties should be copied within the new + * ClipboardData. + */ + constructor(template: Partial = {}) { + this.source = template.source || undefined; + this.type = template.type || 'text/plain'; + this.data = template.data || ''; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/events/types/GuacFrontendEventArguments.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/events/types/GuacFrontendEventArguments.ts new file mode 100644 index 0000000000..864aefa6da --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/events/types/GuacFrontendEventArguments.ts @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { GuacEventArguments } from 'guacamole-frontend-lib'; +import { ManagedClient } from '../../client/types/ManagedClient'; +import { ClipboardData } from '../../clipboard/types/ClipboardData'; +import { Error } from '../../rest/types/Error'; + +/** + * Defines all possible guacamole events and their payloads that + * can be emitted by the frontend. + */ +export interface GuacFrontendEventArguments extends GuacEventArguments { + + // Global events + guacFatalPageError: { error: any }; + + // Auth events + guacLogin: { authToken: string; }; + guacLoginPending: { parameters: Promise }; + guacLoginFailed: { parameters: Promise; error: Error; }; + guacInvalidCredentials: { parameters: Promise; error: any; }; + guacInsufficientCredentials: { parameters: Promise; error: any; }; + guacLogout: { token: string | null; }; + + // Keyboard events + guacBeforeKeydown: { keysym: number; keyboard: Guacamole.Keyboard; }; + guacBeforeKeyup: { keysym: number; keyboard: Guacamole.Keyboard; }; + + // File browser events + guacUploadComplete: { filename: string; }; + + // Client events + guacClientFocused: { newFocusedClient: ManagedClient | null; }; + + // Clipboard events + guacClipboard: { data: ClipboardData }; + + // Player events + guacPlayerLoading: {}; + guacPlayerLoaded: {}; + guacPlayerError: { message: string; }; + guacPlayerProgress: { duration: number; current: number; }; + guacPlayerPlay: {}; + guacPlayerPause: {}; + guacPlayerSeek: { position: number; }; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.html new file mode 100644 index 0000000000..859912ce1b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.html @@ -0,0 +1,27 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts new file mode 100644 index 0000000000..0e73d1833a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CheckboxFieldComponent } from './checkbox-field.component'; + +describe('CheckboxFieldComponent', () => { + let component: CheckboxFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [CheckboxFieldComponent] + }); + fixture = TestBed.createComponent(CheckboxFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.ts new file mode 100644 index 0000000000..ec6673080e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.ts @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; +import { FormControl } from '@angular/forms'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +/** + * Checkbox field component + */ +@Component({ + selector: 'guac-checkbox-field', + templateUrl: './checkbox-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class CheckboxFieldComponent extends FormFieldBaseComponent implements OnInit, OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * Internal form control that holds the typed value + * of the field. + */ + typedControl: FormControl = new FormControl(null); + + constructor(private destroyRef: DestroyRef) { + super(); + } + + /** + * Initializes the component by setting up value change listeners for the `control` and `typedControl` + * form controls. + */ + ngOnInit(): void { + // Set initial value of typed control + const initialValue: boolean = this.control?.value === this.field.options![0]; + this.typedControl.setValue(initialValue, {emitEvent: false}); + + // Update typed value when model is changed + this.control?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + this.typedControl.setValue(value === this.field.options![0], {emitEvent: false}); + }); + + // Update string value in model when typed value is changed + this.typedControl.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + const newValue = value ? this.field.options![0] : ''; + this.control?.setValue(newValue); + }); + } + + + /** + * Apply disabled state to typed value form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.typedControl, disabled); + + } + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.html new file mode 100644 index 0000000000..aed64a2176 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.html @@ -0,0 +1,29 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts new file mode 100644 index 0000000000..5cc419a462 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DateFieldComponent } from './date-field.component'; + +describe('DateFieldComponent', () => { + let component: DateFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [DateFieldComponent] + }); + fixture = TestBed.createComponent(DateFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.ts new file mode 100644 index 0000000000..a91f34d5e5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.ts @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; +import { FormControl } from '@angular/forms'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { formatDate } from '@angular/common'; + +/** + * Component to display date fields. + */ +@Component({ + selector: 'guac-date-field', + templateUrl: './date-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class DateFieldComponent extends FormFieldBaseComponent implements OnInit, OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * Internal form control that holds the typed value + * of the field. + */ + typedControl: FormControl = new FormControl(null); + + constructor(private destroyRef: DestroyRef) { + super(); + } + + /** + * Initializes the component by setting up value change listeners for the `control` and `typedControl` + * form controls. + */ + ngOnInit(): void { + // Set initial value of the typed control + const initialValue: Date | null = this.control?.value ? this.parseDate(this.control.value) : null; + this.typedControl.setValue(initialValue, {emitEvent: false}); + + // Update typed value when model is changed + this.control?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + const newTypedValue = value ? this.parseDate(value) : null; + this.typedControl.setValue(newTypedValue, {emitEvent: false}); + }); + + // Update string value in model when typed value is changed + this.typedControl.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(typedValue => { + const newValue = typedValue ? formatDate(typedValue, 'yyyy-MM-dd', 'en-US', 'UTC') : ''; + this.control?.setValue(newValue); + }); + } + + /** + * Apply disabled state to typed value form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.typedControl, disabled); + + } + } + + /** + * Parses the date components of the given string into a Date with only the + * date components set. The resulting Date will be in the UTC timezone, + * with the time left as midnight. The input string must be in the format + * YYYY-MM-DD (zero-padded). + * + * @param str + * The date string to parse. + * + * @returns + * A Date object, in the UTC timezone, with only the date components + * set. + */ + parseDate(str: string): Date | null { + + // Parse date, return blank if invalid + const parsedDate = new Date(str + 'T00:00Z'); + if (isNaN(parsedDate.getTime())) + return null; + + return parsedDate; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.html new file mode 100644 index 0000000000..1eb2a64738 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.html @@ -0,0 +1,30 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.spec.ts new file mode 100644 index 0000000000..fd48e744e7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EmailFieldComponent } from './email-field.component'; + +describe('EmailFieldComponent', () => { + let component: EmailFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [EmailFieldComponent] + }); + fixture = TestBed.createComponent(EmailFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts new file mode 100644 index 0000000000..ae98ce1359 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; + +@Component({ + selector: 'guac-email-field', + templateUrl: './email-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class EmailFieldComponent extends FormFieldBaseComponent implements OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * TOOD: To which value is this a reference in the AngularJS code? + */ + readOnly: boolean = false; + + /** + * Apply disabled state to typed form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.control, disabled); + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts new file mode 100644 index 0000000000..a3d1e867b8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts @@ -0,0 +1,140 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input } from '@angular/core'; +import { Field } from '../../../rest/types/Field'; +import { FormControl } from '@angular/forms'; + + +/** + * Produces the translation string for the given field option + * value. The translation string will be of the form: + * + * NAMESPACE.FIELD_OPTION_NAME_VALUE + * + * where NAMESPACE is the provided namespace, + * NAME is the field name transformed + * via canonicalize(), and + * VALUE is the option value transformed via + * canonicalize() + * + * @param field + * The field to which the option belongs. + * + * @param namespace + * The namespace to use when generating the translation string. + * + * @param value + * The name of the option value. + * + * @returns + * The translation string which produces the translated name of the + * value specified. + */ +export const getFieldOption = (field: Field | undefined, namespace?: string, value?: string): string => { + + // If no field, or no value, then no corresponding translation string + if (!field || !field.name) + return ''; + + return canonicalize(namespace || 'MISSING_NAMESPACE') + + '.FIELD_OPTION_' + canonicalize(field.name) + + '_' + canonicalize(value || 'EMPTY'); + +} + +/** + * TODO: Move to separate file as this is used in multiple places + * Given an arbitrary identifier, returns the corresponding translation + * table identifier. Translation table identifiers are uppercase strings, + * word components separated by single underscores. For example, the + * string "Swap red/blue" would become "SWAP_RED_BLUE". + * + * @param identifier + * The identifier to transform into a translation table identifier. + * + * @returns + * The translation table identifier. + */ +export const canonicalize = (identifier: string): string => { + return identifier.replace(/[^a-zA-Z0-9]+/g, '_').toUpperCase(); +} + +/** + * Base class for form field components. + * + * TODO: move to shared library + */ +@Component({'template': ''}) +export abstract class FormFieldBaseComponent { + + /** + * The translation namespace of the translation strings that will + * be generated for this field. This namespace is absolutely + * required. If this namespace is omitted, all generated + * translation strings will be placed within the MISSING_NAMESPACE + * namespace, as a warning. + */ + @Input() namespace: string | undefined; + + /** + * The field to display. + */ + @Input({required: true}) field!: Field; + + /** + * The form control which contains this fields current value. When this + * field changes, the property will be updated accordingly. + */ + @Input() control?: FormControl; + + /** + * Whether this field should be rendered as disabled. By default, + * form fields are enabled. + */ + @Input() disabled: boolean = false; + + /** + * Whether this field should be focused. + */ + @Input() focused: boolean = false; + + /** + * An ID value which is reasonably likely to be unique relative to + * other elements on the page. This ID should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + abstract fieldId?: string; + + /** + * Sets the disabled state of the given control. + * @param control + * The control whose disabled state should be set. + * @param disabled + * Whether the control should be disabled. + */ + protected setDisabledState(control: FormControl | undefined, disabled: boolean): void { + if (disabled) { + control?.disable({emitEvent: false}); + } else { + control?.enable({emitEvent: false}); + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.html new file mode 100644 index 0000000000..c0d0884fc0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.html @@ -0,0 +1,30 @@ + +
      + + +
      + +
      + + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts new file mode 100644 index 0000000000..fd7a0d1c9f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FormFieldComponent } from './form-field.component'; + +describe('FormFieldComponent', () => { + let component: FormFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [FormFieldComponent] + }); + fixture = TestBed.createComponent(FormFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.ts new file mode 100644 index 0000000000..38064c29ca --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.ts @@ -0,0 +1,187 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + AfterViewInit, + ChangeDetectorRef, + Component, + ComponentRef, + ElementRef, + OnChanges, + SimpleChanges, + ViewChild, + ViewContainerRef, + ViewEncapsulation +} from '@angular/core'; +import { FormService } from '../../service/form.service'; +import { LogService } from '../../../util/log.service'; +import { canonicalize, FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; + +/** + * A component that allows editing of a field. + */ +@Component({ + selector: 'guac-form-field', + templateUrl: './form-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class FormFieldComponent extends FormFieldBaseComponent implements AfterViewInit, OnChanges { + + /** + * Reference to the field content element. + */ + @ViewChild('formField') fieldContentRef!: ElementRef; + + /** + * The element which should contain any compiled field content. The + * actual content of a field is dynamically determined by its type. + */ + fieldContent?: Element; + + /** + * View container reference which is used to dynamically create and insert + * field components. + */ + @ViewChild('formField', {read: ViewContainerRef}) viewContainer!: ViewContainerRef; + + /** + * Reference to the dynamically created field component. + */ + fieldComponent: ComponentRef | undefined; + + + /** + * An ID value which is reasonably likely to be unique relative to + * other elements on the page. This ID should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + fieldId: string = 'guac-field-XXXXXXXXXXXXXXXX'.replace(/X/g, function getRandomCharacter() { + return Math.floor(Math.random() * 36).toString(36); + }) + '-' + new Date().getTime().toString(36); + + + constructor(private formService: FormService, + private log: LogService, + private cdr: ChangeDetectorRef) { + super(); + } + + /** + * Updates the field content and passes changes to the field component. + */ + async ngOnChanges(changes: SimpleChanges): Promise { + + // Update field contents when field definition is changed + if (changes['field']) { + await this.insertFieldElement(); + } + + // Pass changes to the specific field component if it exists and implements + // the ngOnChanges() lifecycle method + this.fieldComponent?.instance.ngOnChanges?.(changes); + } + + async ngAfterViewInit(): Promise { + this.fieldContent = this.fieldContentRef.nativeElement; + + // Set up form service + this.formService.setChangeDetectorRef(this.cdr); + this.formService.setViewContainer(this.viewContainer); + + // Initially insert field element + await this.insertFieldElement(); + } + + /** + * Produces the translation string for the header of the current + * field. The translation string will be of the form: + * + * NAMESPACE.FIELD_HEADER_NAME + * + * where NAMESPACE is the namespace provided to the + * directive and NAME is the field name transformed + * via canonicalize(). + * + * @returns + * The translation string which produces the translated header + * of the field. + */ + getFieldHeader(): string { + + // If no field, or no name, then no header + if (!this.field || !this.field.name) + return ''; + + return canonicalize(this.namespace || 'MISSING_NAMESPACE') + + '.FIELD_HEADER_' + canonicalize(this.field.name); + + } + + /** + * Returns an object as would be provided to the ngClass directive + * that defines the CSS classes that should be applied to this + * field. + * + * @return + * The ngClass object defining the CSS classes for the current + * field. + */ + getFieldClasses(): Record { + return this.formService.getClasses('labeled-field-', this.field, { + empty: !this.control + }); + } + + /** + * Returns whether the current field should be displayed. + * + * @returns + * true if the current field should be displayed, false + * otherwise. + */ + isFieldVisible(): boolean { + return this.fieldContent?.hasChildNodes() || false; + } + + /** + * Inserts the element corresponding to the current field into the DOM. + */ + async insertFieldElement(): Promise { + + if (!this.fieldContent) { + return; + } + + // Reset contents + this.fieldContent.innerHTML = ''; + + // Append field content + if (this.field) { + + await this.formService.insertFieldElement(this.fieldContent, this.field.type, this) + // Store reference to the created field component + .then((fieldElement) => this.fieldComponent = fieldElement) + .catch(() => { + // fieldCreationFailed + this.log.warn('Failed to retrieve field with type "' + this.field.type + '"'); + }); + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.html new file mode 100644 index 0000000000..94eebd7b31 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.html @@ -0,0 +1,43 @@ + +
      +
      + + +

      {{getSectionHeader(form) | transloco}}

      + + +
      + + + + +
      + +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.spec.ts new file mode 100644 index 0000000000..48c6a78a72 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FormComponent } from './form.component'; + +describe('FormComponent', () => { + let component: FormComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [FormComponent] + }); + fixture = TestBed.createComponent(FormComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts new file mode 100644 index 0000000000..c876639021 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { Field } from '../../../rest/types/Field'; +import { Form } from '../../../rest/types/Form'; +import { FormService } from '../../service/form.service'; +import { FormControl, FormGroup } from '@angular/forms'; +import { canonicalize } from '../form-field-base/form-field-base.component'; + +/** + * A component that allows editing of a collection of fields. + */ +@Component({ + selector: 'guac-form', + templateUrl: './form.component.html', + encapsulation: ViewEncapsulation.None +}) +export class FormComponent implements OnChanges { + + /** + * The translation namespace of the translation strings that will + * be generated for all fields. This namespace is absolutely + * required. If this namespace is omitted, all generated + * translation strings will be placed within the MISSING_NAMESPACE + * namespace, as a warning. + */ + @Input() namespace?: string | undefined; + + /** + * The form content to display. This may be a form, an array of + * forms, or a simple array of fields. + */ + @Input() content?: Form[] | Form | Field[] | Field; + + /** + * The object which will receive all field values. Each field value + * will be assigned to the property of this object having the same + * name. + */ + @Input() myFormGroup?: FormGroup; + // TODO: Replaced by formGroup? @Input() model?: Record; + + /** + * Whether the contents of the form should be restricted to those + * fields/forms which match properties defined within the given + * model object. By default, all fields will be shown. + */ + @Input() modelOnly: boolean = false + + /** + * Whether the contents of the form should be rendered as disabled. + * By default, form fields are enabled. + */ + @Input() disabled: boolean = false; + + /** + * The name of the field to be focused, if any. + */ + @Input() myFocused: string | undefined; + + /** + * The array of all forms to display. + */ + forms: Form[] = []; + + constructor(private formService: FormService) { + } + + /** + * Produces the translation string for the section header of the + * given form. The translation string will be of the form: + * + * NAMESPACE.SECTION_HEADER_NAME + * + * where NAMESPACE is the namespace provided to the + * directive and NAME is the form name transformed + * via canonicalize(). + * + * @param form + * The form for which to produce the translation string. + * + * @returns + * The translation string which produces the translated header + * of the form. + */ + getSectionHeader(form: Form): string { + + // If no form, or no name, then no header + if (!form || !form.name) + return ''; + + return canonicalize(this.namespace || 'MISSING_NAMESPACE') + + '.SECTION_HEADER_' + canonicalize(form.name); + + } + + /** + * Returns an object as would be provided to the ngClass directive + * that defines the CSS classes that should be applied to the given + * form. + * + * @param form + * The form to generate the CSS classes for. + * + * @return + * The ngClass object defining the CSS classes for the given + * form. + */ + getFormClasses(form: Form): Record { + return this.formService.getClasses('form-', form); + } + + ngOnChanges(changes: SimpleChanges): void { + + // Produce set of forms from any given content + if (changes['content']) { + + let content: Form[] | Form | Field[] | Field = changes['content'].currentValue; + + // Transform content to always be an array of forms + this.forms = this.formService.asFormArray(content); + + } + + } + + /** + * Returns whether the given field should be focused or not. + * + * @param field + * The field to check. + * + * @returns + * true if the given field should be focused, false otherwise. + */ + isFocused(field: Field): boolean { + return field && (field.name === this.myFocused); + } + + /** + * Returns whether the given field should be displayed to the + * current user. + * + * @param field + * The field to check. + * + * @returns + * true if the given field should be visible, false otherwise. + */ + isVisible(field: Field): boolean { + + // All fields are visible if contents are not restricted to + // model properties only + if (!this.modelOnly) + return true; + + // Otherwise, fields are only visible if they are present + // within the form group + return field && !!this.myFormGroup && !!this.myFormGroup.get(field.name); + + } + + /** + * Returns whether at least one of the given fields should be + * displayed to the current user. + * + * @param fields + * The array of fields to check. + * + * @returns + * true if at least one field within the given array should be + * visible, false otherwise. + */ + containsVisible(fields: Field[]): boolean { + + // If fields are defined, check whether at least one is visible + if (fields) { + for (let i = 0; i < fields.length; i++) { + if (this.isVisible(fields[i])) + return true; + } + } + + // Otherwise, there are no visible fields + return false; + + } + + /** + * Returns the form control that is associated to the given field. + * + * @param field + * The field to get the control for. + * + * @returns + * The form control associated to the given field. If no form + * group has been provided, a dummy control will be returned. + */ + getControl(field: Field): FormControl { + return this.myFormGroup ? this.myFormGroup.get(field.name) as FormControl : new FormControl('not found'); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.html new file mode 100644 index 0000000000..3c3023913d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.html @@ -0,0 +1,30 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts new file mode 100644 index 0000000000..e357f8f255 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GuacInputColorComponent } from './guac-input-color.component'; + +describe('GuacInputColorComponent', () => { + let component: GuacInputColorComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [GuacInputColorComponent] + }); + fixture = TestBed.createComponent(GuacInputColorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts new file mode 100644 index 0000000000..5d8771ea33 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, ElementRef, Input, ViewChild, ViewEncapsulation } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { ColorPickerService } from '../../service/color-picker.service'; + +/** + * A component which implements a color input field. If the underlying color + * picker implementation cannot be used due to a lack of browser support, this + * directive will become read-only, functioning essentially as a color preview. + * + * @see colorPickerService + */ +@Component({ + selector: 'guac-input-color', + templateUrl: './guac-input-color.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacInputColorComponent { + + /** + * The current selected color value, in standard 6-digit hexadecimal + * RGB notation. When the user selects a different color using this + * directive, this value will be updated accordingly. + */ + @Input({required: true}) control!: FormControl; + + /** + * An optional array of colors to include within the color picker as a + * convenient selection of pre-defined colors. The colors within the + * array must be in standard 6-digit hexadecimal RGB notation. + */ + @Input() palette?: string[]; + + /** + * Reference to div element that should be used as a button to open the color picker. + */ + @ViewChild('colorPicker', {static: true}) colorInput!: ElementRef; + + /** + * Inject required services. + */ + constructor(private colorPickerService: ColorPickerService) { + } + + /** + * Returns whether the underlying color picker can be used. + * + * @returns + * true if the underlying color picker can be used, false otherwise. + */ + isColorPickerAvailable(): boolean { + return this.colorPickerService.isAvailable(); + } + + /** + * Returns whether the color currently selected is "dark" in the sense + * that the color white will have higher contrast against it than the + * color black. + * + * @returns + * true if the currently selected color is relatively dark (white + * text would provide better contrast than black), false otherwise. + */ + isDark(): boolean { + + // Assume not dark if color is invalid or undefined + const rgb = this.control.value && /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/.exec(this.control.value); + if (!rgb) + return false; + + // Parse color component values as hexadecimal + const red = parseInt(rgb[1], 16); + const green = parseInt(rgb[2], 16); + const blue = parseInt(rgb[3], 16); + + // Convert RGB to luminance in HSL space (as defined by the + // relative luminance formula given by the W3C for accessibility) + const luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue; + + // Consider the background to be dark if white text over that + // background would provide better contrast than black + return luminance <= 153; // 153 is the component value 0.6 converted from 0-1 to the 0-255 range + + } + + /** + * Prompts the user to choose a color by displaying a color selection + * dialog. If the user chooses a color, this directive's model is + * automatically updated. If the user cancels the dialog, the model is + * left untouched. + */ + selectColor(): void { + this.colorPickerService.selectColor(this.colorInput.nativeElement, this.control.value, this.palette) + .then((color: string) => { + this.control.setValue(color); + }).catch(() => { + // Do nothing if the user cancels the dialog + }); + }; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.html new file mode 100644 index 0000000000..54663d98ad --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.html @@ -0,0 +1,27 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts new file mode 100644 index 0000000000..56bdd81dcb --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LanguageFieldComponent } from './language-field.component'; + +describe('LanguageFieldComponent', () => { + let component: LanguageFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [LanguageFieldComponent] + }); + fixture = TestBed.createComponent(LanguageFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.ts new file mode 100644 index 0000000000..5428cd4900 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.ts @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; +import { LanguageService } from '../../../rest/service/language.service'; + +/** + * Component to display language fields. The language field type allows the + * user to select a language from the set of languages supported by the + * Guacamole web application. + */ +@Component({ + selector: 'guac-language-field', + templateUrl: './language-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class LanguageFieldComponent extends FormFieldBaseComponent implements OnInit, OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * A map of all available language keys to their human-readable + * names. + */ + languages?: Record = undefined; + + constructor(private languageService: LanguageService) { + super(); + } + + ngOnInit(): void { + + // Retrieve defined languages + this.languageService.getLanguages().subscribe(languages => { + this.languages = languages; + }); + + // Interpret undefined/null as empty string + this.control?.valueChanges.subscribe(value => { + if (!value && value !== '') + this.control?.setValue('', {emitEvent: false}); + }); + } + + /** + * Apply disabled state to form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.control, disabled); + + } + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.html new file mode 100644 index 0000000000..ac27bd288d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.html @@ -0,0 +1,27 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts new file mode 100644 index 0000000000..153235b9f9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NumberFieldComponent } from './number-field.component'; + +describe('NumberFieldComponent', () => { + let component: NumberFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [NumberFieldComponent] + }); + fixture = TestBed.createComponent(NumberFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.ts new file mode 100644 index 0000000000..0722682866 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.ts @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; +import { FormControl } from '@angular/forms'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +/** + * Component to display number fields. + */ +@Component({ + selector: 'guac-number-field', + templateUrl: './number-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class NumberFieldComponent extends FormFieldBaseComponent implements OnInit, OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * Internal form control that holds the typed value + * of the field. + */ + typedControl: FormControl = new FormControl(null); + + + constructor(private destroyRef: DestroyRef) { + super(); + } + + /** + * Initializes the component by setting up value change listeners for the `control` and `typedControl` + * form controls. + */ + ngOnInit(): void { + // Set initial value of typed control + const initialValue: number | null = this.control?.value ? Number(this.control.value) : null; + this.typedControl.setValue(initialValue, {emitEvent: false}); + + // Update typed value when model is changed + this.control?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + this.typedControl.setValue((value ? Number(value) : null), {emitEvent: false}); + }); + + // Update string value in model when typed value is changed + this.typedControl.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(typedValue => { + this.control?.setValue(((typedValue || typedValue === 0) ? typedValue.toString() : '')); + }); + } + + /** + * Apply disabled state to typed form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.typedControl, disabled); + + } + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.html new file mode 100644 index 0000000000..667aa4730c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.html @@ -0,0 +1,30 @@ + +
      + +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts new file mode 100644 index 0000000000..1f07108c08 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PasswordFieldComponent } from './password-field.component'; + +describe('PasswordFieldComponent', () => { + let component: PasswordFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [PasswordFieldComponent] + }); + fixture = TestBed.createComponent(PasswordFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts new file mode 100644 index 0000000000..d13693f37d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; + +/** + * Component to display password fields. + */ +@Component({ + selector: 'guac-password-field', + templateUrl: './password-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class PasswordFieldComponent extends FormFieldBaseComponent implements OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * The type to use for the input field. By default, the input field will + * have the type 'password', and thus will be masked. + * + * @default 'password' + */ + passwordInputType: string = 'password'; + + /** + * Apply disabled state to form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.control, disabled); + + } + } + + /** + * Returns a string which describes the action the next call to + * togglePassword() will have. + * + * @return + * A string which describes the action the next call to + * togglePassword() will have. + */ + getTogglePasswordHelpText(): string { + + // If password is hidden, togglePassword() will show the password + if (this.passwordInputType === 'password') + return 'FORM.HELP_SHOW_PASSWORD'; + + // If password is shown, togglePassword() will hide the password + return 'FORM.HELP_HIDE_PASSWORD'; + + } + + /** + * Toggles visibility of the field contents, if this field is a + * password field. Initially, password contents are masked + * (invisible). + */ + togglePassword() { + + // If password is hidden, show the password + if (this.passwordInputType === 'password') + this.passwordInputType = 'text'; + + // If password is shown, hide the password + else + this.passwordInputType = 'password'; + + }; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.html new file mode 100644 index 0000000000..9a05a68452 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.html @@ -0,0 +1,25 @@ + +
      +
      +

      + {{ field.translatableMessage?.key | transloco: {value: field.translatableMessage?.variables } }} +

      +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts new file mode 100644 index 0000000000..d196352b6a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RedirectFieldComponent } from './redirect-field.component'; + +describe('RedirectFieldComponent', () => { + let component: RedirectFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [RedirectFieldComponent] + }); + fixture = TestBed.createComponent(RedirectFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.ts new file mode 100644 index 0000000000..8045ee440c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.ts @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Inject, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; +import { DOCUMENT } from '@angular/common'; + +/** + * Component for the redirect field, which redirects the user to the provided + * URL. + */ +@Component({ + selector: 'guac-redirect-field', + templateUrl: './redirect-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class RedirectFieldComponent extends FormFieldBaseComponent implements OnInit { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + constructor(@Inject(DOCUMENT) private document: Document) { + super(); + } + + /** + * Redirect the user to the provided URL. + */ + ngOnInit(): void { + this.document.location.href = (this.field as any).redirectUrl; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.html new file mode 100644 index 0000000000..178833b1f4 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.html @@ -0,0 +1,29 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.spec.ts new file mode 100644 index 0000000000..15aeaefb6e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SelectFieldComponent } from './select-field.component'; + +describe('SelectFieldComponent', () => { + let component: SelectFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [SelectFieldComponent] + }); + fixture = TestBed.createComponent(SelectFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.ts new file mode 100644 index 0000000000..7b3a4159e3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/select-field/select-field.component.ts @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent, getFieldOption } from '../form-field-base/form-field-base.component'; + +/** + * Component for select fields. + */ +@Component({ + selector: 'guac-select-field', + templateUrl: './select-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class SelectFieldComponent extends FormFieldBaseComponent implements OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * @borrows FormFieldBaseComponent.getFieldOption + */ + protected readonly getFieldOption = getFieldOption; + + /** + * Apply disabled state to form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.control, disabled); + + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.html new file mode 100644 index 0000000000..8199edbf2c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.html @@ -0,0 +1,101 @@ + +
      + + + + + +
      + + +
      + + + {{ 'COLOR_SCHEME.FIELD_HEADER_FOREGROUND' | transloco }} + +
      + + +
      + + {{ 'COLOR_SCHEME.FIELD_HEADER_BACKGROUND' | transloco }} + +
      + + +
      +
      + + + {{ index }} + +
      +
      + + +
      +
      + + {{ index }} + +
      +
      + +
      + + +

      + {{'COLOR_SCHEME.SECTION_HEADER_DETAILS' | transloco}} + {{'COLOR_SCHEME.ACTION_SHOW_DETAILS' | transloco}} + {{'COLOR_SCHEME.ACTION_HIDE_DETAILS' | transloco}} +

      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts new file mode 100644 index 0000000000..2c4158b398 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TerminalColorSchemeFieldComponent } from './terminal-color-scheme-field.component'; + +describe('TerminalColorSchemeFieldComponent', () => { + let component: TerminalColorSchemeFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TerminalColorSchemeFieldComponent] + }); + fixture = TestBed.createComponent(TerminalColorSchemeFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts new file mode 100644 index 0000000000..8d60438013 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts @@ -0,0 +1,286 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { ColorScheme } from '../../types/ColorScheme'; +import { FormFieldBaseComponent, getFieldOption } from '../form-field-base/form-field-base.component'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import includes from 'lodash/includes'; + +/** + * The string value which is assigned to selectedColorScheme if a custom + * color scheme is selected. + */ +const CUSTOM_COLOR_SCHEME: string = 'custom'; + +/** + * The palette indices of all colors which are considered low-intensity. + */ +const lowIntensity = [0, 1, 2, 3, 4, 5, 6, 7] as const; + +/** + * The palette indices of all colors which are considered high-intensity. + */ +const highIntensity = [8, 9, 10, 11, 12, 13, 14, 15] as const; + +/** + * The palette indices of all colors. + */ +const terminalColorIndices = [...lowIntensity, ...highIntensity] as const; + +/** + * Type definition for all possible values of a terminal color palette index. + */ +type TerminalColorIndex = typeof terminalColorIndices[number]; + +/** + * Component for terminal color scheme fields. + */ +@Component({ + selector: 'guac-terminal-color-scheme-field', + templateUrl: './terminal-color-scheme-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class TerminalColorSchemeFieldComponent extends FormFieldBaseComponent implements OnInit, OnChanges { + + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * The currently selected color scheme. If a pre-defined color scheme is + * selected, this will be the connection parameter value associated with + * that color scheme. If a custom color scheme is selected, this will be + * the string "custom". + */ + selectedColorScheme: FormControl = new FormControl(''); + + /** + * The array of colors to include within the color picker as pre-defined + * options for convenience. + */ + defaultPalette: string[] = new ColorScheme().colors; + + /** + * Whether the raw details of the custom color scheme should be shown. By + * default, such details are hidden. + * + * @default false + */ + detailsShown: boolean = false; + + /** + * Form group which contains the form controls for the custom color scheme. + */ + customColorSchemeFormGroup!: FormGroup<{ + background: FormControl, + foreground: FormControl, + colors: FormGroup>> + }>; + + /** + * The form control for the background color of the custom color scheme. + */ + get customColorSchemeBackground(): FormControl { + return this.customColorSchemeFormGroup.get('background') as FormControl; + } + + /** + * The form control for the foreground color of the custom color scheme. + */ + get customColorSchemeForeground(): FormControl { + return this.customColorSchemeFormGroup.get('foreground') as FormControl; + } + + /** + * The form control for the color at the given palette index of the custom + * color scheme. + * @param index + * The palette index of the color to retrieve. + * + * @returns + * The form control for the color at the given palette index. + */ + customColorSchemeColorFormControl(index: TerminalColorIndex): FormControl { + return this.customColorSchemeFormGroup.get('colors')?.get(index.toString()) as FormControl; + } + + constructor(private destroyRef: DestroyRef, private fb: FormBuilder) { + super(); + + // Initialize empty form group for custom color scheme colors + const colorFormControls: Record> = {} as any; + + // Create form controls for each color + terminalColorIndices.forEach((index: TerminalColorIndex) => { + colorFormControls[index] = this.fb.control(''); + }); + + // Create form group for custom color scheme + this.customColorSchemeFormGroup = this.fb.group({ + background: this.fb.control(''), + foreground: this.fb.control(''), + colors: this.fb.group(colorFormControls) + }); + + } + + /** + * Sets the values of the form controls to the given color scheme. + * + * @param customColorScheme + * The custom color scheme to set. + */ + private setCustomColorScheme(customColorScheme: ColorScheme): void { + + this.customColorSchemeFormGroup.setValue({ + background: customColorScheme.background, + foreground: customColorScheme.foreground, + // Transform color array into object with indices as keys + colors: terminalColorIndices.reduce((acc, index: TerminalColorIndex) => { + acc[index] = customColorScheme.colors[index]; + return acc; + }, {} as Record) + }, {onlySelf: true, emitEvent: false}); + } + + /** + * Constructs a {@link ColorScheme} object from the values of the form controls. + * + * @returns + * Color scheme object representing the current color scheme. + */ + private getCustomColorScheme(): ColorScheme { + return new ColorScheme({ + background: this.customColorSchemeBackground.value, + foreground: this.customColorSchemeForeground.value, + colors: terminalColorIndices.map(index => this.customColorSchemeColorFormControl(index).value) + }); + } + + /** + * Initializes the component by setting up value change listeners for the `control` and `selectedColorScheme` + * form controls. + */ + ngOnInit(): void { + + /** + * Updates the component data based on the given string value from the form control input. + */ + const updateComponentData = (value: string | null): void => { + if (this.selectedColorScheme.value === CUSTOM_COLOR_SCHEME || (value && !includes(this.field.options, value))) { + this.setCustomColorScheme(ColorScheme.fromString(value as string)); + this.selectedColorScheme.setValue(CUSTOM_COLOR_SCHEME, {emitEvent: false}); + } else + this.selectedColorScheme.setValue(value || '', {emitEvent: false}); + } + + // Set initial value of the selected color scheme control + const initialValue: string | null = this.control?.value === undefined ? null : this.control.value; + updateComponentData(initialValue); + + // Keep selected color scheme and custom color scheme in sync with changes + // to model + this.control?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + updateComponentData(value); + }); + + // Keep model in sync with changes to selected color scheme + this.selectedColorScheme.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(selectedColorScheme => { + if (!selectedColorScheme) + this.control?.setValue(''); + else if (selectedColorScheme === CUSTOM_COLOR_SCHEME) + this.control?.setValue(ColorScheme.toString(this.getCustomColorScheme())); + else + this.control?.setValue(selectedColorScheme); + }); + + // Keep model in sync with changes to custom color scheme + this.customColorSchemeFormGroup?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + if (this.selectedColorScheme.value === CUSTOM_COLOR_SCHEME) + this.control?.setValue(ColorScheme.toString(this.getCustomColorScheme())); + }); + } + + /** + * Apply disabled state to selected color scheme controls. + */ + ngOnChanges(changes: SimpleChanges): void { + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.selectedColorScheme, disabled); + this.setDisabledState(this.control, disabled); + + } + + } + + /** + * Returns whether a custom color scheme has been selected. + * + * @returns + * true if a custom color scheme has been selected, false otherwise. + */ + isCustom(): boolean { + return this.selectedColorScheme.value === CUSTOM_COLOR_SCHEME; + } + + /** + * Shows the raw details of the custom color scheme. If the details are + * already shown, this function has no effect. + */ + showDetails(): void { + this.detailsShown = true; + } + + /** + * Hides the raw details of the custom color scheme. If the details are + * already hidden, this function has no effect. + */ + hideDetails(): void { + this.detailsShown = false; + } + + /** + * Make getFieldOption available in template. + */ + readonly getFieldOption = getFieldOption; + + /** + * Make lowIntensity available in template. + */ + readonly lowIntensity = lowIntensity; + + /** + * Make highIntensity available in template. + */ + readonly highIntensity = highIntensity; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.html new file mode 100644 index 0000000000..21786df84c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.html @@ -0,0 +1,27 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.spec.ts new file mode 100644 index 0000000000..433dfaed43 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TextAreaFieldComponent } from './text-area-field.component'; + +describe('TestAreaFieldComponent', () => { + let component: TextAreaFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TextAreaFieldComponent] + }); + fixture = TestBed.createComponent(TextAreaFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.ts new file mode 100644 index 0000000000..0c591e46f8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-area-field/text-area-field.component.ts @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; + +/** + * Component for textarea fields. + */ +@Component({ + selector: 'guac-text-area-field', + templateUrl: './text-area-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class TextAreaFieldComponent extends FormFieldBaseComponent implements OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * Apply disabled state to form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.control, disabled); + + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.html new file mode 100644 index 0000000000..ec07e73edf --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.html @@ -0,0 +1,35 @@ + +
      + + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts new file mode 100644 index 0000000000..89011ef38e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TextFieldComponent } from './text-field.component'; + +describe('TextFieldComponent', () => { + let component: TextFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TextFieldComponent] + }); + fixture = TestBed.createComponent(TextFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.ts new file mode 100644 index 0000000000..504aaa14f8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.ts @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent, getFieldOption } from '../form-field-base/form-field-base.component'; + +/** + * Component for text fields. + */ +@Component({ + selector: 'guac-text-field', + templateUrl: './text-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class TextFieldComponent extends FormFieldBaseComponent implements OnChanges, OnInit { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * The ID of the datalist element that should be associated with the text + * field, providing a set of known-good values. If no such values are + * defined, this will be null. + */ + dataListId: string | null = null; + + ngOnInit(): void { + // Generate unique ID for datalist, if applicable + if (this.field.options && this.field.options.length) + this.dataListId = this.fieldId + '-datalist'; + } + + /** + * Apply disabled state to form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.control, disabled); + + } + } + + /** + * @borrows FormFieldBaseComponent.getFieldOption + */ + protected readonly getFieldOption = getFieldOption; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.html new file mode 100644 index 0000000000..2c855cc4df --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.html @@ -0,0 +1,29 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts new file mode 100644 index 0000000000..008ab27a11 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TimeFieldComponent } from './time-field.component'; + +describe('TimeFieldComponent', () => { + let component: TimeFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TimeFieldComponent] + }); + fixture = TestBed.createComponent(TimeFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.ts new file mode 100644 index 0000000000..f80a5228f8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.ts @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { formatDate } from '@angular/common'; +import { FormControl } from '@angular/forms'; + +/** + * Component for time fields. + */ +@Component({ + selector: 'guac-time-field', + templateUrl: './time-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class TimeFieldComponent extends FormFieldBaseComponent implements OnInit, OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * Internal form control that holds the typed value + * of the field. + */ + typedControl: FormControl = new FormControl(null); + + constructor(private destroyRef: DestroyRef) { + super(); + } + + /** + * Initializes the component by setting up value change listeners for the `control` and `typedControl` + * form controls. + */ + ngOnInit(): void { + + // Set initial value of typed control + const initialValue: Date | null = this.control?.value ? this.parseTime(this.control.value) : null; + this.typedControl.setValue(initialValue, {emitEvent: false}); + + // Update typed value when model is changed + this.control?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + const newTypedValue = value ? this.parseTime(value) : null; + this.typedControl.setValue(newTypedValue, {emitEvent: false}); + }); + + // Update string value in model when typed value is changed + this.typedControl.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(typedValue => { + const newValue = typedValue ? formatDate(typedValue, 'HH:mm:ss', 'en-US', 'UTC') : ''; + this.control?.setValue(newValue); + }); + } + + /** + * Apply disabled state to typed value form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.typedControl, disabled); + + } + } + + /** + * Parses the time components of the given string into a Date with only the + * time components set. The resulting Date will be in the UTC timezone, + * with the date left as 1970-01-01. The input string must be in the format + * HH:MM:SS (zero-padded, 24-hour). + * + * @param str + * The time string to parse. + * + * @returns + * A Date object, in the UTC timezone, with only the time components + * set. + */ + parseTime(str: string): Date | null { + + // Parse time, return blank if invalid + const parsedDate = new Date('1970-01-01T' + str + 'Z'); + if (isNaN(parsedDate.getTime())) + return null; + + return parsedDate; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.html new file mode 100644 index 0000000000..0199a5cc3e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.html @@ -0,0 +1,41 @@ + +
      + + + + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts new file mode 100644 index 0000000000..3ca2a53283 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TimeZoneFieldComponent } from './time-zone-field.component'; + +describe('TimeZoneFieldComponent', () => { + let component: TimeZoneFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TimeZoneFieldComponent] + }); + fixture = TestBed.createComponent(TimeZoneFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts new file mode 100644 index 0000000000..2e2a94e458 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts @@ -0,0 +1,796 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; +import { FormControl } from '@angular/forms'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +/** + * Component for time zone fields. Time zone fields use IANA time zone + * database identifiers as the standard representation for each supported time + * zone. These identifiers are also legal Java time zone IDs. + */ +@Component({ + selector: 'guac-time-zone-field', + templateUrl: './time-zone-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class TimeZoneFieldComponent extends FormFieldBaseComponent implements OnChanges, OnInit { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * The name of the region currently selected. The selected region narrows + * which time zones are selectable. + */ + region: FormControl = new FormControl('', {nonNullable: true}); + + /** + * All selectable regions. + */ + regions: string[] = []; + + /** + * Direct mapping of all time zone IDs to the region containing that ID. + */ + timeZoneRegions!: Record; + + /** + * Map of regions to the currently selected time zone for that region. + * Initially, all regions will be set to default selections (the first + * time zone, sorted lexicographically). + */ + selectedTimeZone!: Record; + + constructor(private destroyRef: DestroyRef) { + super(); + } + + /** + * Initializes the component by setting up value change listeners for the `control` and `region` + * form controls, getting the regions and time zones, and setting the initial disabled state of the controls. + */ + ngOnInit(): void { + + // Initialize calculated fields + this.regions = this.getRegions(); + this.timeZoneRegions = this.getTimeZoneRegions(); + this.selectedTimeZone = this.getSelectedTimeZone(); + + + // Set initial value of typed control + const initialTimeZoneID: string | null | undefined = this.control?.value; + if (initialTimeZoneID) { + this.region.setValue(this.timeZoneRegions[initialTimeZoneID] || '', {emitEvent: false}); + this.selectedTimeZone[this.region.value] = initialTimeZoneID; + } + + // Ensure corresponding region is selected + this.control?.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((timeZoneID) => { + if (timeZoneID === null) + return; + + this.region.setValue(this.timeZoneRegions[timeZoneID] || '', {emitEvent: false}); + this.selectedTimeZone[this.region.value] = timeZoneID; + }); + + // Restore time zone selection when region changes + this.region.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((region) => { + this.control?.setValue(this.selectedTimeZone[region] || null, {emitEvent: false}); + this.updateDisabledState(this.disabled); + }); + + // Set initial disabled state + this.updateDisabledState(this.disabled); + } + + /** + * Apply disabled state to both control and region + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + const disabled: boolean = changes['disabled'].currentValue; + this.updateDisabledState(disabled); + } + + // TODO: What if control changes? + + } + + /** + * Updates the disabled and enabled state of the region and control form controls + * based on the disabled parameter and the region value. + * + * If no region is selected, the control will be disabled regardless of the + * disabled parameter. + * + * @param disabled + * Whether the controls should be disabled. + */ + private updateDisabledState(disabled: boolean): void { + + const regionEnabled = !disabled; + const controlEnabled = !disabled && !!this.region.value; + + // First disable both controls + this.region.disable({emitEvent: false}); + this.control?.disable({emitEvent: false}); + + if (regionEnabled) + this.region.enable({emitEvent: false}); + + if (controlEnabled) + this.control?.enable({emitEvent: false}); + } + + private getRegions(): string[] { + + // Start with blank entry + const regions = ['']; + + // Add each available region + for (let region in this.timeZones) + regions.push(region); + + return regions; + + } + + + private getTimeZoneRegions(): Record { + + const regions: Record = {}; + + // For each available region + for (let region in this.timeZones) { + + // Get time zones within that region + const timeZonesInRegion = this.timeZones[region]; + + // For each of those time zones + for (let timeZoneName in timeZonesInRegion) { + + // Get corresponding ID + const timeZoneID = timeZonesInRegion[timeZoneName]; + + // Store region in map + regions[timeZoneID] = region; + + } + + } + + return regions; + + } + + private getSelectedTimeZone(): Record { + + const defaultTimeZone: Record = {}; + + // For each available region + for (let region in this.timeZones) { + + // Get time zones within that region + const timeZonesInRegion = this.timeZones[region]; + + // No default initially + let defaultZoneName: string | undefined = undefined; + let defaultZoneID: string | undefined = undefined; + + // For each of those time zones + for (let timeZoneName in timeZonesInRegion) { + + // Get corresponding ID + const timeZoneID = timeZonesInRegion[timeZoneName]; + + // Set as default if earlier than existing default + if (!defaultZoneName || timeZoneName < defaultZoneName) { + defaultZoneName = timeZoneName; + defaultZoneID = timeZoneID; + } + + } + + // Store default zone + defaultTimeZone[region] = defaultZoneID as string; + + } + + return defaultTimeZone; + + } + + + /** + * Map of time zone regions to the map of all time zone name/ID pairs + * within those regions. + */ + timeZones: Record> = { + + 'Africa': { + 'Abidjan': 'Africa/Abidjan', + 'Accra': 'Africa/Accra', + 'Addis Ababa': 'Africa/Addis_Ababa', + 'Algiers': 'Africa/Algiers', + 'Asmara': 'Africa/Asmara', + 'Asmera': 'Africa/Asmera', + 'Bamako': 'Africa/Bamako', + 'Bangui': 'Africa/Bangui', + 'Banjul': 'Africa/Banjul', + 'Bissau': 'Africa/Bissau', + 'Blantyre': 'Africa/Blantyre', + 'Brazzaville': 'Africa/Brazzaville', + 'Bujumbura': 'Africa/Bujumbura', + 'Cairo': 'Africa/Cairo', + 'Casablanca': 'Africa/Casablanca', + 'Ceuta': 'Africa/Ceuta', + 'Conakry': 'Africa/Conakry', + 'Dakar': 'Africa/Dakar', + 'Dar es Salaam': 'Africa/Dar_es_Salaam', + 'Djibouti': 'Africa/Djibouti', + 'Douala': 'Africa/Douala', + 'El Aaiun': 'Africa/El_Aaiun', + 'Freetown': 'Africa/Freetown', + 'Gaborone': 'Africa/Gaborone', + 'Harare': 'Africa/Harare', + 'Johannesburg': 'Africa/Johannesburg', + 'Juba': 'Africa/Juba', + 'Kampala': 'Africa/Kampala', + 'Khartoum': 'Africa/Khartoum', + 'Kigali': 'Africa/Kigali', + 'Kinshasa': 'Africa/Kinshasa', + 'Lagos': 'Africa/Lagos', + 'Libreville': 'Africa/Libreville', + 'Lome': 'Africa/Lome', + 'Luanda': 'Africa/Luanda', + 'Lubumbashi': 'Africa/Lubumbashi', + 'Lusaka': 'Africa/Lusaka', + 'Malabo': 'Africa/Malabo', + 'Maputo': 'Africa/Maputo', + 'Maseru': 'Africa/Maseru', + 'Mbabane': 'Africa/Mbabane', + 'Mogadishu': 'Africa/Mogadishu', + 'Monrovia': 'Africa/Monrovia', + 'Nairobi': 'Africa/Nairobi', + 'Ndjamena': 'Africa/Ndjamena', + 'Niamey': 'Africa/Niamey', + 'Nouakchott': 'Africa/Nouakchott', + 'Ouagadougou': 'Africa/Ouagadougou', + 'Porto-Novo': 'Africa/Porto-Novo', + 'Sao Tome': 'Africa/Sao_Tome', + 'Timbuktu': 'Africa/Timbuktu', + 'Tripoli': 'Africa/Tripoli', + 'Tunis': 'Africa/Tunis', + 'Windhoek': 'Africa/Windhoek' + }, + + 'America': { + 'Adak': 'America/Adak', + 'Anchorage': 'America/Anchorage', + 'Anguilla': 'America/Anguilla', + 'Antigua': 'America/Antigua', + 'Araguaina': 'America/Araguaina', + 'Argentina / Buenos Aires': 'America/Argentina/Buenos_Aires', + 'Argentina / Catamarca': 'America/Argentina/Catamarca', + 'Argentina / Comodoro Rivadavia': 'America/Argentina/ComodRivadavia', + 'Argentina / Cordoba': 'America/Argentina/Cordoba', + 'Argentina / Jujuy': 'America/Argentina/Jujuy', + 'Argentina / La Rioja': 'America/Argentina/La_Rioja', + 'Argentina / Mendoza': 'America/Argentina/Mendoza', + 'Argentina / Rio Gallegos': 'America/Argentina/Rio_Gallegos', + 'Argentina / Salta': 'America/Argentina/Salta', + 'Argentina / San Juan': 'America/Argentina/San_Juan', + 'Argentina / San Luis': 'America/Argentina/San_Luis', + 'Argentina / Tucuman': 'America/Argentina/Tucuman', + 'Argentina / Ushuaia': 'America/Argentina/Ushuaia', + 'Aruba': 'America/Aruba', + 'Asuncion': 'America/Asuncion', + 'Atikokan': 'America/Atikokan', + 'Atka': 'America/Atka', + 'Bahia': 'America/Bahia', + 'Bahia Banderas': 'America/Bahia_Banderas', + 'Barbados': 'America/Barbados', + 'Belem': 'America/Belem', + 'Belize': 'America/Belize', + 'Blanc-Sablon': 'America/Blanc-Sablon', + 'Boa Vista': 'America/Boa_Vista', + 'Bogota': 'America/Bogota', + 'Boise': 'America/Boise', + 'Buenos Aires': 'America/Buenos_Aires', + 'Cambridge Bay': 'America/Cambridge_Bay', + 'Campo Grande': 'America/Campo_Grande', + 'Cancun': 'America/Cancun', + 'Caracas': 'America/Caracas', + 'Catamarca': 'America/Catamarca', + 'Cayenne': 'America/Cayenne', + 'Cayman': 'America/Cayman', + 'Chicago': 'America/Chicago', + 'Chihuahua': 'America/Chihuahua', + 'Coral Harbour': 'America/Coral_Harbour', + 'Cordoba': 'America/Cordoba', + 'Costa Rica': 'America/Costa_Rica', + 'Creston': 'America/Creston', + 'Cuiaba': 'America/Cuiaba', + 'Curacao': 'America/Curacao', + 'Danmarkshavn': 'America/Danmarkshavn', + 'Dawson': 'America/Dawson', + 'Dawson Creek': 'America/Dawson_Creek', + 'Denver': 'America/Denver', + 'Detroit': 'America/Detroit', + 'Dominica': 'America/Dominica', + 'Edmonton': 'America/Edmonton', + 'Eirunepe': 'America/Eirunepe', + 'El Salvador': 'America/El_Salvador', + 'Ensenada': 'America/Ensenada', + 'Fort Wayne': 'America/Fort_Wayne', + 'Fortaleza': 'America/Fortaleza', + 'Glace Bay': 'America/Glace_Bay', + 'Godthab': 'America/Godthab', + 'Goose Bay': 'America/Goose_Bay', + 'Grand Turk': 'America/Grand_Turk', + 'Grenada': 'America/Grenada', + 'Guadeloupe': 'America/Guadeloupe', + 'Guatemala': 'America/Guatemala', + 'Guayaquil': 'America/Guayaquil', + 'Guyana': 'America/Guyana', + 'Halifax': 'America/Halifax', + 'Havana': 'America/Havana', + 'Hermosillo': 'America/Hermosillo', + 'Indiana / Indianapolis': 'America/Indiana/Indianapolis', + 'Indiana / Knox': 'America/Indiana/Knox', + 'Indiana / Marengo': 'America/Indiana/Marengo', + 'Indiana / Petersburg': 'America/Indiana/Petersburg', + 'Indiana / Tell City': 'America/Indiana/Tell_City', + 'Indiana / Vevay': 'America/Indiana/Vevay', + 'Indiana / Vincennes': 'America/Indiana/Vincennes', + 'Indiana / Winamac': 'America/Indiana/Winamac', + 'Indianapolis': 'America/Indianapolis', + 'Inuvik': 'America/Inuvik', + 'Iqaluit': 'America/Iqaluit', + 'Jamaica': 'America/Jamaica', + 'Jujuy': 'America/Jujuy', + 'Juneau': 'America/Juneau', + 'Kentucky / Louisville': 'America/Kentucky/Louisville', + 'Kentucky / Monticello': 'America/Kentucky/Monticello', + 'Kralendijk': 'America/Kralendijk', + 'La Paz': 'America/La_Paz', + 'Lima': 'America/Lima', + 'Los Angeles': 'America/Los_Angeles', + 'Louisville': 'America/Louisville', + 'Lower Princes': 'America/Lower_Princes', + 'Maceio': 'America/Maceio', + 'Managua': 'America/Managua', + 'Manaus': 'America/Manaus', + 'Marigot': 'America/Marigot', + 'Martinique': 'America/Martinique', + 'Matamoros': 'America/Matamoros', + 'Mazatlan': 'America/Mazatlan', + 'Mendoza': 'America/Mendoza', + 'Menominee': 'America/Menominee', + 'Merida': 'America/Merida', + 'Metlakatla': 'America/Metlakatla', + 'Mexico City': 'America/Mexico_City', + 'Miquelon': 'America/Miquelon', + 'Moncton': 'America/Moncton', + 'Monterrey': 'America/Monterrey', + 'Montevideo': 'America/Montevideo', + 'Montreal': 'America/Montreal', + 'Montserrat': 'America/Montserrat', + 'Nassau': 'America/Nassau', + 'New York': 'America/New_York', + 'Nipigon': 'America/Nipigon', + 'Nome': 'America/Nome', + 'Noronha': 'America/Noronha', + 'North Dakota / Beulah': 'America/North_Dakota/Beulah', + 'North Dakota / Center': 'America/North_Dakota/Center', + 'North Dakota / New Salem': 'America/North_Dakota/New_Salem', + 'Ojinaga': 'America/Ojinaga', + 'Panama': 'America/Panama', + 'Pangnirtung': 'America/Pangnirtung', + 'Paramaribo': 'America/Paramaribo', + 'Phoenix': 'America/Phoenix', + 'Port-au-Prince': 'America/Port-au-Prince', + 'Port of Spain': 'America/Port_of_Spain', + 'Porto Acre': 'America/Porto_Acre', + 'Porto Velho': 'America/Porto_Velho', + 'Puerto Rico': 'America/Puerto_Rico', + 'Rainy River': 'America/Rainy_River', + 'Rankin Inlet': 'America/Rankin_Inlet', + 'Recife': 'America/Recife', + 'Regina': 'America/Regina', + 'Resolute': 'America/Resolute', + 'Rio Branco': 'America/Rio_Branco', + 'Rosario': 'America/Rosario', + 'Santa Isabel': 'America/Santa_Isabel', + 'Santarem': 'America/Santarem', + 'Santiago': 'America/Santiago', + 'Santo Domingo': 'America/Santo_Domingo', + 'Sao Paulo': 'America/Sao_Paulo', + 'Scoresbysund': 'America/Scoresbysund', + 'Shiprock': 'America/Shiprock', + 'Sitka': 'America/Sitka', + 'St. Barthelemy': 'America/St_Barthelemy', + 'St. Johns': 'America/St_Johns', + 'St. Kitts': 'America/St_Kitts', + 'St. Lucia': 'America/St_Lucia', + 'St. Thomas': 'America/St_Thomas', + 'St. Vincent': 'America/St_Vincent', + 'Swift Current': 'America/Swift_Current', + 'Tegucigalpa': 'America/Tegucigalpa', + 'Thule': 'America/Thule', + 'Thunder Bay': 'America/Thunder_Bay', + 'Tijuana': 'America/Tijuana', + 'Toronto': 'America/Toronto', + 'Tortola': 'America/Tortola', + 'Vancouver': 'America/Vancouver', + 'Virgin': 'America/Virgin', + 'Whitehorse': 'America/Whitehorse', + 'Winnipeg': 'America/Winnipeg', + 'Yakutat': 'America/Yakutat', + 'Yellowknife': 'America/Yellowknife' + }, + + 'Antarctica': { + 'Casey': 'Antarctica/Casey', + 'Davis': 'Antarctica/Davis', + 'Dumont d\'Urville': 'Antarctica/DumontDUrville', + 'Macquarie': 'Antarctica/Macquarie', + 'Mawson': 'Antarctica/Mawson', + 'McMurdo': 'Antarctica/McMurdo', + 'Palmer': 'Antarctica/Palmer', + 'Rothera': 'Antarctica/Rothera', + 'South Pole': 'Antarctica/South_Pole', + 'Syowa': 'Antarctica/Syowa', + 'Troll': 'Antarctica/Troll', + 'Vostok': 'Antarctica/Vostok' + }, + + 'Arctic': { + 'Longyearbyen': 'Arctic/Longyearbyen' + }, + + 'Asia': { + 'Aden': 'Asia/Aden', + 'Almaty': 'Asia/Almaty', + 'Amman': 'Asia/Amman', + 'Anadyr': 'Asia/Anadyr', + 'Aqtau': 'Asia/Aqtau', + 'Aqtobe': 'Asia/Aqtobe', + 'Ashgabat': 'Asia/Ashgabat', + 'Ashkhabad': 'Asia/Ashkhabad', + 'Baghdad': 'Asia/Baghdad', + 'Bahrain': 'Asia/Bahrain', + 'Baku': 'Asia/Baku', + 'Bangkok': 'Asia/Bangkok', + 'Beirut': 'Asia/Beirut', + 'Bishkek': 'Asia/Bishkek', + 'Brunei': 'Asia/Brunei', + 'Calcutta': 'Asia/Calcutta', + 'Chita': 'Asia/Chita', + 'Choibalsan': 'Asia/Choibalsan', + 'Chongqing': 'Asia/Chongqing', + 'Colombo': 'Asia/Colombo', + 'Dacca': 'Asia/Dacca', + 'Damascus': 'Asia/Damascus', + 'Dhaka': 'Asia/Dhaka', + 'Dili': 'Asia/Dili', + 'Dubai': 'Asia/Dubai', + 'Dushanbe': 'Asia/Dushanbe', + 'Gaza': 'Asia/Gaza', + 'Harbin': 'Asia/Harbin', + 'Hebron': 'Asia/Hebron', + 'Ho Chi Minh': 'Asia/Ho_Chi_Minh', + 'Hong Kong': 'Asia/Hong_Kong', + 'Hovd': 'Asia/Hovd', + 'Irkutsk': 'Asia/Irkutsk', + 'Istanbul': 'Asia/Istanbul', + 'Jakarta': 'Asia/Jakarta', + 'Jayapura': 'Asia/Jayapura', + 'Jerusalem': 'Asia/Jerusalem', + 'Kabul': 'Asia/Kabul', + 'Kamchatka': 'Asia/Kamchatka', + 'Karachi': 'Asia/Karachi', + 'Kashgar': 'Asia/Kashgar', + 'Kathmandu': 'Asia/Kathmandu', + 'Katmandu': 'Asia/Katmandu', + 'Khandyga': 'Asia/Khandyga', + 'Kolkata': 'Asia/Kolkata', + 'Krasnoyarsk': 'Asia/Krasnoyarsk', + 'Kuala Lumpur': 'Asia/Kuala_Lumpur', + 'Kuching': 'Asia/Kuching', + 'Kuwait': 'Asia/Kuwait', + 'Macao': 'Asia/Macao', + 'Macau': 'Asia/Macau', + 'Magadan': 'Asia/Magadan', + 'Makassar': 'Asia/Makassar', + 'Manila': 'Asia/Manila', + 'Muscat': 'Asia/Muscat', + 'Nicosia': 'Asia/Nicosia', + 'Novokuznetsk': 'Asia/Novokuznetsk', + 'Novosibirsk': 'Asia/Novosibirsk', + 'Omsk': 'Asia/Omsk', + 'Oral': 'Asia/Oral', + 'Phnom Penh': 'Asia/Phnom_Penh', + 'Pontianak': 'Asia/Pontianak', + 'Pyongyang': 'Asia/Pyongyang', + 'Qatar': 'Asia/Qatar', + 'Qyzylorda': 'Asia/Qyzylorda', + 'Rangoon': 'Asia/Rangoon', + 'Riyadh': 'Asia/Riyadh', + 'Saigon': 'Asia/Saigon', + 'Sakhalin': 'Asia/Sakhalin', + 'Samarkand': 'Asia/Samarkand', + 'Seoul': 'Asia/Seoul', + 'Shanghai': 'Asia/Shanghai', + 'Singapore': 'Asia/Singapore', + 'Srednekolymsk': 'Asia/Srednekolymsk', + 'Taipei': 'Asia/Taipei', + 'Tashkent': 'Asia/Tashkent', + 'Tbilisi': 'Asia/Tbilisi', + 'Tehran': 'Asia/Tehran', + 'Tel Aviv': 'Asia/Tel_Aviv', + 'Thimbu': 'Asia/Thimbu', + 'Thimphu': 'Asia/Thimphu', + 'Tokyo': 'Asia/Tokyo', + 'Ujung Pandang': 'Asia/Ujung_Pandang', + 'Ulaanbaatar': 'Asia/Ulaanbaatar', + 'Ulan Bator': 'Asia/Ulan_Bator', + 'Urumqi': 'Asia/Urumqi', + 'Ust-Nera': 'Asia/Ust-Nera', + 'Vientiane': 'Asia/Vientiane', + 'Vladivostok': 'Asia/Vladivostok', + 'Yakutsk': 'Asia/Yakutsk', + 'Yekaterinburg': 'Asia/Yekaterinburg', + 'Yerevan': 'Asia/Yerevan' + }, + + 'Atlantic': { + 'Azores': 'Atlantic/Azores', + 'Bermuda': 'Atlantic/Bermuda', + 'Canary': 'Atlantic/Canary', + 'Cape Verde': 'Atlantic/Cape_Verde', + 'Faeroe': 'Atlantic/Faeroe', + 'Faroe': 'Atlantic/Faroe', + 'Jan Mayen': 'Atlantic/Jan_Mayen', + 'Madeira': 'Atlantic/Madeira', + 'Reykjavik': 'Atlantic/Reykjavik', + 'South Georgia': 'Atlantic/South_Georgia', + 'St. Helena': 'Atlantic/St_Helena', + 'Stanley': 'Atlantic/Stanley' + }, + + 'Australia': { + 'Adelaide': 'Australia/Adelaide', + 'Brisbane': 'Australia/Brisbane', + 'Broken Hill': 'Australia/Broken_Hill', + 'Canberra': 'Australia/Canberra', + 'Currie': 'Australia/Currie', + 'Darwin': 'Australia/Darwin', + 'Eucla': 'Australia/Eucla', + 'Hobart': 'Australia/Hobart', + 'Lindeman': 'Australia/Lindeman', + 'Lord Howe': 'Australia/Lord_Howe', + 'Melbourne': 'Australia/Melbourne', + 'North': 'Australia/North', + 'Perth': 'Australia/Perth', + 'Queensland': 'Australia/Queensland', + 'South': 'Australia/South', + 'Sydney': 'Australia/Sydney', + 'Tasmania': 'Australia/Tasmania', + 'Victoria': 'Australia/Victoria', + 'West': 'Australia/West', + 'Yancowinna': 'Australia/Yancowinna' + }, + + 'Brazil': { + 'Acre': 'Brazil/Acre', + 'Fernando de Noronha': 'Brazil/DeNoronha', + 'East': 'Brazil/East', + 'West': 'Brazil/West' + }, + + 'Canada': { + 'Atlantic': 'Canada/Atlantic', + 'Central': 'Canada/Central', + 'Eastern': 'Canada/Eastern', + 'Mountain': 'Canada/Mountain', + 'Newfoundland': 'Canada/Newfoundland', + 'Pacific': 'Canada/Pacific', + 'Saskatchewan': 'Canada/Saskatchewan', + 'Yukon': 'Canada/Yukon' + }, + + 'Chile': { + 'Continental': 'Chile/Continental', + 'Easter Island': 'Chile/EasterIsland' + }, + + 'Europe': { + 'Amsterdam': 'Europe/Amsterdam', + 'Andorra': 'Europe/Andorra', + 'Athens': 'Europe/Athens', + 'Belfast': 'Europe/Belfast', + 'Belgrade': 'Europe/Belgrade', + 'Berlin': 'Europe/Berlin', + 'Bratislava': 'Europe/Bratislava', + 'Brussels': 'Europe/Brussels', + 'Bucharest': 'Europe/Bucharest', + 'Budapest': 'Europe/Budapest', + 'Busingen': 'Europe/Busingen', + 'Chisinau': 'Europe/Chisinau', + 'Copenhagen': 'Europe/Copenhagen', + 'Dublin': 'Europe/Dublin', + 'Gibraltar': 'Europe/Gibraltar', + 'Guernsey': 'Europe/Guernsey', + 'Helsinki': 'Europe/Helsinki', + 'Isle of Man': 'Europe/Isle_of_Man', + 'Istanbul': 'Europe/Istanbul', + 'Jersey': 'Europe/Jersey', + 'Kaliningrad': 'Europe/Kaliningrad', + 'Kiev': 'Europe/Kiev', + 'Lisbon': 'Europe/Lisbon', + 'Ljubljana': 'Europe/Ljubljana', + 'London': 'Europe/London', + 'Luxembourg': 'Europe/Luxembourg', + 'Madrid': 'Europe/Madrid', + 'Malta': 'Europe/Malta', + 'Mariehamn': 'Europe/Mariehamn', + 'Minsk': 'Europe/Minsk', + 'Monaco': 'Europe/Monaco', + 'Moscow': 'Europe/Moscow', + 'Nicosia': 'Europe/Nicosia', + 'Oslo': 'Europe/Oslo', + 'Paris': 'Europe/Paris', + 'Podgorica': 'Europe/Podgorica', + 'Prague': 'Europe/Prague', + 'Riga': 'Europe/Riga', + 'Rome': 'Europe/Rome', + 'Samara': 'Europe/Samara', + 'San Marino': 'Europe/San_Marino', + 'Sarajevo': 'Europe/Sarajevo', + 'Simferopol': 'Europe/Simferopol', + 'Skopje': 'Europe/Skopje', + 'Sofia': 'Europe/Sofia', + 'Stockholm': 'Europe/Stockholm', + 'Tallinn': 'Europe/Tallinn', + 'Tirane': 'Europe/Tirane', + 'Tiraspol': 'Europe/Tiraspol', + 'Uzhgorod': 'Europe/Uzhgorod', + 'Vaduz': 'Europe/Vaduz', + 'Vatican': 'Europe/Vatican', + 'Vienna': 'Europe/Vienna', + 'Vilnius': 'Europe/Vilnius', + 'Volgograd': 'Europe/Volgograd', + 'Warsaw': 'Europe/Warsaw', + 'Zagreb': 'Europe/Zagreb', + 'Zaporozhye': 'Europe/Zaporozhye', + 'Zurich': 'Europe/Zurich' + }, + + 'GMT': { + 'GMT-14': 'Etc/GMT-14', + 'GMT-13': 'Etc/GMT-13', + 'GMT-12': 'Etc/GMT-12', + 'GMT-11': 'Etc/GMT-11', + 'GMT-10': 'Etc/GMT-10', + 'GMT-9': 'Etc/GMT-9', + 'GMT-8': 'Etc/GMT-8', + 'GMT-7': 'Etc/GMT-7', + 'GMT-6': 'Etc/GMT-6', + 'GMT-5': 'Etc/GMT-5', + 'GMT-4': 'Etc/GMT-4', + 'GMT-3': 'Etc/GMT-3', + 'GMT-2': 'Etc/GMT-2', + 'GMT-1': 'Etc/GMT-1', + 'GMT+0': 'Etc/GMT+0', + 'GMT+1': 'Etc/GMT+1', + 'GMT+2': 'Etc/GMT+2', + 'GMT+3': 'Etc/GMT+3', + 'GMT+4': 'Etc/GMT+4', + 'GMT+5': 'Etc/GMT+5', + 'GMT+6': 'Etc/GMT+6', + 'GMT+7': 'Etc/GMT+7', + 'GMT+8': 'Etc/GMT+8', + 'GMT+9': 'Etc/GMT+9', + 'GMT+10': 'Etc/GMT+10', + 'GMT+11': 'Etc/GMT+11', + 'GMT+12': 'Etc/GMT+12' + }, + + 'Indian': { + 'Antananarivo': 'Indian/Antananarivo', + 'Chagos': 'Indian/Chagos', + 'Christmas': 'Indian/Christmas', + 'Cocos': 'Indian/Cocos', + 'Comoro': 'Indian/Comoro', + 'Kerguelen': 'Indian/Kerguelen', + 'Mahe': 'Indian/Mahe', + 'Maldives': 'Indian/Maldives', + 'Mauritius': 'Indian/Mauritius', + 'Mayotte': 'Indian/Mayotte', + 'Reunion': 'Indian/Reunion' + }, + + 'Mexico': { + 'Baja Norte': 'Mexico/BajaNorte', + 'Baja Sur': 'Mexico/BajaSur', + 'General': 'Mexico/General' + }, + + 'Pacific': { + 'Apia': 'Pacific/Apia', + 'Auckland': 'Pacific/Auckland', + 'Bougainville': 'Pacific/Bougainville', + 'Chatham': 'Pacific/Chatham', + 'Chuuk': 'Pacific/Chuuk', + 'Easter': 'Pacific/Easter', + 'Efate': 'Pacific/Efate', + 'Enderbury': 'Pacific/Enderbury', + 'Fakaofo': 'Pacific/Fakaofo', + 'Fiji': 'Pacific/Fiji', + 'Funafuti': 'Pacific/Funafuti', + 'Galapagos': 'Pacific/Galapagos', + 'Gambier': 'Pacific/Gambier', + 'Guadalcanal': 'Pacific/Guadalcanal', + 'Guam': 'Pacific/Guam', + 'Honolulu': 'Pacific/Honolulu', + 'Johnston': 'Pacific/Johnston', + 'Kiritimati': 'Pacific/Kiritimati', + 'Kosrae': 'Pacific/Kosrae', + 'Kwajalein': 'Pacific/Kwajalein', + 'Majuro': 'Pacific/Majuro', + 'Marquesas': 'Pacific/Marquesas', + 'Midway': 'Pacific/Midway', + 'Nauru': 'Pacific/Nauru', + 'Niue': 'Pacific/Niue', + 'Norfolk': 'Pacific/Norfolk', + 'Noumea': 'Pacific/Noumea', + 'Pago Pago': 'Pacific/Pago_Pago', + 'Palau': 'Pacific/Palau', + 'Pitcairn': 'Pacific/Pitcairn', + 'Pohnpei': 'Pacific/Pohnpei', + 'Ponape': 'Pacific/Ponape', + 'Port Moresby': 'Pacific/Port_Moresby', + 'Rarotonga': 'Pacific/Rarotonga', + 'Saipan': 'Pacific/Saipan', + 'Samoa': 'Pacific/Samoa', + 'Tahiti': 'Pacific/Tahiti', + 'Tarawa': 'Pacific/Tarawa', + 'Tongatapu': 'Pacific/Tongatapu', + 'Truk': 'Pacific/Truk', + 'Wake': 'Pacific/Wake', + 'Wallis': 'Pacific/Wallis', + 'Yap': 'Pacific/Yap' + } + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.html new file mode 100644 index 0000000000..74fbe969c5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.html @@ -0,0 +1,28 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.spec.ts new file mode 100644 index 0000000000..80a1d4482e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UsernameFieldComponent } from './username-field.component'; + +describe('UsernameFieldComponent', () => { + let component: UsernameFieldComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [UsernameFieldComponent] + }); + fixture = TestBed.createComponent(UsernameFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.ts new file mode 100644 index 0000000000..a7272add75 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/username-field/username-field.component.ts @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; + +@Component({ + selector: 'guac-username-field', + templateUrl: './username-field.component.html', + encapsulation: ViewEncapsulation.None +}) +export class UsernameFieldComponent extends FormFieldBaseComponent implements OnChanges { + + /** + * The ID value that should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + @Input() fieldId?: string; + + /** + * Apply disabled state to typed form control. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['disabled']) { + + const disabled: boolean = changes['disabled'].currentValue; + this.setDisabledState(this.control, disabled); + } + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-date.directive.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-date.directive.ts new file mode 100644 index 0000000000..e9945b6468 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-date.directive.ts @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { formatDate } from '@angular/common'; + +/** + * A directive which modifies the parsing and formatting of a form control value when used + * on an HTML5 date input field, relaxing the otherwise strict parsing and + * validation behavior. The behavior of this directive for other input elements + * is undefined. + */ +@Directive({ + selector: '[guacLenientDate]', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => GuacLenientDateDirective), + multi: true + } + ] +}) +export class GuacLenientDateDirective implements ControlValueAccessor { + + /** + * Callback function that has to be called when the control's value changes in the UI. + * + * @param value + * The new value of the control. + */ + private onChange!: (value: any) => void; + + /** + * Callback function that has to be called when the control's value changes in the UI. + */ + private onTouched!: () => void; + + constructor(private renderer: Renderer2, private el: ElementRef) { + } + + /** + * Called by the forms API to write to the view when programmatic changes from model to view are requested. + * Formats the date value as "yyyy-MM-dd" and sets the value of the input element. + * + * @param value + * The new value for the input element. + */ + writeValue(value: any): void { + const formattedValue = value ? this.format(value) : ''; + this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue); + } + + registerOnChange(fn: any): void { + this.onChange = fn; + } + + registerOnTouched(fn: any): void { + this.onTouched = fn; + } + + setDisabledState(isDisabled: boolean): void { + this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled); + } + + /** + * Form control will be updated when the input loses focus. + */ + @HostListener('blur', ['$event.target.value']) + onInput(value: string): void { + const parsedValue = this.parse(value); + this.onChange(parsedValue); + this.onTouched(); + } + + /** + * Parse date strings leniently. + * + * @param viewValue + * The date string to parse. + */ + parse(viewValue: string): Date | null { + + // If blank, return null + if (!viewValue) + return null; + + // Match basic date pattern + const match = /([0-9]*)(?:-([0-9]*)(?:-([0-9]*))?)?/.exec(viewValue); + if (!match) + return null; + + // Determine year, month, and day based on pattern + const year = parseInt(match[1] || '0') || new Date().getFullYear(); + const month = parseInt(match[2] || '0') || 1; + const day = parseInt(match[3] || '0') || 1; + + // Convert to Date object + const parsedDate = new Date(Date.UTC(year, month - 1, day)); + if (isNaN(parsedDate.getTime())) + return null; + + return parsedDate; + + } + + /** + * Format date strings as "yyyy-MM-dd". + * + * @param modelValue + * The date to format. + */ + format(modelValue: Date | null): string { + return modelValue ? formatDate(modelValue, 'yyyy-MM-dd', 'en-US', 'UTC') : ''; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-time.directive.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-time.directive.ts new file mode 100644 index 0000000000..3df56436f0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/directives/guac-lenient-time.directive.ts @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, forwardRef, HostListener, Renderer2 } from '@angular/core'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { formatDate } from '@angular/common'; + +/** + * A directive which modifies the parsing and formatting of a form control value when used + * on an HTML5 date input field, relaxing the otherwise strict parsing and + * validation behavior. The behavior of this directive for other input elements + * is undefined. + */ +@Directive({ + selector: '[guacLenientTime]', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => GuacLenientTimeDirective), + multi: true + } + ] +}) +export class GuacLenientTimeDirective implements ControlValueAccessor { + + /** + * Callback function that has to be called when the control's value changes in the UI. + * + * @param value + * The new value of the control. + */ + private onChange!: (value: any) => void; + + /** + * Callback function that has to be called when the control's value changes in the UI. + */ + private onTouched!: () => void; + + constructor(private renderer: Renderer2, private el: ElementRef) { + } + + /** + * Called by the forms API to write to the view when programmatic changes from model to view are requested. + * Formats the date value as "yyyy-MM-dd" and sets the value of the input element. + * + * @param value + * The new value for the input element. + */ + writeValue(value: any): void { + const formattedValue = value ? this.format(value) : ''; + this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue); + } + + registerOnChange(fn: any): void { + this.onChange = fn; + } + + registerOnTouched(fn: any): void { + this.onTouched = fn; + } + + setDisabledState(isDisabled: boolean): void { + this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled); + } + + /** + * Form control will be updated when the input loses focus. + */ + @HostListener('blur', ['$event.target.value']) + onInput(value: string): void { + const parsedValue = this.parse(value); + this.onChange(parsedValue); + this.onTouched(); + } + + /** + * Parse time strings leniently. + * + * @param viewValue + * The time string to parse. + */ + parse(viewValue: string): Date | null { + + // If blank, return null + if (!viewValue) + return null; + + // Match basic time pattern + const match = /([0-9]*)(?::([0-9]*)(?::([0-9]*))?)?(?:\s*(a|p))?/.exec(viewValue.toLowerCase()); + if (!match) + return null; + + // Determine hour, minute, and second based on pattern + let hour = parseInt(match[1] || '0'); + let minute = parseInt(match[2] || '0'); + let second = parseInt(match[3] || '0'); + + // Handle AM/PM + if (match[4]) { + + // Interpret 12 AM as 00:00 and 12 PM as 12:00 + if (hour === 12) + hour = 0; + + // Increment hour to evening if PM + if (match[4] === 'p') + hour += 12; + + } + + // Wrap seconds and minutes into minutes and hours + minute += second / 60; + second %= 60; + hour += minute / 60; + minute %= 60; + + // Constrain hours to 0 - 23 + hour %= 24; + + // Convert to Date object + const parsedDate = new Date(Date.UTC(1970, 0, 1, hour, minute, second)); + if (isNaN(parsedDate.getTime())) + return null; + + return parsedDate; + + } + + /** + * Format date strings as "yyyy-MM-dd". + * + * @param modelValue + * The date to format. + */ + format(modelValue: Date | null): string { + return modelValue ? formatDate(modelValue, 'HH:mm:ss', 'en-US', 'UTC') : ''; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/form.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/form.module.ts new file mode 100644 index 0000000000..b697fe8373 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/form.module.ts @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TimeZoneFieldComponent } from './components/time-zone-field/time-zone-field.component'; +import { ElementModule } from 'guacamole-frontend-lib'; +import { FormFieldComponent } from './components/form-field/form-field.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { FormComponent } from './components/form/form.component'; +import { HttpClientModule } from '@angular/common/http'; +import { CheckboxFieldComponent } from './components/checkbox-field/checkbox-field.component'; +import { DateFieldComponent } from './components/date-field/date-field.component'; +import { GuacLenientDateDirective } from './directives/guac-lenient-date.directive'; +import { LanguageFieldComponent } from './components/language-field/language-field.component'; +import { NumberFieldComponent } from './components/number-field/number-field.component'; +import { PasswordFieldComponent } from './components/password-field/password-field.component'; +import { RedirectFieldComponent } from './components/redirect-field/redirect-field.component'; +import { SelectFieldComponent } from './components/select-field/select-field.component'; +import { TextFieldComponent } from './components/text-field/text-field.component'; +import { TextAreaFieldComponent } from './components/text-area-field/text-area-field.component'; +import { TimeFieldComponent } from './components/time-field/time-field.component'; +import { GuacLenientTimeDirective } from './directives/guac-lenient-time.directive'; +import { EmailFieldComponent } from './components/email-field/email-field.component'; +import { UsernameFieldComponent } from './components/username-field/username-field.component'; +import { + TerminalColorSchemeFieldComponent +} from './components/terminal-color-scheme-field/terminal-color-scheme-field.component'; +import { GuacInputColorComponent } from './components/guac-input-color/guac-input-color.component'; +import { TranslocoModule } from '@ngneat/transloco'; + +/** + * Module for displaying dynamic forms. + */ +@NgModule({ + declarations: [ + GuacLenientDateDirective, + GuacLenientTimeDirective, + TimeZoneFieldComponent, + FormFieldComponent, + FormComponent, + CheckboxFieldComponent, + DateFieldComponent, + LanguageFieldComponent, + NumberFieldComponent, + PasswordFieldComponent, + RedirectFieldComponent, + SelectFieldComponent, + TextFieldComponent, + TextAreaFieldComponent, + TimeFieldComponent, + EmailFieldComponent, + UsernameFieldComponent, + TerminalColorSchemeFieldComponent, + GuacInputColorComponent + ], + imports: [ + CommonModule, + HttpClientModule, + ElementModule, + ReactiveFormsModule, + TranslocoModule + ], + exports: [ + TimeZoneFieldComponent, + FormFieldComponent, + FormComponent, + CheckboxFieldComponent, + DateFieldComponent, + GuacLenientDateDirective, + LanguageFieldComponent, + NumberFieldComponent, + PasswordFieldComponent, + RedirectFieldComponent, + SelectFieldComponent, + TextFieldComponent, + TextAreaFieldComponent, + TimeFieldComponent, + EmailFieldComponent, + UsernameFieldComponent, + TerminalColorSchemeFieldComponent, + GuacInputColorComponent + ] +}) +export class FormModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts new file mode 100644 index 0000000000..5612aeba1d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { ColorPickerService } from './color-picker.service'; + +describe('ColorPickerService', () => { + let service: ColorPickerService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ColorPickerService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts new file mode 100644 index 0000000000..ee7e13cb26 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts @@ -0,0 +1,298 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import Pickr from '@simonwep/pickr'; +import { DOCUMENT } from '@angular/common'; +import { TranslocoService } from '@ngneat/transloco'; +import { forkJoin, take } from 'rxjs'; +import HSVaColor = Pickr.HSVaColor; + +/** + * A service for prompting the user to choose a color using the "Pickr" color + * picker. As the Pickr color picker might not be available if the JavaScript + * features it requires are not supported by the browser (Internet Explorer), + * the isAvailable() function should be used to test for usability. + */ +@Injectable({ + providedIn: 'root' +}) +export class ColorPickerService { + + /** + * A singleton instance of the "Pickr" color picker, shared by all users of + * this service. Pickr does not initialize synchronously, nor is it + * supported by all browsers. If Pickr is not yet initialized, or is + * unsupported, this will be null. + */ + pickr?: Pickr = undefined; + + /** + * Whether Pickr has completed initialization. + */ + public pickrInitComplete = false; + + /** + * The HTML element to provide to Pickr as the root element. + */ + pickerContainer: HTMLDivElement; + + /** + * A Promise which represents an active request for the + * user to choose a color. The promise will + * be resolved with the chosen color once a color is chosen, and rejected + * if the request is cancelled or Pickr is not available. If no request is + * active, this will be undefined. + */ + activeRequest?: Promise = undefined; + + /** + * Resolve function of the {@link activeRequest} promise. + */ + private activeRequestResolve?: (value: string) => void = undefined; + + /** + * Reject function of the {@link activeRequest} promise. + */ + private activeRequestReject?: (reason?: any) => void = undefined; + + private saveString?: string; + private cancelString?: string; + + constructor(@Inject(DOCUMENT) private document: Document, private translocoService: TranslocoService) { + + // Create container element for Pickr + this.pickerContainer = this.document.createElement('div'); + this.pickerContainer.className = 'shared-color-picker'; + + // Wait for translation strings + const saveString = this.translocoService.selectTranslate('APP.ACTION_SAVE').pipe(take(1)); + const cancelString = this.translocoService.selectTranslate('APP.ACTION_CANCEL').pipe(take(1)); + + forkJoin({ + saveString, + cancelString + }).subscribe(({saveString, cancelString}) => { + this.saveString = saveString; + this.cancelString = cancelString; + + this.createPickr(); + this.createPickrPromise(); + }); + + } + + private createPickrPromise(): void { + this.pickrPromise = new Promise((resolve, reject) => { + + // Resolve promise when Pickr has completed initialization + if (this.pickrInitComplete) + resolve(); + else if (this.pickr) + this.pickr.on('init', resolve); + + // Reject promise if Pickr cannot be used at all + else + reject(); + }); + } + + /** + * Resolves the current active request with the given color value. If no + * color value is provided, the active request is rejected. If no request + * is active, this function has no effect. + * + * @param color + * The color value to resolve the active request with. + */ + completeActiveRequest(color?: string): void { + if (this.activeRequest) { + + // Hide color picker, if shown + this.pickr?.hide(); + + // Resolve/reject active request depending on value provided + if (color) + this.activeRequestResolve?.(color); + else + this.activeRequestReject?.(); + + // No active request + this.activeRequest = undefined; + + } + } + + createPickr(): void { + try { + + this.pickr = Pickr.create({ + + // Bind color picker to the container element + el: this.pickerContainer, + + // Wrap color picker dialog in Guacamole-specific class for + // sake of additional styling + appClass: 'guac-input-color-picker', + + default: '#000000', + + // Display color details as hex + defaultRepresentation: 'HEXA', + + // Use "monolith" theme, as a nice balance between "nano" (does + // not work in Internet Explorer) and "classic" (too big) + theme: 'monolith', + + // Leverage the container element as the button which shows the + // picker, relying on our own styling for that button + useAsButton: true, + + // Do not include opacity controls + lockOpacity: true, + + // Include a selection of palette entries for convenience and + // reference + swatches: [], + + components: { + + // Include hue and color preview controls + preview: true, + hue: true, + + // Display only a text color input field and the save and + // cancel buttons (no clear button) + interaction: { + input: true, + save: true, + cancel: true + } + + }, + + // Assign translated strings to button text + i18n: { + 'btn:save': this.saveString, + 'btn:cancel': this.cancelString + } + + }); + + // Hide color picker after user clicks "cancel" + this.pickr.on('cancel', () => { + this.completeActiveRequest(); + }); + + // Keep model in sync with changes to the color picker + this.pickr.on('save', (color: HSVaColor | null) => { + const colorString = color ? color.toHEXA().toString() : undefined; + this.completeActiveRequest(colorString); + this.activeRequest = undefined; + }); + + // Keep color picker in sync with changes to the model + this.pickr.on('init', () => { + this.pickrInitComplete = true; + }); + } catch (e) { + // If the "Pickr" color picker cannot be loaded (Internet Explorer), + // the available flag will remain set to false + } + } + + /** + * Promise which is resolved when Pickr initialization has completed + * and rejected if Pickr cannot be used. + */ + pickrPromise!: Promise; + + /** + * Returns whether the underlying color picker (Pickr) can be used by + * calling selectColor(). If the browser cannot support the color + * picker, false is returned. + * + * @returns + * true if the underlying color picker can be used by calling + * selectColor(), false otherwise. + */ + isAvailable(): boolean { + return this.pickrInitComplete; + } + + /** + * Prompts the user to choose a color, returning the color chosen via a + * Promise. + * + * @param element + * The element that the user interacted with to indicate their + * desire to choose a color. + * + * @param current + * The color that should be selected by default, in standard + * 6-digit hexadecimal RGB format, including "#" prefix. + * + * @param palette + * An array of color choices which should be exposed to the user + * within the color chooser for convenience. Each color must be in + * standard 6-digit hexadecimal RGB format, including "#" prefix. + * + * @returns + * A Promise which is resolved with the color chosen by the user, + * in standard 6-digit hexadecimal RGB format with "#" prefix, and + * rejected if the selection operation was cancelled or the color + * picker cannot be used. + */ + selectColor(element: Element, current: string | null, palette: string[] = []): Promise { + + const newRequest = new Promise((resolve, reject) => { + this.activeRequestResolve = resolve; + this.activeRequestReject = reject; + }); + + // Show picker once Pickr is ready for use + return this.pickrPromise.then(() => { + if (!this.pickr) { + return Promise.reject(); + } + + // Cancel any active request + this.completeActiveRequest(); + + // Reset state of color picker to provided parameters. Use silent=true + // to avoid triggering the "save" event prematurely. + this.pickr.setColor(current, true); + this.pickr.applyColor(true); + element.appendChild(this.pickerContainer); + + // Replace all color swatches with the palette of colors given + while (this.pickr.removeSwatch(0)) { + } + for (let color of palette) { + this.pickr.addSwatch(color); + } + + // Show color picker and wait for user to complete selection + this.activeRequest = newRequest; + this.pickr.show(); + + return newRequest; + }); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.spec.ts new file mode 100644 index 0000000000..01001df03c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.spec.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { FormService } from './form.service'; + +describe('FormService', () => { + let service: FormService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(FormService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts new file mode 100644 index 0000000000..d9bdb3fc00 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts @@ -0,0 +1,424 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + ChangeDetectorRef, + ComponentRef, + Injectable, + Renderer2, + RendererFactory2, + Type, + ViewContainerRef +} from '@angular/core'; +import { Form } from '../../rest/types/Form'; +import { Field } from '../../rest/types/Field'; +import { FormFieldComponent } from '../components/form-field/form-field.component'; +import { TimeZoneFieldComponent } from '../components/time-zone-field/time-zone-field.component'; +import { FormFieldBaseComponent } from '../components/form-field-base/form-field-base.component'; +import { FieldType } from '../types/FieldType'; +import { CheckboxFieldComponent } from '../components/checkbox-field/checkbox-field.component'; +import { DateFieldComponent } from '../components/date-field/date-field.component'; +import { LanguageFieldComponent } from '../components/language-field/language-field.component'; +import { NumberFieldComponent } from '../components/number-field/number-field.component'; +import { PasswordFieldComponent } from '../components/password-field/password-field.component'; +import { RedirectFieldComponent } from '../components/redirect-field/redirect-field.component'; +import { SelectFieldComponent } from '../components/select-field/select-field.component'; +import { TextFieldComponent } from '../components/text-field/text-field.component'; +import { TextAreaFieldComponent } from '../components/text-area-field/text-area-field.component'; +import { TimeFieldComponent } from '../components/time-field/time-field.component'; +import { EmailFieldComponent } from '../components/email-field/email-field.component'; +import { UsernameFieldComponent } from '../components/username-field/username-field.component'; +import { + TerminalColorSchemeFieldComponent +} from '../components/terminal-color-scheme-field/terminal-color-scheme-field.component'; +import { FormControl, FormGroup } from '@angular/forms'; +import { isArray } from '../../util/is-array'; + +/** + * A service for maintaining form-related metadata and linking that data to + * corresponding controllers and templates. + * + * TODO: move to shared library + */ +@Injectable({ + providedIn: 'root' +}) +export class FormService { + + /** + * Reference to the view container that should be used to create the field component. + */ + private viewContainer: ViewContainerRef | undefined; + + private cdr: ChangeDetectorRef | undefined; + + private renderer: Renderer2; + + constructor(rendererFactory: RendererFactory2) { + this.renderer = rendererFactory.createRenderer(null, null); + } + + /** + * Registers a new field type under the given name. + * + * @param fieldTypeName + * The name which uniquely identifies the field type being registered. + * + * @param fieldType + * The field type definition to associate with the given name. + */ + registerFieldType(fieldTypeName: string, fieldType: FieldType): void { + + // Store field type + this.fieldTypes[fieldTypeName] = fieldType; + + } + + /** + * Given form content and an arbitrary prefix, returns a corresponding + * CSS class object as would be provided to the ngClass directive that + * assigns a content-specific CSS class based on the prefix and + * form/field name. Generated class names follow the lowercase with + * dashes naming convention. For example, if the prefix is "field-" and + * the provided content is a field with the name "Swap red/blue", the + * object { 'field-swap-red-blue' : true } would be returned. + * + * @param prefix + * The arbitrary prefix to prepend to the name of the generated CSS + * class. + * + * @param content + * The form or field whose name should be used to produce the CSS + * class name. + * + * @param object + * The optional base ngClass object that should be used to provide + * additional name/value pairs within the returned object. + * + * @return + * The ngClass object based on the provided object and defining a + * CSS class name for the given content. + */ + getClasses(prefix: string, content?: Form | Field, object: Record = {}): Record { + + // Perform no transformation if there is no content or + // corresponding name + if (!content || !content.name) + return object; + + // Transform content name and prefix into lowercase-with-dashes + // CSS class name + const className = prefix + content.name.replace(/[^a-zA-Z0-9]+/g, '-').toLowerCase(); + + // Add CSS class name to provided base object (without touching + // base object) + const classes = {...object}; + classes[className] = true; + return classes; + + } + + /** + * Creates a component for the field associated with the given name to the given + * scope, producing a distinct and independent DOM Element which functions + * as an instance of that field. The scope object provided must include at + * least the following properties since they are copied to the created + * component: + * + * namespace: + * A String which defines the unique namespace associated the + * translation strings used by the form using a field of this type. + * + * fieldId: + * A String value which is reasonably likely to be unique and may + * be used to associate the main element of the field with its + * label. + * + * field: + * The Field object that is being rendered, representing a field of + * this type. + * + * model: + * The current String value of the field, if any. + * + * disabled: + * A boolean value which is true if the field should be disabled. + * If false or undefined, the field should be enabled. + * + * focused: + * A boolean value which is true if the field should be focused. + * + * + * @param fieldContainer + * The DOM Element to which the field component should be added as a child. + * + * @param fieldType + * The name of the field type defining the nature of the element to be + * created. + * + * @param scope + * The scope from which the properties of the field will be copied. + * + * @return + * A Promise which resolves to the compiled Element. If an error occurs + * while retrieving the field type, this Promise will be rejected. + */ + insertFieldElement(fieldContainer: Element, fieldType: string, scope: FormFieldComponent): Promise> { + // TODO: Implement + return new Promise((resolve, reject) => { + + // Ensure field type is defined + const componentToInject: Type = this.fieldTypes[fieldType].component; + if (!(componentToInject && this.viewContainer)) { + reject(); + return; + } + + const componentRef = this.insertFieldElementInternal(componentToInject, fieldContainer, scope); + + if (!componentRef) { + reject(); + return; + } + + this.cdr?.detectChanges(); + resolve(componentRef); + + // if (!newInstance && this.injectedComponentInstance) { + // this.injectedComponentInstance.destroy(); + // } + + }); + } + + /** + * + * @param componentType + * @param fieldContainer + * @param scope + * @private + */ + private insertFieldElementInternal(componentType: Type, fieldContainer: Element, scope: FormFieldComponent): ComponentRef | null { + + if (!this.viewContainer) { + return null; + } + + // Clear the container first + this.viewContainer.clear(); + + // Create a component using the factory and add it to the container + const componentRef = this.viewContainer.createComponent(componentType); + + // Copy properties from scope to the component instance + componentRef.instance.namespace = scope.namespace; + componentRef.instance.field = scope.field; + componentRef.instance.control = scope.control; + componentRef.instance.disabled = scope.disabled; + componentRef.instance.focused = scope.focused; + componentRef.instance.fieldId = scope.fieldId; + // TODO: Copy more properties from scope to componentRef.instance + + // Get the native element of the created component + const nativeElement = componentRef.location.nativeElement; + + // Insert the created component after the target element + this.renderer.appendChild(fieldContainer, nativeElement) + + return componentRef; + } + + setViewContainer(viewContainer: ViewContainerRef) { + this.viewContainer = viewContainer; + } + + setChangeDetectorRef(cdr: ChangeDetectorRef) { + this.cdr = cdr; + } + + /** + * Creates a FormGroup object based on the given forms. + * The FormGroup object will contain a FormControl for each field in each form. + * The name of each FormControl will be the name of the corresponding field. + * + * @param forms + * The forms to be included in the form group. + */ + getFormGroup(forms: Form[]): FormGroup { + + const formGroup = new FormGroup({}); + + for (let i = 0; i < forms.length; i++) { + let form = forms[i]; + + for (let field of form.fields) { + formGroup.addControl(field.name, new FormControl('')); + } + + } + + return formGroup; + + } + + /** + * TODO + * @param content + */ + asFormArray(content?: Form[] | Form | Field[] | Field | null): Form[] { + // If no content provided, there are no forms + if (!content) { + return []; + } + + // Ensure content is an array + if (!isArray(content)) + content = [content] as Form[] | Field[]; + + // If content is an array of fields, convert to an array of forms + if (this.isFieldArray(content)) { + content = [{ + fields: content + }]; + } + + // Content is now an array of forms + return content; + + } + + /** + * Determines whether the given object is an array of fields. + * + * @param obj + * The object to test. + * + * @returns + * true if the given object appears to be an array of + * fields, false otherwise. + */ + isFieldArray(obj: Form[] | Field[]): obj is Field[] { + return !!obj.length && !this.isForm(obj[0]); + } + + /** + * Determines whether the given object is a form, under the + * assumption that the object is either a form or a field. + * + * @param obj + * The object to test. + * + * @returns + * true if the given object appears to be a form, false + * otherwise. + */ + isForm(obj: Form | Field): obj is Form { + return 'name' in obj && 'fields' in obj; + } + + /** + * Map of all registered field type definitions by name. + */ + fieldTypes: Record = { + + /** + * Text field type. + */ + [Field.Type.TEXT]: {component: TextFieldComponent}, + + /** + * Email address field type. + */ + [Field.Type.EMAIL]: {component: EmailFieldComponent}, + + /** + * Numeric field type. + */ + [Field.Type.NUMERIC]: {component: NumberFieldComponent}, + + /** + * Boolean field type. + */ + [Field.Type.BOOLEAN]: {component: CheckboxFieldComponent}, + + /** + * Username field type. Identical in principle to a text field, but may + * have different semantics. + */ + [Field.Type.USERNAME]: {component: UsernameFieldComponent}, + + /** + * Password field type. Similar to a text field, but the contents of + * the field are masked. + */ + [Field.Type.PASSWORD]: {component: PasswordFieldComponent}, + + /** + * Enumerated field type. The user is presented a finite list of values + * to choose from. + */ + [Field.Type.ENUM]: {component: SelectFieldComponent}, + + /** + * Multiline field type. The user may enter multiple lines of text. + */ + [Field.Type.MULTILINE]: {component: TextAreaFieldComponent}, + + /** + * Field type which allows selection of languages. The languages + * displayed are the set of languages supported by the Guacamole web + * application. Legal values are valid language IDs, as dictated by + * the filenames of Guacamole's available translations. + */ + [Field.Type.LANGUAGE]: {component: LanguageFieldComponent}, + + /** + * Field type which allows selection of time zones. + */ + [Field.Type.TIMEZONE]: {component: TimeZoneFieldComponent}, + + /** + * Field type which allows selection of individual dates. + */ + [Field.Type.DATE]: {component: DateFieldComponent}, + + /** + * Field type which allows selection of times of day. + */ + [Field.Type.TIME]: {component: TimeFieldComponent}, + + /** + * Field type which allows selection of color schemes accepted by the + * Guacamole server terminal emulator and protocols which leverage it. + */ + [Field.Type.TERMINAL_COLOR_SCHEME]: {component: TerminalColorSchemeFieldComponent}, + + /** + * Field type that supports redirecting the client browser to another + * URL. + */ + [Field.Type.REDIRECT]: {component: RedirectFieldComponent}, + + /** + * Field type that is used to extract a query parameter from the URL. + * No input is presented to the user. + */ + [Field.Type.QUERY_PARAMETER]: {component: undefined as any} + }; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form-field.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form-field.css new file mode 100644 index 0000000000..168449b97c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form-field.css @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* Keep toggle-password icon on same line */ +.form-field .password-field { + white-space: nowrap; +} + +/* Generic 1x1em icon/button */ +.form-field .password-field .icon.toggle-password { + + display: inline-block; + opacity: 0.5; + cursor: default; + + background-repeat: no-repeat; + background-size: 1em; + width: 1em; + height: 1em; + +} + +/* Icon for unmasking passwords */ +.form-field .password-field input[type=password] ~ .icon.toggle-password { + background-image: url('^images/action-icons/guac-show-pass.svg'); +} + +/* Icon for masking passwords */ +.form-field .password-field input[type=text] ~ .icon.toggle-password { + background-image: url('^images/action-icons/guac-hide-pass.svg'); +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form.css new file mode 100644 index 0000000000..963d31c1c7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/form.css @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.form table.fields th { + text-align: left; + font-weight: normal; + padding-right: 1em; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/redirect-field.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/redirect-field.css new file mode 100644 index 0000000000..8df06c66ea --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/redirect-field.css @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.redirect-field-container { + height: 100%; + width: 100%; + position: fixed; + left: 0; + top: 0; + display: table; + background: white; +} + +.redirect-field { + width: 100%; + display: table-cell; + vertical-align: middle; + text-align: center; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/terminal-color-scheme-field.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/terminal-color-scheme-field.css new file mode 100644 index 0000000000..f8de926427 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/styles/terminal-color-scheme-field.css @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.terminal-color-scheme-field { + max-width: 320px; +} + +.terminal-color-scheme-field select { + width: 100%; +} + +.terminal-color-scheme-field .custom-color-scheme { + background: #EEE; + padding: 0.5em; + border: 1px solid silver; + border-spacing: 0; + margin-top: -2px; + width: 100%; +} + +.terminal-color-scheme-field .custom-color-scheme-section { + display: -ms-flexbox; + display: -moz-box; + display: -webkit-box; + display: -webkit-flex; + display: flex; +} + +.terminal-color-scheme-field .guac-input-color { + + display: block; + margin: 2px; + width: 1.5em; + height: 1.5em; + min-width: 1.25em; + border-radius: 0.15em; + line-height: 1.5em; + text-align: center; + font-size: 0.75em; + cursor: pointer; + color: black; + + -ms-flex: 1; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + +} + +.terminal-color-scheme-field .guac-input-color .color-picker.read-only { + cursor: not-allowed; +} + +.terminal-color-scheme-field .guac-input-color .color-picker.dark { + color: white; +} + +.terminal-color-scheme-field .palette .guac-input-color .color-picker { + font-weight: bold; +} + +/* Hide palette numbers unless color scheme details are visible */ +.terminal-color-scheme-field.custom-color-scheme-details-hidden .custom-color-scheme .palette .guac-input-color .color-picker { + color: transparent; +} + +/* + * Custom color scheme details header + */ + +.terminal-color-scheme-field .custom-color-scheme-details-header { + font-size: 0.8em; + margin: 0.5em 0; + padding: 0; +} + +.terminal-color-scheme-field .custom-color-scheme-details-header::before { + content: '▸ '; +} + +.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-details-header::before { + content: '▾ '; +} + +/* + * Details show/hide link + */ + +/* Render show/hide as a link */ +.terminal-color-scheme-field .custom-color-scheme-hide-details, +.terminal-color-scheme-field .custom-color-scheme-show-details { + color: blue; + text-decoration: underline; + cursor: pointer; + margin: 0 0.25em; + font-weight: normal; +} + +.terminal-color-scheme-field .custom-color-scheme-hide-details { + display: none; +} + +.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-hide-details { + display: inline; +} + +.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-show-details { + display: none; +} + +/* + * Color scheme details + */ + +.terminal-color-scheme-field .custom-color-scheme-details { + display: none; +} + +.terminal-color-scheme-field.custom-color-scheme-details-visible .custom-color-scheme-details { + display: block; + width: 100%; + margin: 0.5em 0; +} + +/* + * Color picker + */ + +/* Increase width of color picker to allow two even rows of eight color + * swatches */ +.guac-input-color-picker[data-theme="monolith"] { + width: 16.25em; +} + +/* Remove Guacamole-specific styles inherited from the generic button rules */ +.guac-input-color-picker[data-theme="monolith"] button { + min-width: 0; + padding: 0; + margin: 0; + box-shadow: none; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts new file mode 100644 index 0000000000..168435c02b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ColorScheme } from "./ColorScheme"; + +describe('ColorScheme', () => { + + let colorScheme: ColorScheme; + + beforeEach(() => { + colorScheme = new ColorScheme(); + }); + + it('should create an instance', () => { + expect(colorScheme).toBeTruthy(); + }); + + it('convert hex to x11 and back', () => { + let hex = '#A01212'; + let x11 = colorScheme.fromHexColor(hex); + + expect(x11).toBe('rgb:A0/12/12'); + + let hex2 = colorScheme.toHexColor(x11 as string); + expect(hex2).toEqual(hex); + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts new file mode 100644 index 0000000000..98632cc96d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts @@ -0,0 +1,938 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import isEqual from 'lodash/isEqual'; +import isUndefined from 'lodash/isUndefined'; + +/** + * Intermediate representation of a custom color scheme which can be + * converted to the color scheme format used by Guacamole's terminal + * emulator. All colors must be represented in the six-digit hexadecimal + * RGB notation used by HTML ("#000000" for black, etc.). + */ +export class ColorScheme { + + /** + * The terminal background color. This will be the default foreground + * color of the Guacamole terminal emulator ("#000000") by default. + */ + background: string; + + /** + * The terminal foreground color. This will be the default foreground + * color of the Guacamole terminal emulator ("#999999") by default. + */ + foreground: string; + + /** + * The terminal color palette. Default values are provided for the + * normal 16 terminal colors using the default values of the Guacamole + * terminal emulator, however the terminal emulator and this + * representation support up to 256 colors. + */ + colors: string[]; + + /** + * The string which was parsed to produce this ColorScheme instance, if + * ColorScheme.fromString() was used to produce this ColorScheme. + * + * @private + */ + _originalString?: string; + + /** + * Creates a new ColorScheme. + * + * @param template + * The object whose properties should be copied within the new + * ColorScheme. + */ + constructor(template: Partial = {}) { + this.background = template.background || '#000000'; + this.foreground = template.foreground || '#999999'; + this.colors = template.colors || [ + + // Normal colors + '#000000', // Black + '#993E3E', // Red + '#3E993E', // Green + '#99993E', // Brown + '#3E3E99', // Blue + '#993E99', // Magenta + '#3E9999', // Cyan + '#999999', // White + + // Intense colors + '#3E3E3E', // Black + '#FF6767', // Red + '#67FF67', // Green + '#FFFF67', // Brown + '#6767FF', // Blue + '#FF67FF', // Magenta + '#67FFFF', // Cyan + '#FFFFFF' // White + + ]; + + this._originalString = template._originalString; + + } + + /** + * Given a color string in the standard 6-digit hexadecimal RGB format, + * returns a X11 color spec which represents the same color. + * + * @param color + * The hexadecimal color string to convert. + * + * @returns + * The X11 color spec representing the same color as the given + * hexadecimal string, or undefined if the given string is not a valid + * 6-digit hexadecimal RGB color. + */ + fromHexColor(color: string): string | undefined { + + const groups = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/.exec(color); + if (!groups) + return undefined; + + return 'rgb:' + groups[1] + '/' + groups[2] + '/' + groups[3]; + + } + + /** + * Parses the same subset of the X11 color spec supported by the Guacamole + * terminal emulator (the "rgb:*" format), returning the equivalent 6-digit + * hexadecimal color string supported by the ColorScheme representation. + * The X11 color spec defined by Xlib's XParseColor(). The human-readable + * color names supported by the Guacamole terminal emulator (the same color + * names as supported by xterm) may also be used. + * + * @param color + * The X11 color spec to parse, or the name of a known named color. + * + * @returns + * The 6-digit hexadecimal color string which represents the same color + * as the given X11 color spec/name, or undefined if the given spec/name is + * invalid. + */ + toHexColor(color: string): string | undefined { + + /** + * Shifts or truncates the given hexadecimal string such that it + * contains exactly two hexadecimal digits, as required by any + * individual color component of the 6-digit hexadecimal RGB format. + * + * @param component + * The hexadecimal string to shift or truncate to two digits. + * + * @returns + * A new 2-digit hexadecimal string containing the same digits as + * the provided string, shifted or truncated as necessary to fit + * within the 2-digit length limit. + */ + const toHexComponent = (component: string): string => (component + '0').substring(0, 2).toUpperCase(); + + // Attempt to parse any non-RGB color as a named color + const groups = /^rgb:([0-9A-Fa-f]{1,4})\/([0-9A-Fa-f]{1,4})\/([0-9A-Fa-f]{1,4})$/.exec(color); + if (!groups) + return ColorScheme.NAMED_COLORS[color.toLowerCase()] || undefined; + + // Convert to standard 6-digit hexadecimal RGB format + return '#' + toHexComponent(groups[1]) + toHexComponent(groups[2]) + toHexComponent(groups[3]); + + } + + /** + * Converts the given string representation of a color scheme which is + * supported by the Guacamole terminal emulator to a corresponding, + * intermediate ColorScheme object. + * + * @param {String} str + * An arbitrary color scheme, in the string format supported by the + * Guacamole terminal emulator. + * + * @returns {ColorScheme} + * A new ColorScheme instance which represents the same color scheme as + * the given string. + */ + static fromString(str: string): ColorScheme { + + const scheme = new ColorScheme({_originalString: str}); + + // For each semicolon-separated statement in the provided color scheme + const statements = str.split(/;/); + for (let i = 0; i < statements.length; i++) { + + // Skip any statements which cannot be parsed + const statement = statements[i]; + const groups = /^\s*(background|foreground|color([0-9]+))\s*:\s*(\S*)\s*$/.exec(statement); + if (!groups) + continue; + + // If the statement is valid and contains a valid color, map that + // color to the appropriate property of the ColorScheme object + const color = scheme.toHexColor(groups[3]); + if (color) { + if (groups[1] === 'background') + scheme.background = color; + else if (groups[1] === 'foreground') + scheme.foreground = color; + else + scheme.colors[parseInt(groups[2])] = color; + } + + } + return scheme; + + } + + /** + * Returns whether the two given color schemes define the exact same + * colors. + * + * @param a + * The first ColorScheme to compare. + * + * @param b + * The second ColorScheme to compare. + * + * @returns + * true if both color schemes contain the same colors, false otherwise. + */ + static equals(a: ColorScheme, b: ColorScheme): boolean { + return a.foreground === b.foreground + && a.background === b.background + && isEqual(a.colors, b.colors); + } + + /** + * Converts the given ColorScheme to a string representation which is + * supported by the Guacamole terminal emulator. + * + * @param scheme + * The ColorScheme to convert to a string. + * + * @returns + * The given color scheme, converted to the string format supported by + * the Guacamole terminal emulator. + */ + static toString(scheme: ColorScheme): string { + + // Use originally-provided string if it equates to the exact same color scheme + if (!isUndefined(scheme._originalString) && ColorScheme.equals(scheme, ColorScheme.fromString(scheme._originalString))) + return scheme._originalString; + + // Add background and foreground + let str = 'background: ' + scheme.fromHexColor(scheme.background) + ';\n' + + 'foreground: ' + scheme.fromHexColor(scheme.foreground) + ';'; + + // Add color definitions for each palette entry + for (let index in scheme.colors) + str += '\ncolor' + index + ': ' + scheme.fromHexColor(scheme.colors[index]) + ';'; + + return str; + + } + + /** + * The set of all named colors supported by the Guacamole terminal + * emulator and their corresponding 6-digit hexadecimal RGB + * representations. This set should contain all colors supported by xterm. + */ + static readonly NAMED_COLORS: Record = { + 'aliceblue': '#F0F8FF', + 'antiquewhite': '#FAEBD7', + 'antiquewhite1': '#FFEFDB', + 'antiquewhite2': '#EEDFCC', + 'antiquewhite3': '#CDC0B0', + 'antiquewhite4': '#8B8378', + 'aqua': '#00FFFF', + 'aquamarine': '#7FFFD4', + 'aquamarine1': '#7FFFD4', + 'aquamarine2': '#76EEC6', + 'aquamarine3': '#66CDAA', + 'aquamarine4': '#458B74', + 'azure': '#F0FFFF', + 'azure1': '#F0FFFF', + 'azure2': '#E0EEEE', + 'azure3': '#C1CDCD', + 'azure4': '#838B8B', + 'beige': '#F5F5DC', + 'bisque': '#FFE4C4', + 'bisque1': '#FFE4C4', + 'bisque2': '#EED5B7', + 'bisque3': '#CDB79E', + 'bisque4': '#8B7D6B', + 'black': '#000000', + 'blanchedalmond': '#FFEBCD', + 'blue': '#0000FF', + 'blue1': '#0000FF', + 'blue2': '#0000EE', + 'blue3': '#0000CD', + 'blue4': '#00008B', + 'blueviolet': '#8A2BE2', + 'brown': '#A52A2A', + 'brown1': '#FF4040', + 'brown2': '#EE3B3B', + 'brown3': '#CD3333', + 'brown4': '#8B2323', + 'burlywood': '#DEB887', + 'burlywood1': '#FFD39B', + 'burlywood2': '#EEC591', + 'burlywood3': '#CDAA7D', + 'burlywood4': '#8B7355', + 'cadetblue': '#5F9EA0', + 'cadetblue1': '#98F5FF', + 'cadetblue2': '#8EE5EE', + 'cadetblue3': '#7AC5CD', + 'cadetblue4': '#53868B', + 'chartreuse': '#7FFF00', + 'chartreuse1': '#7FFF00', + 'chartreuse2': '#76EE00', + 'chartreuse3': '#66CD00', + 'chartreuse4': '#458B00', + 'chocolate': '#D2691E', + 'chocolate1': '#FF7F24', + 'chocolate2': '#EE7621', + 'chocolate3': '#CD661D', + 'chocolate4': '#8B4513', + 'coral': '#FF7F50', + 'coral1': '#FF7256', + 'coral2': '#EE6A50', + 'coral3': '#CD5B45', + 'coral4': '#8B3E2F', + 'cornflowerblue': '#6495ED', + 'cornsilk': '#FFF8DC', + 'cornsilk1': '#FFF8DC', + 'cornsilk2': '#EEE8CD', + 'cornsilk3': '#CDC8B1', + 'cornsilk4': '#8B8878', + 'crimson': '#DC143C', + 'cyan': '#00FFFF', + 'cyan1': '#00FFFF', + 'cyan2': '#00EEEE', + 'cyan3': '#00CDCD', + 'cyan4': '#008B8B', + 'darkblue': '#00008B', + 'darkcyan': '#008B8B', + 'darkgoldenrod': '#B8860B', + 'darkgoldenrod1': '#FFB90F', + 'darkgoldenrod2': '#EEAD0E', + 'darkgoldenrod3': '#CD950C', + 'darkgoldenrod4': '#8B6508', + 'darkgray': '#A9A9A9', + 'darkgreen': '#006400', + 'darkgrey': '#A9A9A9', + 'darkkhaki': '#BDB76B', + 'darkmagenta': '#8B008B', + 'darkolivegreen': '#556B2F', + 'darkolivegreen1': '#CAFF70', + 'darkolivegreen2': '#BCEE68', + 'darkolivegreen3': '#A2CD5A', + 'darkolivegreen4': '#6E8B3D', + 'darkorange': '#FF8C00', + 'darkorange1': '#FF7F00', + 'darkorange2': '#EE7600', + 'darkorange3': '#CD6600', + 'darkorange4': '#8B4500', + 'darkorchid': '#9932CC', + 'darkorchid1': '#BF3EFF', + 'darkorchid2': '#B23AEE', + 'darkorchid3': '#9A32CD', + 'darkorchid4': '#68228B', + 'darkred': '#8B0000', + 'darksalmon': '#E9967A', + 'darkseagreen': '#8FBC8F', + 'darkseagreen1': '#C1FFC1', + 'darkseagreen2': '#B4EEB4', + 'darkseagreen3': '#9BCD9B', + 'darkseagreen4': '#698B69', + 'darkslateblue': '#483D8B', + 'darkslategray': '#2F4F4F', + 'darkslategray1': '#97FFFF', + 'darkslategray2': '#8DEEEE', + 'darkslategray3': '#79CDCD', + 'darkslategray4': '#528B8B', + 'darkslategrey': '#2F4F4F', + 'darkturquoise': '#00CED1', + 'darkviolet': '#9400D3', + 'deeppink': '#FF1493', + 'deeppink1': '#FF1493', + 'deeppink2': '#EE1289', + 'deeppink3': '#CD1076', + 'deeppink4': '#8B0A50', + 'deepskyblue': '#00BFFF', + 'deepskyblue1': '#00BFFF', + 'deepskyblue2': '#00B2EE', + 'deepskyblue3': '#009ACD', + 'deepskyblue4': '#00688B', + 'dimgray': '#696969', + 'dimgrey': '#696969', + 'dodgerblue': '#1E90FF', + 'dodgerblue1': '#1E90FF', + 'dodgerblue2': '#1C86EE', + 'dodgerblue3': '#1874CD', + 'dodgerblue4': '#104E8B', + 'firebrick': '#B22222', + 'firebrick1': '#FF3030', + 'firebrick2': '#EE2C2C', + 'firebrick3': '#CD2626', + 'firebrick4': '#8B1A1A', + 'floralwhite': '#FFFAF0', + 'forestgreen': '#228B22', + 'fuchsia': '#FF00FF', + 'gainsboro': '#DCDCDC', + 'ghostwhite': '#F8F8FF', + 'gold': '#FFD700', + 'gold1': '#FFD700', + 'gold2': '#EEC900', + 'gold3': '#CDAD00', + 'gold4': '#8B7500', + 'goldenrod': '#DAA520', + 'goldenrod1': '#FFC125', + 'goldenrod2': '#EEB422', + 'goldenrod3': '#CD9B1D', + 'goldenrod4': '#8B6914', + 'gray': '#BEBEBE', + 'gray0': '#000000', + 'gray1': '#030303', + 'gray10': '#1A1A1A', + 'gray100': '#FFFFFF', + 'gray11': '#1C1C1C', + 'gray12': '#1F1F1F', + 'gray13': '#212121', + 'gray14': '#242424', + 'gray15': '#262626', + 'gray16': '#292929', + 'gray17': '#2B2B2B', + 'gray18': '#2E2E2E', + 'gray19': '#303030', + 'gray2': '#050505', + 'gray20': '#333333', + 'gray21': '#363636', + 'gray22': '#383838', + 'gray23': '#3B3B3B', + 'gray24': '#3D3D3D', + 'gray25': '#404040', + 'gray26': '#424242', + 'gray27': '#454545', + 'gray28': '#474747', + 'gray29': '#4A4A4A', + 'gray3': '#080808', + 'gray30': '#4D4D4D', + 'gray31': '#4F4F4F', + 'gray32': '#525252', + 'gray33': '#545454', + 'gray34': '#575757', + 'gray35': '#595959', + 'gray36': '#5C5C5C', + 'gray37': '#5E5E5E', + 'gray38': '#616161', + 'gray39': '#636363', + 'gray4': '#0A0A0A', + 'gray40': '#666666', + 'gray41': '#696969', + 'gray42': '#6B6B6B', + 'gray43': '#6E6E6E', + 'gray44': '#707070', + 'gray45': '#737373', + 'gray46': '#757575', + 'gray47': '#787878', + 'gray48': '#7A7A7A', + 'gray49': '#7D7D7D', + 'gray5': '#0D0D0D', + 'gray50': '#7F7F7F', + 'gray51': '#828282', + 'gray52': '#858585', + 'gray53': '#878787', + 'gray54': '#8A8A8A', + 'gray55': '#8C8C8C', + 'gray56': '#8F8F8F', + 'gray57': '#919191', + 'gray58': '#949494', + 'gray59': '#969696', + 'gray6': '#0F0F0F', + 'gray60': '#999999', + 'gray61': '#9C9C9C', + 'gray62': '#9E9E9E', + 'gray63': '#A1A1A1', + 'gray64': '#A3A3A3', + 'gray65': '#A6A6A6', + 'gray66': '#A8A8A8', + 'gray67': '#ABABAB', + 'gray68': '#ADADAD', + 'gray69': '#B0B0B0', + 'gray7': '#121212', + 'gray70': '#B3B3B3', + 'gray71': '#B5B5B5', + 'gray72': '#B8B8B8', + 'gray73': '#BABABA', + 'gray74': '#BDBDBD', + 'gray75': '#BFBFBF', + 'gray76': '#C2C2C2', + 'gray77': '#C4C4C4', + 'gray78': '#C7C7C7', + 'gray79': '#C9C9C9', + 'gray8': '#141414', + 'gray80': '#CCCCCC', + 'gray81': '#CFCFCF', + 'gray82': '#D1D1D1', + 'gray83': '#D4D4D4', + 'gray84': '#D6D6D6', + 'gray85': '#D9D9D9', + 'gray86': '#DBDBDB', + 'gray87': '#DEDEDE', + 'gray88': '#E0E0E0', + 'gray89': '#E3E3E3', + 'gray9': '#171717', + 'gray90': '#E5E5E5', + 'gray91': '#E8E8E8', + 'gray92': '#EBEBEB', + 'gray93': '#EDEDED', + 'gray94': '#F0F0F0', + 'gray95': '#F2F2F2', + 'gray96': '#F5F5F5', + 'gray97': '#F7F7F7', + 'gray98': '#FAFAFA', + 'gray99': '#FCFCFC', + 'green': '#00FF00', + 'green1': '#00FF00', + 'green2': '#00EE00', + 'green3': '#00CD00', + 'green4': '#008B00', + 'greenyellow': '#ADFF2F', + 'grey': '#BEBEBE', + 'grey0': '#000000', + 'grey1': '#030303', + 'grey10': '#1A1A1A', + 'grey100': '#FFFFFF', + 'grey11': '#1C1C1C', + 'grey12': '#1F1F1F', + 'grey13': '#212121', + 'grey14': '#242424', + 'grey15': '#262626', + 'grey16': '#292929', + 'grey17': '#2B2B2B', + 'grey18': '#2E2E2E', + 'grey19': '#303030', + 'grey2': '#050505', + 'grey20': '#333333', + 'grey21': '#363636', + 'grey22': '#383838', + 'grey23': '#3B3B3B', + 'grey24': '#3D3D3D', + 'grey25': '#404040', + 'grey26': '#424242', + 'grey27': '#454545', + 'grey28': '#474747', + 'grey29': '#4A4A4A', + 'grey3': '#080808', + 'grey30': '#4D4D4D', + 'grey31': '#4F4F4F', + 'grey32': '#525252', + 'grey33': '#545454', + 'grey34': '#575757', + 'grey35': '#595959', + 'grey36': '#5C5C5C', + 'grey37': '#5E5E5E', + 'grey38': '#616161', + 'grey39': '#636363', + 'grey4': '#0A0A0A', + 'grey40': '#666666', + 'grey41': '#696969', + 'grey42': '#6B6B6B', + 'grey43': '#6E6E6E', + 'grey44': '#707070', + 'grey45': '#737373', + 'grey46': '#757575', + 'grey47': '#787878', + 'grey48': '#7A7A7A', + 'grey49': '#7D7D7D', + 'grey5': '#0D0D0D', + 'grey50': '#7F7F7F', + 'grey51': '#828282', + 'grey52': '#858585', + 'grey53': '#878787', + 'grey54': '#8A8A8A', + 'grey55': '#8C8C8C', + 'grey56': '#8F8F8F', + 'grey57': '#919191', + 'grey58': '#949494', + 'grey59': '#969696', + 'grey6': '#0F0F0F', + 'grey60': '#999999', + 'grey61': '#9C9C9C', + 'grey62': '#9E9E9E', + 'grey63': '#A1A1A1', + 'grey64': '#A3A3A3', + 'grey65': '#A6A6A6', + 'grey66': '#A8A8A8', + 'grey67': '#ABABAB', + 'grey68': '#ADADAD', + 'grey69': '#B0B0B0', + 'grey7': '#121212', + 'grey70': '#B3B3B3', + 'grey71': '#B5B5B5', + 'grey72': '#B8B8B8', + 'grey73': '#BABABA', + 'grey74': '#BDBDBD', + 'grey75': '#BFBFBF', + 'grey76': '#C2C2C2', + 'grey77': '#C4C4C4', + 'grey78': '#C7C7C7', + 'grey79': '#C9C9C9', + 'grey8': '#141414', + 'grey80': '#CCCCCC', + 'grey81': '#CFCFCF', + 'grey82': '#D1D1D1', + 'grey83': '#D4D4D4', + 'grey84': '#D6D6D6', + 'grey85': '#D9D9D9', + 'grey86': '#DBDBDB', + 'grey87': '#DEDEDE', + 'grey88': '#E0E0E0', + 'grey89': '#E3E3E3', + 'grey9': '#171717', + 'grey90': '#E5E5E5', + 'grey91': '#E8E8E8', + 'grey92': '#EBEBEB', + 'grey93': '#EDEDED', + 'grey94': '#F0F0F0', + 'grey95': '#F2F2F2', + 'grey96': '#F5F5F5', + 'grey97': '#F7F7F7', + 'grey98': '#FAFAFA', + 'grey99': '#FCFCFC', + 'honeydew': '#F0FFF0', + 'honeydew1': '#F0FFF0', + 'honeydew2': '#E0EEE0', + 'honeydew3': '#C1CDC1', + 'honeydew4': '#838B83', + 'hotpink': '#FF69B4', + 'hotpink1': '#FF6EB4', + 'hotpink2': '#EE6AA7', + 'hotpink3': '#CD6090', + 'hotpink4': '#8B3A62', + 'indianred': '#CD5C5C', + 'indianred1': '#FF6A6A', + 'indianred2': '#EE6363', + 'indianred3': '#CD5555', + 'indianred4': '#8B3A3A', + 'indigo': '#4B0082', + 'ivory': '#FFFFF0', + 'ivory1': '#FFFFF0', + 'ivory2': '#EEEEE0', + 'ivory3': '#CDCDC1', + 'ivory4': '#8B8B83', + 'khaki': '#F0E68C', + 'khaki1': '#FFF68F', + 'khaki2': '#EEE685', + 'khaki3': '#CDC673', + 'khaki4': '#8B864E', + 'lavender': '#E6E6FA', + 'lavenderblush': '#FFF0F5', + 'lavenderblush1': '#FFF0F5', + 'lavenderblush2': '#EEE0E5', + 'lavenderblush3': '#CDC1C5', + 'lavenderblush4': '#8B8386', + 'lawngreen': '#7CFC00', + 'lemonchiffon': '#FFFACD', + 'lemonchiffon1': '#FFFACD', + 'lemonchiffon2': '#EEE9BF', + 'lemonchiffon3': '#CDC9A5', + 'lemonchiffon4': '#8B8970', + 'lightblue': '#ADD8E6', + 'lightblue1': '#BFEFFF', + 'lightblue2': '#B2DFEE', + 'lightblue3': '#9AC0CD', + 'lightblue4': '#68838B', + 'lightcoral': '#F08080', + 'lightcyan': '#E0FFFF', + 'lightcyan1': '#E0FFFF', + 'lightcyan2': '#D1EEEE', + 'lightcyan3': '#B4CDCD', + 'lightcyan4': '#7A8B8B', + 'lightgoldenrod': '#EEDD82', + 'lightgoldenrod1': '#FFEC8B', + 'lightgoldenrod2': '#EEDC82', + 'lightgoldenrod3': '#CDBE70', + 'lightgoldenrod4': '#8B814C', + 'lightgoldenrodyellow': '#FAFAD2', + 'lightgray': '#D3D3D3', + 'lightgreen': '#90EE90', + 'lightgrey': '#D3D3D3', + 'lightpink': '#FFB6C1', + 'lightpink1': '#FFAEB9', + 'lightpink2': '#EEA2AD', + 'lightpink3': '#CD8C95', + 'lightpink4': '#8B5F65', + 'lightsalmon': '#FFA07A', + 'lightsalmon1': '#FFA07A', + 'lightsalmon2': '#EE9572', + 'lightsalmon3': '#CD8162', + 'lightsalmon4': '#8B5742', + 'lightseagreen': '#20B2AA', + 'lightskyblue': '#87CEFA', + 'lightskyblue1': '#B0E2FF', + 'lightskyblue2': '#A4D3EE', + 'lightskyblue3': '#8DB6CD', + 'lightskyblue4': '#607B8B', + 'lightslateblue': '#8470FF', + 'lightslategray': '#778899', + 'lightslategrey': '#778899', + 'lightsteelblue': '#B0C4DE', + 'lightsteelblue1': '#CAE1FF', + 'lightsteelblue2': '#BCD2EE', + 'lightsteelblue3': '#A2B5CD', + 'lightsteelblue4': '#6E7B8B', + 'lightyellow': '#FFFFE0', + 'lightyellow1': '#FFFFE0', + 'lightyellow2': '#EEEED1', + 'lightyellow3': '#CDCDB4', + 'lightyellow4': '#8B8B7A', + 'lime': '#00FF00', + 'limegreen': '#32CD32', + 'linen': '#FAF0E6', + 'magenta': '#FF00FF', + 'magenta1': '#FF00FF', + 'magenta2': '#EE00EE', + 'magenta3': '#CD00CD', + 'magenta4': '#8B008B', + 'maroon': '#B03060', + 'maroon1': '#FF34B3', + 'maroon2': '#EE30A7', + 'maroon3': '#CD2990', + 'maroon4': '#8B1C62', + 'mediumaquamarine': '#66CDAA', + 'mediumblue': '#0000CD', + 'mediumorchid': '#BA55D3', + 'mediumorchid1': '#E066FF', + 'mediumorchid2': '#D15FEE', + 'mediumorchid3': '#B452CD', + 'mediumorchid4': '#7A378B', + 'mediumpurple': '#9370DB', + 'mediumpurple1': '#AB82FF', + 'mediumpurple2': '#9F79EE', + 'mediumpurple3': '#8968CD', + 'mediumpurple4': '#5D478B', + 'mediumseagreen': '#3CB371', + 'mediumslateblue': '#7B68EE', + 'mediumspringgreen': '#00FA9A', + 'mediumturquoise': '#48D1CC', + 'mediumvioletred': '#C71585', + 'midnightblue': '#191970', + 'mintcream': '#F5FFFA', + 'mistyrose': '#FFE4E1', + 'mistyrose1': '#FFE4E1', + 'mistyrose2': '#EED5D2', + 'mistyrose3': '#CDB7B5', + 'mistyrose4': '#8B7D7B', + 'moccasin': '#FFE4B5', + 'navajowhite': '#FFDEAD', + 'navajowhite1': '#FFDEAD', + 'navajowhite2': '#EECFA1', + 'navajowhite3': '#CDB38B', + 'navajowhite4': '#8B795E', + 'navy': '#000080', + 'navyblue': '#000080', + 'oldlace': '#FDF5E6', + 'olive': '#808000', + 'olivedrab': '#6B8E23', + 'olivedrab1': '#C0FF3E', + 'olivedrab2': '#B3EE3A', + 'olivedrab3': '#9ACD32', + 'olivedrab4': '#698B22', + 'orange': '#FFA500', + 'orange1': '#FFA500', + 'orange2': '#EE9A00', + 'orange3': '#CD8500', + 'orange4': '#8B5A00', + 'orangered': '#FF4500', + 'orangered1': '#FF4500', + 'orangered2': '#EE4000', + 'orangered3': '#CD3700', + 'orangered4': '#8B2500', + 'orchid': '#DA70D6', + 'orchid1': '#FF83FA', + 'orchid2': '#EE7AE9', + 'orchid3': '#CD69C9', + 'orchid4': '#8B4789', + 'palegoldenrod': '#EEE8AA', + 'palegreen': '#98FB98', + 'palegreen1': '#9AFF9A', + 'palegreen2': '#90EE90', + 'palegreen3': '#7CCD7C', + 'palegreen4': '#548B54', + 'paleturquoise': '#AFEEEE', + 'paleturquoise1': '#BBFFFF', + 'paleturquoise2': '#AEEEEE', + 'paleturquoise3': '#96CDCD', + 'paleturquoise4': '#668B8B', + 'palevioletred': '#DB7093', + 'palevioletred1': '#FF82AB', + 'palevioletred2': '#EE799F', + 'palevioletred3': '#CD6889', + 'palevioletred4': '#8B475D', + 'papayawhip': '#FFEFD5', + 'peachpuff': '#FFDAB9', + 'peachpuff1': '#FFDAB9', + 'peachpuff2': '#EECBAD', + 'peachpuff3': '#CDAF95', + 'peachpuff4': '#8B7765', + 'peru': '#CD853F', + 'pink': '#FFC0CB', + 'pink1': '#FFB5C5', + 'pink2': '#EEA9B8', + 'pink3': '#CD919E', + 'pink4': '#8B636C', + 'plum': '#DDA0DD', + 'plum1': '#FFBBFF', + 'plum2': '#EEAEEE', + 'plum3': '#CD96CD', + 'plum4': '#8B668B', + 'powderblue': '#B0E0E6', + 'purple': '#A020F0', + 'purple1': '#9B30FF', + 'purple2': '#912CEE', + 'purple3': '#7D26CD', + 'purple4': '#551A8B', + 'rebeccapurple': '#663399', + 'red': '#FF0000', + 'red1': '#FF0000', + 'red2': '#EE0000', + 'red3': '#CD0000', + 'red4': '#8B0000', + 'rosybrown': '#BC8F8F', + 'rosybrown1': '#FFC1C1', + 'rosybrown2': '#EEB4B4', + 'rosybrown3': '#CD9B9B', + 'rosybrown4': '#8B6969', + 'royalblue': '#4169E1', + 'royalblue1': '#4876FF', + 'royalblue2': '#436EEE', + 'royalblue3': '#3A5FCD', + 'royalblue4': '#27408B', + 'saddlebrown': '#8B4513', + 'salmon': '#FA8072', + 'salmon1': '#FF8C69', + 'salmon2': '#EE8262', + 'salmon3': '#CD7054', + 'salmon4': '#8B4C39', + 'sandybrown': '#F4A460', + 'seagreen': '#2E8B57', + 'seagreen1': '#54FF9F', + 'seagreen2': '#4EEE94', + 'seagreen3': '#43CD80', + 'seagreen4': '#2E8B57', + 'seashell': '#FFF5EE', + 'seashell1': '#FFF5EE', + 'seashell2': '#EEE5DE', + 'seashell3': '#CDC5BF', + 'seashell4': '#8B8682', + 'sienna': '#A0522D', + 'sienna1': '#FF8247', + 'sienna2': '#EE7942', + 'sienna3': '#CD6839', + 'sienna4': '#8B4726', + 'silver': '#C0C0C0', + 'skyblue': '#87CEEB', + 'skyblue1': '#87CEFF', + 'skyblue2': '#7EC0EE', + 'skyblue3': '#6CA6CD', + 'skyblue4': '#4A708B', + 'slateblue': '#6A5ACD', + 'slateblue1': '#836FFF', + 'slateblue2': '#7A67EE', + 'slateblue3': '#6959CD', + 'slateblue4': '#473C8B', + 'slategray': '#708090', + 'slategray1': '#C6E2FF', + 'slategray2': '#B9D3EE', + 'slategray3': '#9FB6CD', + 'slategray4': '#6C7B8B', + 'slategrey': '#708090', + 'snow': '#FFFAFA', + 'snow1': '#FFFAFA', + 'snow2': '#EEE9E9', + 'snow3': '#CDC9C9', + 'snow4': '#8B8989', + 'springgreen': '#00FF7F', + 'springgreen1': '#00FF7F', + 'springgreen2': '#00EE76', + 'springgreen3': '#00CD66', + 'springgreen4': '#008B45', + 'steelblue': '#4682B4', + 'steelblue1': '#63B8FF', + 'steelblue2': '#5CACEE', + 'steelblue3': '#4F94CD', + 'steelblue4': '#36648B', + 'tan': '#D2B48C', + 'tan1': '#FFA54F', + 'tan2': '#EE9A49', + 'tan3': '#CD853F', + 'tan4': '#8B5A2B', + 'teal': '#008080', + 'thistle': '#D8BFD8', + 'thistle1': '#FFE1FF', + 'thistle2': '#EED2EE', + 'thistle3': '#CDB5CD', + 'thistle4': '#8B7B8B', + 'tomato': '#FF6347', + 'tomato1': '#FF6347', + 'tomato2': '#EE5C42', + 'tomato3': '#CD4F39', + 'tomato4': '#8B3626', + 'turquoise': '#40E0D0', + 'turquoise1': '#00F5FF', + 'turquoise2': '#00E5EE', + 'turquoise3': '#00C5CD', + 'turquoise4': '#00868B', + 'violet': '#EE82EE', + 'violetred': '#D02090', + 'violetred1': '#FF3E96', + 'violetred2': '#EE3A8C', + 'violetred3': '#CD3278', + 'violetred4': '#8B2252', + 'webgray': '#808080', + 'webgreen': '#008000', + 'webgrey': '#808080', + 'webmaroon': '#800000', + 'webpurple': '#800080', + 'wheat': '#F5DEB3', + 'wheat1': '#FFE7BA', + 'wheat2': '#EED8AE', + 'wheat3': '#CDBA96', + 'wheat4': '#8B7E66', + 'white': '#FFFFFF', + 'whitesmoke': '#F5F5F5', + 'x11gray': '#BEBEBE', + 'x11green': '#00FF00', + 'x11grey': '#BEBEBE', + 'x11maroon': '#B03060', + 'x11purple': '#A020F0', + 'yellow': '#FFFF00', + 'yellow1': '#FFFF00', + 'yellow2': '#EEEE00', + 'yellow3': '#CDCD00', + 'yellow4': '#8B8B00', + 'yellowgreen': '#9ACD32' + }; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts new file mode 100644 index 0000000000..4a2c00dc6c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { FormFieldBaseComponent } from '../components/form-field-base/form-field-base.component'; +import { Type } from '@angular/core'; +import { CheckboxFieldComponent } from '../components/checkbox-field/checkbox-field.component'; + +/** + * The object used by the formService for describing field types. + * + * TODO: Build an Angular version of this class. + */ +export class FieldType { + + component: Type; + + /** + * Creates a new FieldType. + * + * @param {FieldType|Object} [template={}] + * The object whose properties should be copied within the new + * FieldType. + */ + constructor(template: Partial & object = {}) { + + // Copy template values + // TODO: Change default to text field + this.component = template.component || CheckboxFieldComponent; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.html new file mode 100644 index 0000000000..d19007de24 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.html @@ -0,0 +1,62 @@ + +
      + +
      + + +
      + + + +
      + + +
      + + +
      + + + +
      + + +
      +
      + +
      +
      + +
      +
      +
      +
      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts new file mode 100644 index 0000000000..b45d72b098 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts @@ -0,0 +1,286 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, + Input, + OnChanges, + OnInit, + SimpleChanges, + TemplateRef, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { GroupListItem } from '../../types/GroupListItem'; +import { ActiveConnectionService } from '../../../rest/service/active-connection.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { Connection } from '../../../rest/types/Connection'; +import { SortService } from '../../../list/services/sort.service'; +import { DataSource } from '../../../list/types/DataSource'; +import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; +import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; + +/** + * A component which displays the contents of a connection group within an + * automatically-paginated view. + */ +@Component({ + selector: 'guac-group-list', + templateUrl: './guac-group-list.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacGroupListComponent implements OnInit, OnChanges { + + /** + * The connection groups to display as a map of data source + * identifier to corresponding root group. + */ + @Input({required: true}) connectionGroups!: Record; + + /** + * Arbitrary object which shall be made available to the connection + * and connection group templates within the scope as + * context. + */ + @Input() context: any = {}; + + /** + * The map of @link{GroupListItem} type to the URL or ID of the + * Angular template to use when rendering a @link{GroupListItem} of + * that type. The @link{GroupListItem} itself will be within the + * scope of the template as item, and the arbitrary + * context object, if any, will be exposed as context. + * If the template for a type is omitted, items of that type will + * not be rendered. All standard types are defined by + * @link{GroupListItem.Type}, but use of custom types is legal. + * + * @type Object. + */ + @Input({required: true}) templates!: Record>; + + /** + * Whether the root of the connection group hierarchy given should + * be shown. If false (the default), only the descendants of the + * given connection group will be listed. + */ + @Input() showRootGroup: boolean = false; + + /** + * The maximum number of connections or groups to show per page. + */ + @Input() pageSize?: number; + + /** + * A callback which accepts an array of GroupListItems as its sole + * parameter. If provided, the callback will be invoked whenever an + * array of root-level GroupListItems is about to be rendered. + * Changes may be made by this function to that array or to the + * GroupListItems themselves. + */ + @Input() decorator?: (items: GroupListItem[]) => void; + + /** + * Reference to the instance of the pager component. + */ + @ViewChild(GuacPagerComponent, {static: true}) pager!: GuacPagerComponent; + + /** + * Map of data source identifier to the number of active + * connections associated with a given connection identifier. + * If this information is unknown, or there are no active + * connections for a given identifier, no number will be stored. + */ + private connectionCount: Record> = {}; + + /** + * A list of all items which should appear at the root level. As + * connections and connection groups from multiple data sources may + * be included in a guacGroupList, there may be multiple root + * items, even if the root connection group is shown. + */ + rootItems: GroupListItem[] = []; + + /** + * TODO: document + */ + dataSourceView: DataSource | null = null; + + /** + * Inject required services. + */ + constructor(private activeConnectionService: ActiveConnectionService, + private dataSourceService: DataSourceService, + private requestService: RequestService, + protected sortService: SortService, + private dataSourceBuilderService: DataSourceBuilderService) { + } + + ngOnInit(): void { + + // Build the data source for the list entries. + this.dataSourceView = this.dataSourceBuilderService.getBuilder() + .source(this.rootItems) + .paginate(this.pager.page) + .build(); + + } + + /** + * Returns the number of active usages of a given connection. + * + * @param dataSource + * The identifier of the data source containing the given + * connection. + * + * @param connection + * The connection whose active connections should be counted. + * + * @returns + * The number of currently-active usages of the given + * connection. + */ + private countActiveConnections(dataSource: string, connection: Connection): number { + if (this.connectionCount[dataSource] === undefined + || connection.identifier === undefined + || this.connectionCount[dataSource][connection.identifier] === undefined) + return 0; + + return (this.connectionCount)[dataSource][connection.identifier]; + } + + /** + * Returns whether a {@link GroupListItem} of the given type can be + * displayed. If there is no template associated with the given + * type, then a {@link GroupListItem} of that type cannot be + * displayed. + * + * @param type + * The type to check. + * + * @returns + * true if the given {@link GroupListItem} type can be displayed, + * false otherwise. + */ + isVisible(type: string): boolean { + return !!this.templates[type]; + } + + /** + * Toggle the open/closed status of a group list item. + * + * @param {GroupListItem} groupListItem + * The list item to expand, which should represent a + * connection group. + */ + toggleExpanded(groupListItem: GroupListItem): void { + groupListItem.expanded = !groupListItem.expanded; + } + + /** + * Set contents whenever the connection group is assigned or changed. + */ + ngOnChanges(changes: SimpleChanges): void { + if (!changes['connectionGroups']) + return; + + // Reset stored data + const dataSources: string[] = []; + this.rootItems = []; + this.connectionCount = {}; + + // If connection groups are given, add them to the interface + if (this.connectionGroups) { + + // Add each provided connection group + for (let dataSource in this.connectionGroups) { + const connectionGroup = this.connectionGroups[dataSource]; + + let rootItem: GroupListItem; + + // Prepare data source for active connection counting + dataSources.push(dataSource); + this.connectionCount[dataSource] = {}; + + // If the provided connection group is already a + // GroupListItem, no need to create a new item + if (connectionGroup instanceof GroupListItem) + rootItem = connectionGroup; + + // Create root item for current connection group + else + rootItem = GroupListItem.fromConnectionGroup(dataSource, connectionGroup, + this.isVisible(GroupListItem.Type.CONNECTION), + this.isVisible(GroupListItem.Type.SHARING_PROFILE), + this.countActiveConnections.bind(this)); + + // If root group is to be shown, add it as a root item + if (this.showRootGroup) + this.rootItems.push(rootItem); + + // Otherwise, add its children as root items + else { + rootItem.children.forEach(child => { + this.rootItems.push(child); + }); + } + + } + + // Count active connections by connection identifier + this.dataSourceService.apply( + (dataSource: string) => this.activeConnectionService.getActiveConnections(dataSource), + dataSources + ) + .then((activeConnectionMap) => { + + // Within each data source, count each active connection by identifier + for (let dataSource in activeConnectionMap) { + const activeConnections = activeConnectionMap[dataSource]; + + for (let connectionID in activeConnections) { + const activeConnection = activeConnections[connectionID]; + + // If counter already exists, increment + const identifier = activeConnection.connectionIdentifier!; + if (this.connectionCount[dataSource][identifier]) + this.connectionCount[dataSource][identifier]++; + + // Otherwise, initialize counter to 1 + else + this.connectionCount[dataSource][identifier] = 1; + + } + } + + }, this.requestService.PROMISE_DIE); + + } + + // Invoke item decorator, if provided + if (this.decorator) + this.decorator(this.rootItems); + + this.dataSourceView?.updateSource(this.rootItems); + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/group-list.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/group-list.module.ts new file mode 100644 index 0000000000..5404b078a9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/group-list.module.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GuacGroupListComponent } from './components/guac-group-list/guac-group-list.component'; +import { ListModule } from '../list/list.module'; + +/** + * Module for displaying the contents of a connection group, allowing the user + * to select individual connections or groups. + */ +@NgModule({ + declarations: [ + GuacGroupListComponent + ], + imports: [ + CommonModule, + ListModule + ], + exports: [ + GuacGroupListComponent + ] +}) +export class GroupListModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts new file mode 100644 index 0000000000..e9dbc33e90 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts @@ -0,0 +1,438 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SharingProfile } from '../../rest/types/SharingProfile'; +import { ConnectionGroup } from '../../rest/types/ConnectionGroup'; +import { Connection } from '../../rest/types/Connection'; +import { ClientIdentifier } from '../../navigation/types/ClientIdentifier'; +import { Optional } from '../../util/utility-types'; +import { ClientIdentifierService } from '../../navigation/service/client-identifier.service'; + +/** + * Provides the GroupListItem class definition. + */ +export class GroupListItem { + + /** + * The identifier of the data source associated with the connection, + * connection group, or sharing profile this item represents. + */ + dataSource: string; + + /** + * The unique identifier associated with the connection, connection + * group, or sharing profile this item represents. + */ + identifier?: string; + + /** + * The human-readable display name of this item. + */ + name?: string; + + /** + * The unique identifier of the protocol, if this item represents a + * connection. If this item does not represent a connection, this + * property is not applicable. + */ + protocol?: string; + + /** + * All children items of this item. If this item contains no children, + * this will be an empty array. + */ + children: GroupListItem[]; + + /** + * The type of object represented by this GroupListItem. Standard types + * are defined by GroupListItem.Type, but custom types are also legal. + */ + type: string; + + /** + * Whether this item, or items of the same type, can contain children. + * This may be true even if this particular item does not presently + * contain children. + */ + expandable: boolean; + + /** + * Whether this item represents a balancing connection group. + */ + balancing: boolean; + + /** + * Whether the children items should be displayed. + */ + expanded: boolean; + + /** + * Returns the number of currently active users for this connection, + * connection group, or sharing profile, if known. If unknown, null may + * be returned. + * + * @returns + * The number of currently active users for this connection, + * connection group, or sharing profile. + */ + getActiveConnections: () => number | null; + + /** + * Returns the unique string identifier that must be used when + * connecting to a connection or connection group represented by this + * GroupListItem. + * + * @returns + * The client identifier associated with the connection or + * connection group represented by this GroupListItem, or null if + * this GroupListItem cannot have an associated client identifier. + */ + getClientIdentifier: () => string | null; + + + /** + * Returns the relative URL of the client page that connects to the + * connection or connection group represented by this GroupListItem. + * + * @returns + * The relative URL of the client page that connects to the + * connection or connection group represented by this GroupListItem, + * or null if this GroupListItem cannot be connected to. + */ + getClientURL: () => string | null; + + /** + * The connection, connection group, or sharing profile whose data is + * exposed within this GroupListItem. If the type of this GroupListItem + * is not one of the types defined by GroupListItem.Type, then this + * value may be anything. + * + * TODO: any? @type Connection|ConnectionGroup|SharingProfile|* + */ + wrappedItem: Connection | ConnectionGroup | SharingProfile | any; + + /** + * The sorting weight to apply when displaying this GroupListItem. This + * weight is relative only to other sorting weights. If two items have + * the same weight, they will be sorted based on their names. + * + * @default 0 + */ + weight: number; + + /** + * Creates a new GroupListItem, initializing the properties of that + * GroupListItem with the corresponding properties of the given template. + * + * @param template + * The object whose properties should be copied within the new + * GroupListItem. + */ + constructor(template: Optional) { + + this.dataSource = template.dataSource; + this.identifier = template.identifier; + this.name = template.name; + this.protocol = template.protocol; + this.children = template.children || []; + this.type = template.type; + this.expandable = template.expandable || false; + this.balancing = template.balancing || false; + this.expanded = template.expanded || false; + + this.getActiveConnections = template.getActiveConnections || (() => null); + + this.getClientIdentifier = template.getClientIdentifier || (() => { + + // If the item is a connection, generate a connection identifier + if (this.type === GroupListItem.Type.CONNECTION) + return ClientIdentifierService.getString({ + dataSource: this.dataSource, + type: ClientIdentifier.Types.CONNECTION, + id: this.identifier + }); + + // If the item is a connection group, generate a connection group identifier + if (this.type === GroupListItem.Type.CONNECTION_GROUP && this.balancing) + return ClientIdentifierService.getString({ + dataSource: this.dataSource, + type: ClientIdentifier.Types.CONNECTION_GROUP, + id: this.identifier + }); + + // Otherwise, no such identifier can exist + return null; + + }); + + this.getClientURL = template.getClientURL || (() => { + + // There is a client page for this item only if it has an + // associated client identifier + const identifier = this.getClientIdentifier(); + if (identifier) + return '/client/' + encodeURIComponent(identifier); + + return null; + + }); + + this.wrappedItem = template.wrappedItem; + this.weight = template.weight || 0; + } + + /** + * Creates a new GroupListItem using the contents of the given connection. + * + * @param dataSource + * The identifier of the data source containing the given connection + * group. + * + * @param connection + * The connection whose contents should be represented by the new + * GroupListItem. + * + * @param includeSharingProfiles + * Whether sharing profiles should be included in the contents of the + * resulting GroupListItem. By default, sharing profiles are included. + * + * @param countActiveConnections + * A getter which returns the current number of active connections for + * the given connection. If omitted, the number of active connections + * known at the time this function was called is used instead. This + * function will be passed, in order, the data source identifier and + * the connection in question. + * + * @returns + * A new GroupListItem which represents the given connection. + */ + static fromConnection(dataSource: string, + connection: Connection, + includeSharingProfiles: boolean = true, + countActiveConnections?: (dataSource: string, connection: Connection) => number): GroupListItem { + + const children: GroupListItem[] = []; + + // Add any sharing profiles + if (connection.sharingProfiles && includeSharingProfiles !== false) { + connection.sharingProfiles.forEach(function addSharingProfile(child) { + children.push(GroupListItem.fromSharingProfile(dataSource, + child)); // TODO additional third parameter?: countActiveConnections + }); + } + + // Return item representing the given connection + return new GroupListItem({ + + // Identifying information + name: connection.name, + identifier: connection.identifier, + protocol: connection.protocol, + dataSource: dataSource, + + // Type information + expandable: includeSharingProfiles !== false, + type: GroupListItem.Type.CONNECTION, + + // Already-converted children + children: children, + + // Count of currently active connections using this connection + getActiveConnections: function getActiveConnections() { + + // Use getter, if provided + if (countActiveConnections) + return countActiveConnections(dataSource, connection); + + return connection.activeConnections === undefined ? null : connection.activeConnections; + + }, + + // Wrapped item + wrappedItem: connection + + }); + + } + + /** + * Creates a new GroupListItem using the contents and descendants of the + * given connection group. + * + * @param dataSource + * The identifier of the data source containing the given connection + * group. + * + * @param connectionGroup + * The connection group whose contents and descendants should be + * represented by the new GroupListItem and its descendants. + * + * @param includeConnections + * Whether connections should be included in the contents of the + * resulting GroupListItem. By default, connections are included. + * + * @param includeSharingProfiles + * Whether sharing profiles should be included in the contents of the + * resulting GroupListItem. By default, sharing profiles are included. + * + * @param countActiveConnections + * A getter which returns the current number of active connections for + * the given connection. If omitted, the number of active connections + * known at the time this function was called is used instead. This + * function will be passed, in order, the data source identifier and + * the connection group in question. + * + * @param countActiveConnectionGroups + * A getter which returns the current number of active connections for + * the given connection group. If omitted, the number of active + * connections known at the time this function was called is used + * instead. This function will be passed, in order, the data source + * identifier and the connection group in question. + * + * @returns + * A new GroupListItem which represents the given connection group, + * including all descendants. + */ + static fromConnectionGroup(dataSource: string, + connectionGroup: ConnectionGroup, + includeConnections: boolean = true, + includeSharingProfiles: boolean = true, + countActiveConnections?: (dataSource: string, connection: Connection) => number, + countActiveConnectionGroups?: (dataSource: string, connectionGroup: ConnectionGroup) => number): GroupListItem { + + const children: GroupListItem[] = []; + + // Add any child connections + if (connectionGroup.childConnections && includeConnections !== false) { + connectionGroup.childConnections.forEach(function addChildConnection(child) { + children.push(GroupListItem.fromConnection(dataSource, child, + includeSharingProfiles, countActiveConnections)); + }); + } + + // Add any child groups + if (connectionGroup.childConnectionGroups) { + connectionGroup.childConnectionGroups.forEach(function addChildGroup(child) { + children.push(GroupListItem.fromConnectionGroup(dataSource, + child, includeConnections, includeSharingProfiles, + countActiveConnections, countActiveConnectionGroups)); + }); + } + + // Return item representing the given connection group + return new GroupListItem({ + + // Identifying information + name: connectionGroup.name, + identifier: connectionGroup.identifier, + dataSource: dataSource, + + // Type information + type: GroupListItem.Type.CONNECTION_GROUP, + balancing: connectionGroup.type === ConnectionGroup.Type.BALANCING, + expandable: true, + + // Already-converted children + children: children, + + // Count of currently active connection groups using this connection + getActiveConnections: function getActiveConnections() { + + // Use getter, if provided + if (countActiveConnectionGroups) + return countActiveConnectionGroups(dataSource, connectionGroup); + + return connectionGroup.activeConnections; + + }, + + + // Wrapped item + wrappedItem: connectionGroup + + }); + + } + + /** + * Creates a new GroupListItem using the contents of the given sharing + * profile. + * + * @param dataSource + * The identifier of the data source containing the given sharing + * profile. + * + * @param sharingProfile + * The sharing profile whose contents should be represented by the new + * GroupListItem. + * + * @returns + * A new GroupListItem which represents the given sharing profile. + */ + static fromSharingProfile(dataSource: string, sharingProfile: SharingProfile): GroupListItem { + + // Return item representing the given sharing profile + return new GroupListItem({ + + // Identifying information + name: sharingProfile.name, + identifier: sharingProfile.identifier, + dataSource: dataSource, + + // Type information + type: GroupListItem.Type.SHARING_PROFILE, + + // Wrapped item + wrappedItem: sharingProfile + + }); + + } + +} + +export namespace GroupListItem { + + /** + * All pre-defined types of GroupListItems. Note that, while these are the + * standard types supported by GroupListItem and the related guacGroupList + * directive, the type string is otherwise arbitrary and custom types are + * legal. + */ + export enum Type { + /** + * The standard type string of a GroupListItem which represents a + * connection. + */ + CONNECTION = 'connection', + + /** + * The standard type string of a GroupListItem which represents a + * connection group. + */ + CONNECTION_GROUP = 'connection-group', + + /** + * The standard type string of a GroupListItem which represents a + * sharing profile. + */ + SHARING_PROFILE = 'sharing-profile' + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/HistoryEntry.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/HistoryEntry.ts new file mode 100644 index 0000000000..a9a0b044df --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/HistoryEntry.ts @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the HistoryEntry class used by the GuacHistoryService. + */ +export class HistoryEntry { + + /** + * The ID of the connection associated with this history entry, + * including type prefix. + */ + id: string; + + /** + * The thumbnail associated with the connection associated with this + * history entry. + */ + thumbnail: string; + + /** + * A single entry in the connection history. + * + * @constructor + * @param id The ID of the connection. + * + * @param thumbnail + * The URL of the thumbnail to use to represent the connection. + */ + constructor(id: string, thumbnail: string) { + this.id = id; + this.thumbnail = thumbnail; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts new file mode 100644 index 0000000000..3a58bbc44d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { GuacHistoryService } from './guac-history.service'; +import { LocalStorageService } from "../storage/local-storage.service"; + +describe('GuacHistoryService Unit-Test', () => { + let service: GuacHistoryService; + + const fakeLocalStorageService = jasmine.createSpyObj( + 'LocalStorageService', + { + getItem: null, + setItem: undefined, + removeItem: undefined, + } + ); + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [{provide: LocalStorageService, useValue: fakeLocalStorageService}] + }); + service = TestBed.inject(GuacHistoryService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should update thumbnail', () => { + service.updateThumbnail('id', 'thumbnail'); + expect(service.recentConnections.length).toBe(1); + expect(service.recentConnections[0].id).toBe('id'); + expect(service.recentConnections[0].thumbnail).toBe('thumbnail'); + }); + + it('should replace existing HistoryEntry', () => { + service.updateThumbnail('1', 'thumbnail1'); + service.updateThumbnail('2', 'thumbnail2'); + service.updateThumbnail('3', 'thumbnail3'); + + service.updateThumbnail('2', 'thumbnail22'); + + expect(service.recentConnections.length).toBe(3); + expect(service.recentConnections[0].id).toBe('2'); + expect(service.recentConnections[0].thumbnail).toBe('thumbnail22'); + }); + + +}); + +describe('GuacHistoryService Integration-Test', () => { + + let service: GuacHistoryService; + + beforeAll(() => { + localStorage.clear(); + }); + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(GuacHistoryService); + }); + + it('adds history entries', () => { + service.updateThumbnail('1', 'thumbnail1'); + service.updateThumbnail('2', 'thumbnail2'); + service.updateThumbnail('3', 'thumbnail3'); + + expect(service.recentConnections.length).toBe(3); + }); + + it('loads history entries from local storage', () => { + expect(service.recentConnections.length).toBe(3); + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts new file mode 100644 index 0000000000..048fcc7d0b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { LocalStorageService } from "../storage/local-storage.service"; +import { HistoryEntry } from "./HistoryEntry"; + +// The parameter name for getting the history from local storage +const GUAC_HISTORY_STORAGE_KEY = "GUAC_HISTORY"; + +/** + * The number of entries to allow before removing old entries based on the + * cutoff. + */ +const IDEAL_LENGTH = 6; + +/** + * A service for reading and manipulating the Guacamole connection history. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacHistoryService { + + /** + * The top few recent connections, sorted in order of most recent access. + */ + recentConnections: HistoryEntry[] = []; + + constructor(private readonly localStorageService: LocalStorageService) { + // Init stored connection history from localStorage + const storedHistory = localStorageService.getItem(GUAC_HISTORY_STORAGE_KEY) || []; + if (storedHistory instanceof Array) + this.recentConnections = storedHistory; + } + + /** + * Updates the thumbnail and access time of the history entry for the + * connection with the given ID. + * + * @param {String} id + * The ID of the connection whose history entry should be updated. + * + * @param {String} thumbnail + * The URL of the thumbnail image to associate with the history entry. + */ + updateThumbnail(id: string, thumbnail: string) { + + let i; + + // Remove any existing entry for this connection + for (i = 0; i < this.recentConnections.length; i++) { + if (this.recentConnections[i].id === id) { + this.recentConnections.splice(i, 1); + break; + } + } + + // Store new entry in history + this.recentConnections.unshift(new HistoryEntry( + id, + thumbnail, + // TODO new Date().getTime() als dritter Parameter?? + )); + + // Truncate history to ideal length + if (this.recentConnections.length > IDEAL_LENGTH) + this.recentConnections.length = IDEAL_LENGTH; + + // Save updated history + this.localStorageService.setItem(GUAC_HISTORY_STORAGE_KEY, this.recentConnections); + + }; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/history.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/history.module.ts new file mode 100644 index 0000000000..e0b8c87ae5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/history.module.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + + +/** + * The module for code relating to connection history. + */ +@NgModule({ + declarations: [], + imports: [ + CommonModule + ] +}) +export class HistoryModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.html new file mode 100644 index 0000000000..c1aedd4619 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.html @@ -0,0 +1,28 @@ + + + + +
      + + + {{item.name}} + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.ts new file mode 100644 index 0000000000..692b03d49e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection-group/connection-group.component.ts @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * TODO + */ +@Component({ + selector: 'guac-connection-group', + templateUrl: './connection-group.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ConnectionGroupComponent { + + /** + * TODO + */ + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.html new file mode 100644 index 0000000000..5019b9aecf --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.html @@ -0,0 +1,34 @@ + + + + +
      + + + {{item.name}} + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.ts new file mode 100644 index 0000000000..8017297753 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/connection/connection.component.ts @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * TODO + */ +@Component({ + selector: 'guac-connection', + templateUrl: './connection.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ConnectionComponent { + + /** + * TODO + */ + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.html new file mode 100644 index 0000000000..00150d09d1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.html @@ -0,0 +1,41 @@ + +
      + + +

      {{'HOME.INFO_NO_RECENT_CONNECTIONS' | transloco}}

      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts new file mode 100644 index 0000000000..4f577d84a2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts @@ -0,0 +1,172 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { GuacHistoryService } from '../../../history/guac-history.service'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { RecentConnection } from '../../types/RecentConnection'; +import { Connection } from '../../../rest/types/Connection'; +import { ClientIdentifier } from '../../../navigation/types/ClientIdentifier'; +import { ClientIdentifierService } from '../../../navigation/service/client-identifier.service'; + +/** + * A component which displays the recently-accessed connections nested beneath + * each of the given connection groups. + */ +@Component({ + selector: 'guac-recent-connections', + templateUrl: './guac-recent-connections.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacRecentConnectionsComponent implements OnChanges { + + /** + * The root connection groups to display, and all visible + * descendants, as a map of data source identifier to the root + * connection group within that data source. Recent connections + * will only be shown if they exist within this hierarchy, + * regardless of their existence within the history. + */ + @Input() rootGroups: Record = {}; + + /** + * Array of all known and visible recently-used connections. + */ + recentConnections: RecentConnection[] = []; + + /** + * Map of all visible objects, connections or connection groups, by + * object identifier. + */ + visibleObjects: Record = {}; + + /** + * Inject required services. + */ + constructor(private guacHistoryService: GuacHistoryService, + private clientIdentifierService: ClientIdentifierService) { + } + + /** + * Returns whether recent connections are available for display. + * + * @returns + * true if recent connections are present, false otherwise. + */ + hasRecentConnections(): boolean { + return !!this.recentConnections.length; + } + + /** + * Adds the given connection to the internal set of visible + * objects. + * + * @param {String} dataSource + * The identifier of the data source associated with the + * given connection group. + * + * @param {Connection} connection + * The connection to add to the internal set of visible objects. + */ + addVisibleConnection(dataSource: string, connection: Connection): void { + + // Add given connection to set of visible objects + this.visibleObjects[this.clientIdentifierService.getString({ + dataSource: dataSource, + type: ClientIdentifier.Types.CONNECTION, + id: connection.identifier + })] = connection; + + } + + /** + * Adds the given connection group to the internal set of visible + * objects, along with any descendants. + * + * @param {String} dataSource + * The identifier of the data source associated with the + * given connection group. + * + * @param {ConnectionGroup} connectionGroup + * The connection group to add to the internal set of visible + * objects, along with any descendants. + */ + addVisibleConnectionGroup(dataSource: string, connectionGroup: ConnectionGroup): void { + + // Add given connection group to set of visible objects + (this.visibleObjects)[this.clientIdentifierService.getString({ + dataSource: dataSource, + type: ClientIdentifier.Types.CONNECTION_GROUP, + id: connectionGroup.identifier + })] = connectionGroup; + + // Add all child connections + if (connectionGroup.childConnections) + connectionGroup.childConnections.forEach(child => { + this.addVisibleConnection(dataSource, child); + }); + + // Add all child connection groups + if (connectionGroup.childConnectionGroups) + connectionGroup.childConnectionGroups.forEach(child => { + this.addVisibleConnectionGroup(dataSource, child); + }); + + } + + /** + * Update visible objects when root groups are set + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['rootGroups']) { + const rootGroups = changes['rootGroups'].currentValue as Record; + + // Clear connection arrays + this.recentConnections = []; + + // Produce collection of visible objects + this.visibleObjects = {}; + if (rootGroups) { + + for (let dataSource in rootGroups) { + const rootGroup = rootGroups[dataSource]; + this.addVisibleConnectionGroup(dataSource, rootGroup); + } + + } + + // Add any recent connections that are visible + this.guacHistoryService.recentConnections.forEach(historyEntry => { + + // Add recent connections for history entries with associated visible objects + if (historyEntry.id in this.visibleObjects) { + + const object = this.visibleObjects[historyEntry.id]; + this.recentConnections.push(new RecentConnection(object.name, historyEntry)); + + } + + }); + } + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.html new file mode 100644 index 0000000000..c59df5f38e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.html @@ -0,0 +1,63 @@ + + +
      +
      + +
      + +
      + + +
      +

      {{'HOME.SECTION_HEADER_RECENT_CONNECTIONS' | transloco}}

      + +
      + + + +
      +

      {{'HOME.SECTION_HEADER_ALL_CONNECTIONS' | transloco}}

      + + + + + +
      +
      + +
      + +
      + +
      + + + + + + + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.ts new file mode 100644 index 0000000000..79cb31be80 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/home/home.component.ts @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, OnInit, signal, ViewEncapsulation } from '@angular/core'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { ConnectionGroupService } from '../../../rest/service/connection-group.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { NonNullableProperties } from '../../../util/utility-types'; + +/** + * The component for the home page. + */ +@Component({ + selector: 'guac-home', + templateUrl: './home.component.html', + encapsulation: ViewEncapsulation.None +}) +export class HomeComponent implements OnInit { + + /** + * Map of data source identifier to the root connection group of that data + * source, or null if the connection group hierarchy has not yet been + * loaded. + */ + rootConnectionGroups: Record | null = null; + + /** + * TODO + */ + filteredRootConnectionGroups = signal>({}); + + /** + * Array of all connection properties that are filterable. + */ + readonly filteredConnectionProperties: string[] = [ + 'name' + ]; + + /** + * Array of all connection group properties that are filterable. + */ + readonly filteredConnectionGroupProperties: string[] = [ + 'name' + ]; + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private connectionGroupService: ConnectionGroupService, + private dataSourceService: DataSourceService, + private requestService: RequestService) { + } + + /** + * Retrieve root groups and all descendants + */ + ngOnInit(): void { + + this.dataSourceService.apply( + (dataSource: string, connectionGroupID: string) => this.connectionGroupService.getConnectionGroupTree(dataSource, connectionGroupID), + this.authenticationService.getAvailableDataSources(), + ConnectionGroup.ROOT_IDENTIFIER + ) + .then(rootConnectionGroups => { + this.rootConnectionGroups = rootConnectionGroups; + // TODO: remove the next line once the filter is implemented + this.filteredRootConnectionGroups.set(rootConnectionGroups); + }, this.requestService.PROMISE_DIE); + } + + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user interface to be + * useful, false otherwise. + */ + isLoaded(): this is NonNullableProperties { + + return this.rootConnectionGroups !== null; + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/home.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/home.module.ts new file mode 100644 index 0000000000..007ea6c06a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/home.module.ts @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GuacRecentConnectionsComponent } from './components/guac-recent-connections/guac-recent-connections.component'; +import { TranslocoModule } from '@ngneat/transloco'; +import { ConnectionComponent } from './components/connection/connection.component'; +import { ConnectionGroupComponent } from './components/connection-group/connection-group.component'; +import { HomeComponent } from './components/home/home.component'; +import { GroupListModule } from '../group-list/group-list.module'; +import { NavigationModule } from '../navigation/navigation.module'; +import { ClientModule } from '../client/client.module'; +import { RestModule } from '../rest/rest.module'; +import { RouterModule } from '@angular/router'; + + +@NgModule({ + declarations: [ + GuacRecentConnectionsComponent, + ConnectionComponent, + ConnectionGroupComponent, + HomeComponent + ], + imports: [ + CommonModule, + TranslocoModule, + GroupListModule, + NavigationModule, + ClientModule, + RestModule, + RouterModule + ], + exports: [ + HomeComponent, + ] +}) +export class HomeModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/styles/home.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/styles/home.css new file mode 100644 index 0000000000..33b867a9f0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/styles/home.css @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.history-unavailable div.recent-connections { + display: none; +} + +div.recent-connections, +div.clipboardDiv, +div.settings, +div.all-connections { + margin: 1em; + padding: 0; +} + +.all-connections .list-buttons { + text-align: center; + padding: 0; +} + +div.recent-connections { + text-align: center; +} + +div.recent-connections div.connection { + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + -khtml-border-radius: 0.5em; + border-radius: 0.5em; + display: inline-block; + padding: 1em; + margin: 1em; + text-align: center; + max-width: 75%; + overflow: hidden; +} + +a.home-connection, .empty.balancer a.home-connection-group { + display: block; +} + +/* Show only expand/collapse icon for connection groups on home screen ... */ + +.all-connections .connection-group > .caption .icon { + display: none; +} + +.all-connections .connection-group > .caption .icon.expand { + display: inline-block; +} + +/* ... except for empty balancing groups, which should be rendered as if they + * are connections. */ + +.all-connections .connection-group.empty.balancer > .caption .icon { + display: inline-block; +} + +.all-connections .connection-group.empty.balancer > .caption .icon.expand { + display: none; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/ActiveConnection.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/ActiveConnection.ts new file mode 100644 index 0000000000..971e0e797c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/ActiveConnection.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ManagedClient } from '../../client/types/ManagedClient'; + +/** + * A recently-user connection, visible to the current user, with an + * associated history entry. + * + * Used by the guacRecentConnections directive. + */ +export class ActiveConnection { + + /** + * Create a new ActiveConnection object. + * + * @param name + * The human-readable name of this connection. + * + * @param client + * The client associated with this active connection. + */ + constructor(public name: string, public client: ManagedClient) { + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/RecentConnection.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/RecentConnection.ts new file mode 100644 index 0000000000..4e7713f49b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/types/RecentConnection.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { HistoryEntry } from '../../history/HistoryEntry'; + +/** + * A recently-user connection, visible to the current user, with an + * associated history entry. + * + * Used by the guacRecentConnections + * directive. + */ +export class RecentConnection { + + /** + * Creates a new RecentConnection instance. + * + * @param name + * The human-readable name of this connection. + * + * @param entry + * The history entry associated with this recent connection. + */ + constructor(public name: string | undefined, public entry: HistoryEntry) { + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/config/default-headers.interceptor.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/config/default-headers.interceptor.ts new file mode 100644 index 0000000000..a93f1165fd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/config/default-headers.interceptor.ts @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +@Injectable() +export class DefaultHeadersInterceptor implements HttpInterceptor { + + /** + * Set additional headers for GET and PATCH requests. + */ + intercept(request: HttpRequest, next: HttpHandler): Observable> { + + // Do not cache the responses of GET requests + if (request.method === 'GET') { + request = request.clone({ + setHeaders: { + 'Cache-Control': 'no-cache', + 'Pragma': 'no-cache' + } + }); + } + + // Use "application/json" content type by default for PATCH requests + if (request.method === 'PATCH') { + request = request.clone({ + setHeaders: { + 'Content-Type': 'application/json' + } + }); + } + + return next.handle(request); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/index.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/index.module.ts new file mode 100644 index 0000000000..b666ac6b49 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/index.module.ts @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { EscapePipe } from './pipes/escape.pipe'; + +/** + * The module for the root of the application. + */ +@NgModule({ + declarations: [ + EscapePipe + ], + imports: [ + CommonModule + ], + exports: [ + EscapePipe + ] +}) +export class IndexModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/pipes/escape.pipe.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/pipes/escape.pipe.ts new file mode 100644 index 0000000000..555e54c9d6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/pipes/escape.pipe.ts @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Pipe, PipeTransform } from '@angular/core'; + +/** + * A pipe for making sure that a string is URI-encoded and + * that any characters with special meaning for URIs are escaped. + */ +@Pipe({ + name: 'escape' +}) +export class EscapePipe implements PipeTransform { + + transform(value: string): string { + + if (value) + return encodeURIComponent(value); + + return ''; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/apply-patches.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/apply-patches.service.ts new file mode 100644 index 0000000000..38da62c6a5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/apply-patches.service.ts @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import { PatchService } from '../../rest/service/patch.service'; +import { PatchOperation } from '../types/PatchOperation'; +import { DOCUMENT } from '@angular/common'; + +/** + * Applies HTML patches defined within Guacamole extensions to the DOM. + */ +@Injectable({ + providedIn: 'root' +}) +export class ApplyPatchesService { + + /** + * All available HTML patches. + */ + private patches: { operations: PatchOperation[]; elements: Element[] }[] = []; + + /** + * Inject required services. + */ + constructor(@Inject(DOCUMENT) private document: Document, + private patchService: PatchService) { + + // Retrieve all patches + this.patchService.getPatches().subscribe(patches => { + const domParser = new DOMParser(); + // Apply all defined patches + patches.forEach(patch => { + + const parsedPatch = domParser.parseFromString(patch, 'text/html'); + const metaElements = Array.from(parsedPatch.querySelectorAll('meta')); + const otherElements = Array.from(parsedPatch.body.children); + + // Filter out and parse all applicable meta tags + const operations: PatchOperation[] = []; + const elements = [...metaElements, ...otherElements].filter((element) => { + + // Leave non-meta tags untouched + if (element.tagName !== 'META') + return true; + + // Only meta tags having a valid "name" attribute need + // to be filtered + const name = element.getAttribute('name'); + if (!name || !(name in PatchOperation.Operations)) + return true; + + // The "content" attribute must be present for any + // valid "name" meta tag + const content = element.getAttribute('content'); + if (!content) + return true; + + // Filter out and parse meta tag + operations.push(new PatchOperation(name, content)); + return false; + + }); + + // Add patch to list of available patches + this.patches.push({ + operations, + elements + }); + + }); + }); + } + + /** + * Applies each available HTML patch to the DOM. + */ + applyPatches(): void { + + // Apply each operation implied by the meta tags + this.patches.forEach(({operations, elements}) => { + operations.forEach(operation => { + operation.apply([this.document.body], elements); + }); + }); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts new file mode 100644 index 0000000000..1cc53b5367 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core'; +import { DOCUMENT } from "@angular/common"; + +const STYLE_ELEMENT_ID = 'loaded-style-'; + +/** + * Service for dynamically loading additional styles at runtime. + * Used to load the styles of extensions. + */ +@Injectable({ + providedIn: 'root' +}) +export class StyleLoaderService { + + /** + * The Angular renderer used to manipulate the DOM. + */ + private renderer: Renderer2; + + /** + * Inject required Services. + */ + constructor(@Inject(DOCUMENT) private document: Document, + private rendererFactory: RendererFactory2) { + this.renderer = this.rendererFactory.createRenderer(null, null); + } + + /** + * Loads the given CSS file by adding a link element for it to + * the head of the page. + * + * @param styleName + * The name of the CSS file that should be loaded. + */ + loadStyle(styleName: string): void { + + const elementId = STYLE_ELEMENT_ID + styleName + + // If the element already exists there is nothing to do + if (this.document.getElementById(elementId)) + return; + + // Create a link element via Angular's renderer + const styleElement = this.renderer.createElement('link') as HTMLLinkElement; + + // Add the style to the head section + this.renderer.appendChild(this.document.head, styleElement); + + // Set type of the link item and path to the css file + this.renderer.setProperty(styleElement, 'rel', 'stylesheet'); + this.renderer.setProperty(styleElement, 'id', elementId); + // TODO: ?b=${guacamole.build.identifier} + this.renderer.setProperty(styleElement, 'href', styleName); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/animation.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/animation.css new file mode 100644 index 0000000000..c2d48d5e68 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/animation.css @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * fadein: Fade from fully transparent to fully opaque. + */ +@keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-moz-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-webkit-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + +/** + * fadeout: Fade from fully opaque to fully transparent. + */ +@keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +@-moz-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +@-webkit-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} + +/** + * popin: Increase in size and opacity from invisibly tiny and transparent to + * full size and opaque. + */ +@keyframes popin { + from { transform: scale(0); opacity: 0; } + to { transform: scale(1); } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/automatic-login-rejected.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/automatic-login-rejected.css new file mode 100644 index 0000000000..d034f81f10 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/automatic-login-rejected.css @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.automatic-login-rejected-modal guac-modal { + background: white; + z-index: 20; +} + +.automatic-login-rejected-modal .notification { + display: inline-block; + max-width: 5in; + padding: 1em; + width: 100%; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/buttons.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/buttons.css new file mode 100644 index 0000000000..76ef13210f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/buttons.css @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +a.button { + cursor: default; + display: inline-block; +} + +input[type="submit"], button, a.button { + + -webkit-appearance: none; + text-decoration: none; + + background-color: #3C3C3C; + border: 1px solid rgba(0, 0, 0, 0.4); + + color: white; + text-shadow: -1px -1px rgba(0, 0, 0, 0.3); + font-size: 1em; + font-weight: bold; + font-family: Carlito, FreeSans, Helvetica, Arial, sans-serif; + + padding: 0.35em 1em; + min-width: 5em; + margin: 0.25em; + + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25); + +} + +input[type="submit"]:hover, button:hover, a.button:hover { + background-color: #5A5A5A; +} + +input[type="submit"]:active, button:active, a.button:active { + + background-color: #2C2C2C; + + box-shadow: + inset 1px 1px 0.25em rgba(0, 0, 0, 0.25), + -1px -1px 0.25em rgba(0, 0, 0, 0.25), + 1px 1px 0.25em rgba(255, 255, 255, 0.25); +} + +button.danger, a.button.danger { + background: #A43; +} + +button.danger:hover, a.button.danger:hover { + background: #C54; +} + +button.danger:active, a.button.danger:active { + background: #932; +} + +input[type="submit"]:disabled, button:disabled, button.danger:disabled { + background-color: #3C3C3C; + color: rgba(255, 255, 255, 0.5); + opacity: 0.75; +} + +.button.logout, button.logout, +.button.reconnect, button.reconnect, +.button.manage, button.manage, +.button.back, button.back, +.button.home, button.home, +.button.change-password, button.change-password { + position: relative; + padding-left: 1.8em; +} + +.button.logout::before, button.logout::before, +.button.reconnect::before, button.reconnect::before, +.button.manage::before, button.manage::before, +.button.back::before, button.back::before, +.button.home::before, button.home::before, +.button.change-password::before, button.change-password::before { + content: ' '; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 1.8em; + background-repeat: no-repeat; + background-size: 1em; + background-position: 0.5em 0.45em; +} + +.button.logout::before, +button.logout::before { + background-image: url('^images/action-icons/guac-logout.svg'); +} + +.button.reconnect::before, +button.reconnect::before { + background-image: url('^images/circle-arrows.svg'); +} + +.button.manage::before, +button.manage::before { + background-image: url('^images/action-icons/guac-config.svg'); +} + +.button.back::before, +button.back::before { + background-image: url('^images/action-icons/guac-back.svg'); +} + +.button.home::before, +button.home::before { + background-image: url('^images/action-icons/guac-home.svg'); +} + +.button.change-password::before, +button.change-password::before { + background-image: url('^images/action-icons/guac-key.svg'); +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/cloak.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/cloak.css new file mode 100644 index 0000000000..701107bdfe --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/cloak.css @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Hide portions of DOM by default until Angular has finished loading, + * compiling, etc. + */ + +*[ng-cloak], .translate-cloak { + display: none !important; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/fatal-page-error.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/fatal-page-error.css new file mode 100644 index 0000000000..04b9144021 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/fatal-page-error.css @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.fatal-page-error-modal guac-modal { + z-index: 30; +} + +.fatal-page-error { + display: inline-block; + width: 100%; + max-width: 5in; + padding: 1em; + text-align: left; +} + +.fatal-page-error h1 { + text-transform: uppercase; + padding: 0; + padding-right: 1em; +} + +.fatal-page-error h1::before { + content: ' '; + display: inline-block; + background: url('^images/warning.svg'); + background-repeat: no-repeat; + height: 1em; + width: 1em; + background-size: contain; + margin: 0 0.25em; + margin-bottom: -0.2em; +} + +/* Ensure fatal error is initially hidden, fading the error message in when + * needed */ + +.fatal-page-error-outer { + visibility: hidden; + opacity: 0; + transition: opacity, visibility; + transition-duration: 0.25s; +} + +.shown.fatal-page-error-outer { + visibility: visible; + opacity: 1; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/font-carlito.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/font-carlito.css new file mode 100644 index 0000000000..b1b72899c3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/font-carlito.css @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * The Carlito font is licensed under the SIL Open Font License, and thus is + * freely redistributable so long as it is distributed with software. + * + * The SIL OFL license can be found at http://scripts.sil.org/OFL or in the + * "LICENSE" file within the same directory as the Carlito-*.woff font files. + */ + +@font-face { + font-family: 'Carlito'; + font-weight: normal; + font-style: normal; + src: url('^fonts/carlito/Carlito-Regular.woff') format('woff'); +} + +@font-face { + font-family: 'Carlito'; + font-weight: bold; + font-style: normal; + src: url('^fonts/carlito/Carlito-Bold.woff') format('woff'); +} + +@font-face { + font-family: 'Carlito'; + font-weight: normal; + font-style: italic; + src: url('^fonts/carlito/Carlito-Italic.woff') format('woff'); +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/headers.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/headers.css new file mode 100644 index 0000000000..b4d96f66bd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/headers.css @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +h1 { + + margin: 0; + padding: 0.5em; + + font-size: 2em; + vertical-align: middle; + text-align: center; + +} + +h2 { + font-size: 1.25em; + font-weight: bold; + text-transform: uppercase; + padding: 0.5em; + margin: 0; +} + +.header { + + border-bottom: 1px solid rgba(0, 0, 0, 0.125); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.125); + background: rgba(0, 0, 0, 0.04); + + margin-bottom: 1em; + margin-top: 0; + border-top: none; + width: 100%; + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: row; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: horizontal; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: horizontal; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: row; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: row; + +} + +.header.tabbed { + margin-bottom: 0; +} + +.header ~ * .header, +.header ~ .header { + margin-top: 1em; + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.header h2 { + -ms-flex: 1 1 auto; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + flex: 1 1 auto; +} + +.header .filter { + margin: 0; + padding: 0.5em; +} + +.header .filter input { + -moz-border-radius: 0; + -webkit-border-radius: 0; + -khtml-border-radius: 0; + border-radius: 0; + border: none; + border-left: 1px solid rgba(0, 0, 0, 0.125); + background-color: transparent; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/input.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/input.css new file mode 100644 index 0000000000..4141c768cd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/input.css @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +input[type=checkbox], input[type=number], input[type=text], input[type=email], input[type=radio], label, textarea { + -webkit-tap-highlight-color: rgba(128,192,128,0.5); +} + +div.location, input[type=text], input[type=email], input[type=number], input[type=password], textarea { + border: 1px solid #777; + -moz-border-radius: 0.2em; + -webkit-border-radius: 0.2em; + -khtml-border-radius: 0.2em; + border-radius: 0.2em; + width: 100%; + max-width: 16em; + padding: 0.25em; + font-size: 0.8em; + background: white; + cursor: text; +} + +textarea { + max-width: none; + width: 30em; + height: 10em; + white-space: pre; + word-wrap: normal; + overflow: auto; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/lists.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/lists.css new file mode 100644 index 0000000000..80df4917c7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/lists.css @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.user, +.user-group, +.connection-group, +.connection { + cursor: pointer; +} + +.user a, +.user-group a, +.connection a, +.connection-group a { + text-decoration:none; + color: black; +} + +.user a:hover, +.user-group a:hover, +.connection a:hover, +.connection-group a:hover { + text-decoration:none; + color: black; +} + +.user a:visited, +.user-group a:visited, +.connection a:visited, +.connection-group a:visited { + text-decoration:none; + color: black; +} + +.recent-connections .connection:hover { + background: #CDA; +} + +.recent-connections .connection .thumbnail { + display: block; + margin: 0.5em; +} + +.recent-connections .connection .thumbnail > * { + border: 1px solid black; + background: black; + box-shadow: 1px 1px 5px black; + max-width: 75%; + display: inline-block; +} + +.caption * { + vertical-align: middle; +} + +.caption .choice { + display: inline-block; +} + +.caption .name { + margin-left: 0.25em; +} + +.placeholder { + + color: rgba(255, 255, 255, 0.5); + text-shadow: -1px -1px rgba(0, 0, 0, 0.5); + text-align: center; + opacity: 0.5; + + font-size: 2em; + font-weight: bolder; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/loading.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/loading.css new file mode 100644 index 0000000000..8eedffff7c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/loading.css @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.loading { + position: relative; + min-height: 200px; +} + +.view.loading { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.loading * { + visibility: hidden; +} + +.loading::before { + + display: block; + position: absolute; + content: ''; + + /* Dictated by size of image */ + width: 96px; + height: 96px; + margin-left: -48px; + margin-top: -48px; + + top: 50%; + left: 50%; + + background-image: url('^images/cog.svg'); + background-size: 96px 96px; + background-position: center center; + background-repeat: no-repeat; + + animation: spinning-cog 4s linear infinite; + -moz-animation: spinning-cog 4s linear infinite; + -webkit-animation: spinning-cog 4s linear infinite; + +} + +@keyframes spinning-cog { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +@-moz-keyframes spinning-cog { + 0% { -moz-transform: rotate(0deg); } + 100% { -moz-transform: rotate(360deg); } +} + +@-webkit-keyframes spinning-cog { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/logged-out.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/logged-out.css new file mode 100644 index 0000000000..531ef00cd1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/logged-out.css @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.logged-out-modal guac-modal { + background: white; + z-index: 20; +} + +.logged-out-modal .notification { + display: inline-block; + max-width: 3in; + width: 100%; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/other-connections.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/other-connections.css new file mode 100644 index 0000000000..0b3064b009 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/other-connections.css @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#other-connections .client-panel { + + display: none; + position: fixed; + right: 0; + bottom: 0; + + border: 1px solid rgba(255, 255, 255, 0.25); + background: rgba(0, 0, 0, 0.25); + max-width: 100%; + white-space: nowrap; + transition: max-width 0.125s, width 0.125s; + + /* Render above modal status */ + z-index: 20; + +} + +#other-connections .client-panel.has-clients { + display: block; +} + +#other-connections .client-panel.hidden { + max-width: 16px; +} + +#other-connections .client-panel-handle { + + position: absolute; + left: 0; + bottom: 0; + height: 100%; + width: 16px; + z-index: 1; + + background-color: white; + background-repeat: no-repeat; + background-size: contain; + background-position: center center; + background-image: url('^images/arrows/right.svg'); + opacity: 0.5; + +} + +#other-connections .client-panel-handle:hover { + opacity: 0.75; +} + +#other-connections .client-panel.hidden .client-panel-handle { + background-image: url('^images/arrows/left.svg'); +} + +#other-connections .client-panel-connection-list { + + text-align: right; + + margin: 0; + padding: 0; + padding-left: 16px; + + overflow-x: auto; + overflow-y: hidden; + +} + +#other-connections .client-panel-connection { + + display: inline-block; + position: relative; + + margin: 0.5em; + border: 1px solid white; + background: black; + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5); + + animation: 0.1s linear 0s popin; + opacity: 0.5; + transition: opacity 0.25s; + + max-height: 128px; + overflow: hidden; + vertical-align: middle; + +} + +#other-connections .client-panel-connection a[href]::before { + + display: block; + content: ' '; + + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 1; + + background: url('^images/warning-white.svg'); + background-size: 48px; + background-position: center; + background-repeat: no-repeat; + background-color: black; + + opacity: 0; + transition: opacity 0.25s; + +} + +#other-connections .client-panel-connection.needs-attention a[href]::before { + opacity: 0.75; +} + +#other-connections button.close-other-connection { + + position: absolute; + top: 0; + right: 0; + z-index: 2; + + margin: 0; + padding: 4px; + min-width: 0; + border: none; + background: transparent; + box-shadow: none; + text-shadow: none; + + opacity: 0.5; + line-height: 1; + +} + +#other-connections button.close-other-connection:hover { + opacity: 1; +} + +#other-connections button.close-other-connection img { + background: #A43; + border-radius: 18px; + width: 100%; + max-width: 18px; + padding: 3px; +} + +#other-connections button.close-other-connection:hover img { + background: #C54; +} + +#other-connections .client-panel.hidden .client-panel-connection-list { + /* Hide scrollbar when panel is hidden (will be visible through panel + * show/hide button otherwise) */ + overflow-x: hidden; +} + +#other-connections .client-panel.hidden .client-panel-connection { + /* Hide thumbnails when panel is hidden (will be visible through panel + * show/hide button otherwise) */ + visibility: hidden; +} + +#other-connections .client-panel-connection .name { + + position: absolute; + padding: 0.25em 0.5em; + left: 0; + right: 0; + bottom: 0; + z-index: 2; + + text-align: left; + color: white; + background: rgba(0, 0, 0, 0.5); + font-size: 0.75em; + font-weight: bold; + + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + +} + +#other-connections .client-panel-connection:hover { + opacity: 1; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/sorted-tables.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/sorted-tables.css new file mode 100644 index 0000000000..bcc56927f1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/sorted-tables.css @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +table.sorted { + border-collapse: collapse; +} + +table.sorted th { + background: rgba(0, 0, 0, 0.125); + font-weight: normal; +} + +table.sorted th, +table.sorted td { + border: 1px solid #AAA; + padding: 0.5em 1em; +} + +table.sorted th.sortable { + cursor: pointer; +} + +table.sorted th.sort-primary { + font-weight: bold; + padding-right: 0; +} + +table.sorted th.sort-primary:after { + + display: inline-block; + width: 1em; + height: 1em; + vertical-align: middle; + content: ' '; + + background-size: 1em 1em; + background-position: right center; + background-repeat: no-repeat; + background-image: url('^images/arrows/down.svg'); + +} + +table.sorted th.sort-primary.sort-descending:after { + background-image: url('^images/arrows/up.svg'); +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/status.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/status.css new file mode 100644 index 0000000000..7fd63672dc --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/status.css @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.global-status-modal guac-modal { + background: rgba(0, 0, 0, 0.5); +} + +.global-status-modal .notification { + + width: 75%; + max-width: 5in; + margin-left: auto; + margin-right: auto; + overflow: auto; + + text-align: left; + +} + +.global-status-modal .notification .body { + margin: 1.25em; +} + +.global-status-modal .notification .buttons { + margin: 1em; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/ui.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/ui.css new file mode 100644 index 0000000000..3a3278f927 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/styles/ui.css @@ -0,0 +1,283 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +* { + -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +body { + background: white; + font-family: Carlito, FreeSans, Helvetica, Arial, sans-serif; + padding: 0; + margin: 0; +} + +img { + border: none; + vertical-align: middle; +} + +div.section { + margin: 1em; + padding: 0; +} + +/* + * List elements + */ + +.list-item { + + display: block; + text-align: left; + cursor: pointer; + + position: relative; + +} + +.icon { + width: 24px; + height: 24px; + background-size: 16px 16px; + -moz-background-size: 16px 16px; + -webkit-background-size: 16px 16px; + -khtml-background-size: 16px 16px; + background-repeat: no-repeat; + background-position: center center; + display: inline-block; + vertical-align: middle; +} + +.list-item * { + vertical-align: middle; +} + +.list-item .caption { + padding: 0.1em; +} + +.list-item .caption:after { + clear: right; + content: ""; + display: block; +} + +.list-item .name { + color: black; + font-weight: normal; + padding: 0.1em; + margin-left: 0.25em; +} + +.list-item .usage { + float: right; + font-style: italic; + color: gray; +} + +.list-item.in-use { + opacity: 0.5; +} + +.choice .list-item.in-use { + opacity: 1; +} + +/* + * List element styling + */ + +.list-item.selected { + background: #DEB; +} + +.caption.active * { + opacity: 0.5; +} + +.caption .activeUserCount { + font-style: italic; + margin-right: 1em; + float: right; +} + +.list-item:not(.selected) .caption:hover { + background: #CDA; +} + +.choice .list-item { + display: inline-block; +} + +.choice input[type='checkbox'] { + vertical-align: top; + height: 24px; + padding: 0; + margin: 0; +} + +.disabled .list-item:not(.selected) { + opacity: 0.25; +} + +.disabled .list-item:not(.selected):hover { + background: inherit; +} + +/* + * List element icons + */ + +.icon.user { + background-image: url('^images/user-icons/guac-user.svg'); +} + +.icon.user.add { + background-image: url('^images/action-icons/guac-user-add.svg'); +} + +.icon.user-group { + background-image: url('^images/user-icons/guac-user-group.svg'); +} + +.icon.user-group.add { + background-image: url('^images/action-icons/guac-user-group-add.svg'); +} + +.icon.connection { + background-image: url('^images/protocol-icons/guac-plug.svg'); +} + +.icon.connection.add { + background-image: url('^images/action-icons/guac-monitor-add.svg'); +} + +.connection .icon, +.connection-group .icon, +.sharing-profile .icon { + display: inline-block; + width: 24px; + height: 24px; + background-size: 16px 16px; + -moz-background-size: 16px 16px; + -webkit-background-size: 16px 16px; + -khtml-background-size: 16px 16px; + background-repeat: no-repeat; + background-position: center center; +} + +.connection-group > .caption .icon { + background-image: url('^images/folder-closed.svg'); +} + +.connection-group.expanded > .caption .icon { + background-image: url('^images/folder-open.svg'); +} + +.connection .icon { + background-image: url('^images/protocol-icons/guac-plug.svg'); +} + +.connection .icon.kubernetes, +.connection .icon.ssh, +.connection .icon.telnet { + background-image: url('^images/protocol-icons/guac-text.svg'); +} + +.connection .icon.vnc, +.connection .icon.rdp { + background-image: url('^images/protocol-icons/guac-monitor.svg'); +} + +.sharing-profile .icon { + background-image: url('^images/share.svg'); +} + +/* + * Groups + */ + +.expandable > .children { + margin-left: 13px; + padding-left: 13px; +} + +.connection-group.empty.balancer .icon { + background-image: url('^images/protocol-icons/guac-monitor.svg'); +} + +.expandable.expanded > .children > .list-item { + position: relative; +} + +.expandable.expanded > .children > .list-item:before, +.expandable.expanded > .children > .list-item:after { + display: block; + content: ' '; + position: absolute; + z-index: -1; +} + +.expandable.expanded > .children > .list-item:before { + border-left: 1px solid #BBB; + left: -13px; + top: -0.75em; + bottom: 0; +} + +.expandable.expanded > .children > .list-item:last-child:before { + height: 1.5em; +} + +.expandable.expanded > .children > .list-item:after { + display: block; + content: ' '; + border-bottom: 1px solid #BBB; + left: -13px; + width: 13px; + top: 0.75em; +} + +.expandable > .caption .icon.expand { + background-image: url('^images/group-icons/guac-closed.svg'); +} + +.expandable.expanded > .caption .icon.expand { + background-image: url('^images/group-icons/guac-open.svg'); +} + +.expandable.empty > .caption .icon.expand { + opacity: 0.25; + background-image: url('^images/group-icons/guac-open.svg'); +} + +.history th, +.history td { + padding-left: 1em; + padding-right: 1em; +} + +.buttons { + text-align: center; + margin: 1em; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/types/PatchOperation.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/types/PatchOperation.ts new file mode 100644 index 0000000000..5567bf97cb --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/types/PatchOperation.ts @@ -0,0 +1,181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Represents a single HTML patching operation which will be applied + * to the raw HTML of a template. The name of the patching operation + * MUST be one of the valid names defined within + * PatchOperation.Operations. + */ +export class PatchOperation { + + /** + * Create a new PatchOperation. + * + * @param name + * The name of the patching operation that will be applied. Valid + * names are defined within PatchOperation.Operations. + * + * @param selector + * The CSS selector which determines which elements within a + * template will be affected by the patch operation. + */ + constructor(private name: string, private selector: string) { + } + + /** + * Applies this patch operation to the template defined by the + * given root element, which must be a single element wrapped by + * JQuery. + * + * @param root + * The root element of the template to which + * this patch operation should be applied. + * + * @param elements + * The elements which should be applied by the patch + * operation. For example, if the patch operation is inserting + * elements, these are the elements that will be inserted. + */ + apply(root: Element[], elements: Element[]): void { + PatchOperation.Operations[this.name](root, this.selector, elements); + } + + /** + * Mapping of all valid patch operation names to their corresponding + * implementations. Each implementation accepts the same three + * parameters: the root element of the template being patched, the CSS + * selector determining which elements within the template are patched, + * and an array of elements which make up the body of the patch. + */ + static Operations: Record = { + + /** + * Inserts the given elements before the elements matched by the + * provided CSS selector. + */ + 'before': (root, selector, elements) => { + root.forEach(rootElement => { + const targets = rootElement.querySelectorAll(selector); + targets.forEach(target => { + elements.forEach(element => { + target.before(element); + }); + }); + }); + }, + + /** + * Inserts the given elements after the elements matched by the + * provided CSS selector. + */ + 'after': (root, selector, elements) => { + root.forEach(rootElement => { + const targets = rootElement.querySelectorAll(selector); + targets.forEach(target => { + elements.forEach(element => { + target.after(element); + }); + }); + }); + }, + + /** + * Replaces the elements matched by the provided CSS selector with + * the given elements. + */ + 'replace': (root, selector, elements) => { + root.forEach(rootElement => { + const targets = rootElement.querySelectorAll(selector); + targets.forEach(target => { + target.replaceWith(...elements); + }); + }); + }, + + /** + * Inserts the given elements within the elements matched by the + * provided CSS selector, before any existing children. + */ + 'before-children': (root, selector, elements) => { + root.forEach(rootElement => { + const targets = rootElement.querySelectorAll(selector); + targets.forEach(target => { + target.prepend(...elements); + }); + }); + }, + + /** + * Inserts the given elements within the elements matched by the + * provided CSS selector, after any existing children. + */ + 'after-children': (root, selector, elements) => { + root.forEach(rootElement => { + const targets = rootElement.querySelectorAll(selector); + targets.forEach(target => { + target.append(...elements); + }); + }); + }, + + /** + * Inserts the given elements within the elements matched by the + * provided CSS selector, replacing any existing children. + */ + 'replace-children': (root, selector, elements) => { + root.forEach(rootElement => { + const targets = rootElement.querySelectorAll(selector); + targets.forEach(target => { + while (target.firstChild) { + target.removeChild(target.firstChild); + } + elements.forEach(element => { + target.appendChild(element); + }); + }); + }); + + } + + }; + +} + +export namespace PatchOperation { + + /** + * A function which applies a specific patch operation to the + * given element. + * + * @param {Element[]} root + * The root element of the template being patched. + * + * @param {String} selector + * The CSS selector which determines where this patch operation + * should be applied within the template defined by root. + * + * @param {Element[]} elements + * The contents of the patch which should be applied to the + * template defined by root at the locations selected by the + * given CSS selector. + */ + export type PatchOperationFunction = (root: Element[], selector: string, elements: Element[]) => void; +} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.html new file mode 100644 index 0000000000..fa80be1551 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.html @@ -0,0 +1,28 @@ + +
      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.ts new file mode 100644 index 0000000000..dce3d149a0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-filter/guac-filter.component.ts @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +/** + * A component which provides a filtering text input field which automatically + * produces a filtered subset of the elements of some given array. + */ +@Component({ + selector: 'guac-filter', + templateUrl: './guac-filter.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacFilterComponent { + + /** + * The property to which a subset of the provided array will be + * assigned. + */ + searchStringChange: BehaviorSubject = new BehaviorSubject(''); + + /** + * The placeholder text to display within the filter input field + * when no filter has been provided. + */ + @Input() placeholder?: string; + + /** + * The filter search string to use to restrict the displayed items. + */ + protected searchString: string | null = null; + + /** + * Recompile and refilter when pattern is changed + */ + searchStringChanged(searchString: string) { + this.searchStringChange.next(searchString); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.html new file mode 100644 index 0000000000..daf9e51839 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.html @@ -0,0 +1,45 @@ + +
      + + +
      +
      + + +
      ...
      + + +
        +
      • {{pageNumber}}
      • +
      + + +
      ...
      + + +
      +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts new file mode 100644 index 0000000000..8fad637a73 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts @@ -0,0 +1,276 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +/** + * The default size of a page, if not provided via the pageSize + * attribute. + */ +const DEFAULT_PAGE_SIZE: number = 10; + +/** + * The default maximum number of page choices to provide, if a + * value is not provided via the pageCount attribute. + */ +const DEFAULT_PAGE_COUNT: number = 11; + +/** + * Event data emitted by GuacPagerComponent when the user selects a + * new page. + */ +export interface PagerEvent { + + /** + * The index of the page that is currently selected. + */ + pageIndex: number; + + /** + * The current page size. + */ + pageSize: number; + + /** + * The index of the page that was previously selected. + */ + previousPageIndex: number; +} + +/** + * A component which provides pagination controls, along with a paginated + * subset of the elements of some given array. + */ +@Component({ + selector: 'guac-pager', + templateUrl: './guac-pager.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacPagerComponent implements OnChanges { + + /** + * The property to which a subset of the provided array will be + * assigned. + * TODO + */ + page: BehaviorSubject = new BehaviorSubject({pageIndex: 0, pageSize: 0, previousPageIndex: 0}); + + /** + * The maximum number of items per page. + * + * @default {@link DEFAULT_PAGE_SIZE} + */ + @Input() pageSize: number = DEFAULT_PAGE_SIZE; + + /** + * The maximum number of page choices to provide, regardless of the + * total number of pages. + * + * @default {@link DEFAULT_PAGE_COUNT} + */ + @Input() pageCount: number = DEFAULT_PAGE_COUNT; + + /** + * The length of the array to paginate. + */ + @Input({required: true}) length!: number | null; + + /** + * The number of the first selectable page. + */ + firstPage: number = 1; + + /** + * The number of the page immediately before the currently-selected + * page. + */ + previousPage: number = 1; + + /** + * The number of the currently-selected page. + */ + currentPage: number = 1; + + /** + * The number of the page immediately after the currently-selected + * page. + */ + nextPage: number = 1; + + /** + * The number of the last selectable page. + */ + lastPage: number = 1; + + /** + * An array of relevant page numbers that the user may want to jump + * to directly. + */ + pageNumbers: number[] = []; + + /** + * Updates the displayed page number choices. + */ + private updatePageNumbers(): void { + + // Get page count + const pageCount = this.pageCount || DEFAULT_PAGE_COUNT; + + // Determine start/end of page window + let windowStart = this.currentPage - (pageCount - 1) / 2; + let windowEnd = windowStart + pageCount - 1; + + // Shift window as necessary if it extends beyond the first page + if (windowStart < this.firstPage) { + windowEnd = Math.min(this.lastPage, windowEnd - windowStart + this.firstPage); + windowStart = this.firstPage; + } + + // Shift window as necessary if it extends beyond the last page + else if (windowEnd > this.lastPage) { + windowStart = Math.max(1, windowStart - windowEnd + this.lastPage); + windowEnd = this.lastPage; + } + + // Generate list of relevant page numbers + this.pageNumbers = []; + for (let pageNumber = windowStart; pageNumber <= windowEnd; pageNumber++) + this.pageNumbers.push(pageNumber); + + } + + /** + * Iterates through the bound items array, splitting it into pages + * based on the current page size. + */ + private updatePages(): void { + + // Get current items and page size + const length = this.length || 0; + const pageSize = this.pageSize || DEFAULT_PAGE_SIZE; + + // Update minimum and maximum values + this.firstPage = 1; + this.lastPage = Math.max(1, Math.ceil(length / pageSize)); + + // Select an appropriate page + const adjustedCurrentPage = Math.min(this.lastPage, Math.max(this.firstPage, this.currentPage)); + this.selectPage(adjustedCurrentPage); + + } + + /** + * Selects the page having the given number, assigning that page to + * the property bound to the page attribute. If no such page + * exists, the property will be set to undefined instead. Valid + * page numbers begin at 1. + * + * @param page + * The number of the page to select. Valid page numbers begin + * at 1. + */ + selectPage(page: number): void { + + // Select the chosen page + this.currentPage = page; + this.page.next({pageIndex: page - 1, pageSize: this.pageSize, previousPageIndex: this.previousPage}); + + // Update next/previous page numbers + this.nextPage = Math.min(this.lastPage, this.currentPage + 1); + this.previousPage = Math.max(this.firstPage, this.currentPage - 1); + + // Update which page numbers are shown + this.updatePageNumbers(); + + } + + /** + * Returns whether the given page number can be legally selected + * via selectPage(), resulting in a different page being shown. + * + * @param page + * The page number to check. + * + * @returns + * true if the page having the given number can be selected, + * false otherwise. + */ + canSelectPage(page: number): boolean { + return page !== this.currentPage + && page >= this.firstPage + && page <= this.lastPage; + } + + /** + * Returns whether the page having the given number is currently + * selected. + * + * @param page + * The page number to check. + * + * @returns + * true if the page having the given number is currently + * selected, false otherwise. + */ + isSelected(page: number): boolean { + return page === this.currentPage; + } + + /** + * Returns whether pages exist before the first page listed in the + * pageNumbers array. + * + * @returns + * true if pages exist before the first page listed in the + * pageNumbers array, false otherwise. + */ + hasMorePagesBefore(): boolean { + const firstPageNumber = this.pageNumbers[0]; + return firstPageNumber !== this.firstPage; + } + + /** + * Returns whether pages exist after the last page listed in the + * pageNumbers array. + * + * @returns + * true if pages exist after the last page listed in the + * pageNumbers array, false otherwise. + */ + hasMorePagesAfter(): boolean { + const lastPageNumber = this.pageNumbers[this.pageNumbers.length - 1]; + return lastPageNumber !== this.lastPage; + } + + ngOnChanges(changes: SimpleChanges): void { + + // Update available pages when available items or page count is changed + if (changes['length'] || changes['pageSize']) { + this.updatePages(); + } + + // Update available page numbers when page count is changed + if (changes['length'] || changes['pageCount']) { + this.updatePageNumbers(); + } + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.html new file mode 100644 index 0000000000..f32ed67c07 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.html @@ -0,0 +1,21 @@ + +
      + {{displayName}} +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.ts new file mode 100644 index 0000000000..76687a4efd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-user-item/guac-user-item.component.ts @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { TranslocoService } from '@ngneat/transloco'; +import { AuthenticationResult } from '../../../auth/types/AuthenticationResult'; +import { take } from 'rxjs'; + +/** + * A component which graphically represents an individual user. + */ +@Component({ + selector: 'guac-user-item', + templateUrl: './guac-user-item.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacUserItemComponent implements OnChanges { + + /** + * The username of the user represented by this guacUserItem. + */ + @Input() username?: string | undefined; + + /** + * The string to display when listing the user having the provided + * username. Generally, this will be the username itself, but can + * also be an arbitrary human-readable representation of the user, + * or null if the display name is not yet determined. + */ + displayName: string | null; + + constructor(private translocoService: TranslocoService) { + this.displayName = null; + } + + /** + * Returns whether the username provided to this directive denotes + * a user that authenticated anonymously. + * + * @returns {Boolean} + * true if the username provided represents an anonymous user, + * false otherwise. + */ + isAnonymous(): boolean { + return this.username === AuthenticationResult.ANONYMOUS_USERNAME; + } + + ngOnChanges(changes: SimpleChanges): void { + + // Update display name whenever provided username changes + if (changes['username']) { + + const username = changes['username'].currentValue as string; + + // If the user is anonymous, pull the display name for anonymous + // users from the translation service + if (this.isAnonymous()) { + this.translocoService.selectTranslate('LIST.TEXT_ANONYMOUS_USER') + .pipe(take(1)) + .subscribe(anonymousDisplayName => { + this.displayName = anonymousDisplayName; + }); + } + + // For all other users, use the username verbatim + else + this.displayName = username; + } + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/directives/guac-sort-order.directive.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/directives/guac-sort-order.directive.ts new file mode 100644 index 0000000000..36672614a5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/directives/guac-sort-order.directive.ts @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Directive, + ElementRef, + EventEmitter, + HostListener, + Input, + OnChanges, + OnInit, + Output, + Renderer2, + SimpleChanges +} from '@angular/core'; +import { SortOrder } from '../types/SortOrder'; + +/** + * Updates the priority of the sorting property given by "guacSortProperty" + * within the SortOrder object given by "guacSortOrder". The CSS classes + * "sort-primary" and "sort-descending" will be applied to the associated + * element depending on the priority and sort direction of the given property. + * + * The associated element will automatically be assigned the "sortable" CSS + * class. + */ +@Directive({ + selector: '[guacSortOrder]' +}) +export class GuacSortOrderDirective implements OnInit, OnChanges { + + /** + * The object defining the sorting order. + */ + @Input({alias: 'guacSortOrder', required: true}) sortOrder!: SortOrder; + @Output('guacSortOrderChange') sortOrderChange = new EventEmitter(); + + /** + * The name of the property whose priority within the sort order + * is controlled by this directive. + */ + @Input('guacSortProperty') sortProperty!: string; + + /** + * Update sort order when clicked. + */ + @HostListener('click') onClick() { + this.sortOrder.togglePrimary(this.sortProperty); + this.onSortOrderChange(); + } + + /** + * The element associated with this directive. + */ + private readonly element: Element + + /** + * Inject required services and references. + */ + constructor(elementRef: ElementRef, private renderer: Renderer2) { + this.element = elementRef.nativeElement; + } + + /** + * Assign "sortable" class to associated element + */ + ngOnInit(): void { + this.renderer.addClass(this.element, 'sortable'); + } + + /** + * Returns whether the sort property defined via the + * "guacSortProperty" attribute is the primary sort property of + * the associated sort order. + * + * @returns + * true if the sort property defined via the + * "guacSortProperty" attribute is the primary sort property, + * false otherwise. + */ + private isPrimary(): boolean { + return this.sortOrder.primary === this.sortProperty; + } + + /** + * Returns whether the primary property of the sort order is + * sorted in descending order. + * + * @returns + * true if the primary property of the sort order is sorted in + * descending order, false otherwise. + */ + private isDescending(): boolean { + return this.sortOrder.descending; + } + + ngOnChanges(changes: SimpleChanges): void { + + if (changes['sortOrder']) { + this.onSortOrderChange(); + } + + } + + onSortOrderChange(): void { + // Add/remove "sort-primary" class depending on sort order + const primary = this.isPrimary(); + + if (primary) + this.renderer.addClass(this.element, 'sort-primary'); + else + this.renderer.removeClass(this.element, 'sort-primary'); + + // Add/remove "sort-descending" class depending on sort order + const descending = this.isDescending(); + + if (descending) + this.renderer.addClass(this.element, 'sort-descending'); + else + this.renderer.removeClass(this.element, 'sort-descending'); + + this.sortOrderChange.emit(this.sortOrder); + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/list.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/list.module.ts new file mode 100644 index 0000000000..fc64157826 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/list.module.ts @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GuacFilterComponent } from './components/guac-filter/guac-filter.component'; +import { FormsModule } from '@angular/forms'; +import { GuacPagerComponent } from './components/guac-pager/guac-pager.component'; +import { GuacSortOrderDirective } from './directives/guac-sort-order.directive'; +import { GuacUserItemComponent } from './components/guac-user-item/guac-user-item.component'; + +/** + * Module for displaying, sorting, and filtering the contents of a list, split + * into multiple pages. + */ +@NgModule({ + declarations: [ + GuacFilterComponent, + GuacPagerComponent, + GuacSortOrderDirective, + GuacUserItemComponent + ], + imports: [ + CommonModule, + FormsModule + ], + exports: [ + GuacFilterComponent, + GuacPagerComponent, + GuacSortOrderDirective, + GuacUserItemComponent + ] +}) +export class ListModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts new file mode 100644 index 0000000000..7367ba0007 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts @@ -0,0 +1,213 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; +import { DataSourceBuilderService } from './data-source-builder.service'; +import { testScheduler } from '../../util/test-helper'; +import { from, map, of } from 'rxjs'; +import { SortOrder } from '../types/SortOrder'; +import { PagerEvent } from '../components/guac-pager/guac-pager.component'; +import { DataSource } from '../types/DataSource'; + +interface Person { + id: number; + name: string; +} + +describe('DataSourceBuilderService', () => { + let service: DataSourceBuilderService; + const source: Person[] = [ + {id: 1, name: 'John'}, + {id: 2, name: 'Jane'}, + {id: 3, name: 'Jack'}, + {id: 4, name: 'Jill'}, + {id: 5, name: 'Joe'}, + {id: 6, name: 'Jenny'}, + {id: 7, name: 'Jim'}, + {id: 8, name: 'Jen'}, + {id: 9, name: 'Jesse'}, + {id: 10, name: 'Jasmine'} + ]; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(DataSourceBuilderService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + describe('source', () => { + + it('should return source and complete if noting else is configured', () => { + testScheduler.run(({expectObservable}) => { + + const dataSource = service.getBuilder().source(source).build(); + + const data = dataSource.data; + + expectObservable(data).toBe('(0|)', [source]); + + }); + }); + + }); + describe('totalLength', () => { + + + it('should return source length if no filter is configured', () => { + testScheduler.run(({expectObservable}) => { + + const dataSource = service.getBuilder().source(source).build(); + const length = dataSource.totalLength; + + expectObservable(length).toBe('(a|)', {a: source.length}); + + }); + }); + + + it('should return length filtered source', () => { + testScheduler.run(({expectObservable}) => { + + const dataSource: DataSource = service.getBuilder() + .source(source) + .filter(of('ji')) + .build(); + + const length = dataSource.totalLength; + + // TODO: implement correct filtering expectObservable(length).toBe('(a|)', {a: 2}); + + }); + }); + + }); + + describe('sort', () => { + + it('should return source sorted by name ascending', () => { + testScheduler.run(({expectObservable}) => { + + const dataSource: DataSource = service.getBuilder() + .source(source) + .sort(of(new SortOrder(['name']))) + .build(); + + + const data = dataSource.data + // Map to ids + .pipe(map(data => data.map(p => p.id))); + + expectObservable(data).toBe('(0|)', [[3, 2, 10, 8, 6, 9, 4, 7, 5, 1]]); + + }); + }); + + it('should return source sorted by name descending', () => { + testScheduler.run(({expectObservable}) => { + + const dataSource: DataSource = service.getBuilder() + .source(source) + .sort(of(new SortOrder(['-name']))) + .build(); + + const data = dataSource.data + // Map to ids + .pipe(map(data => data.map(p => p.id))); + + expectObservable(data).toBe('(0|)', [[1, 5, 7, 4, 9, 6, 8, 10, 2, 3]]); + + }); + }); + + }); + + describe('paginate', () => { + + + it('should return source paginated', () => { + + testScheduler.run(({expectObservable}) => { + + const pageEvents: PagerEvent[] = [ + {pageIndex: 0, pageSize: 3, previousPageIndex: 0}, + {pageIndex: 1, pageSize: 3, previousPageIndex: 0}, + {pageIndex: 2, pageSize: 3, previousPageIndex: 1}, + {pageIndex: 3, pageSize: 3, previousPageIndex: 2}, + ] + + + const dataSource: DataSource = service.getBuilder() + .source(source) + .paginate(from(pageEvents)) + .build(); + + const page = dataSource.data + // Map to ids + .pipe(map(data => data.map(p => p.id))); + + expectObservable(page).toBe('(0 1 2 3|)', [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9], + [10] + ]); + + }); + + }); + + }); + + + describe('updateSource', () => { + + it('should update source and emit new data', () => { + testScheduler.run(({expectObservable, flush}) => { + + const firstSource: Person[] = source.slice(0, 5); + const secondSource: Person[] = source.slice(5, 10); + + const dataSource: DataSource = service.getBuilder() + .source(firstSource) + .sort(of(new SortOrder(['-name']))) + .build(); + + let data = dataSource.data + // Map to ids + .pipe(map(data => data.map(p => p.id))); + + expectObservable(data).toBe('(0|)', [[1, 5, 4, 2, 3]]); + + flush(); + + dataSource.updateSource(secondSource); + data = dataSource.data + // Map to ids + .pipe(map(data => data.map(p => p.id))); + + expectObservable(data).toBe('(0|)', [[7, 9, 6, 8, 10]]); + + }); + }); + + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.ts new file mode 100644 index 0000000000..153996ee62 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.ts @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { SortService } from './sort.service'; +import { FilterService } from './filter.service'; +import { PaginationService } from './pagination.service'; +import { DataSourceBuilder } from '../types/DataSourceBuilder'; + +/** + * A service that allows to create a DataSource instance by using a builder. + * A data source can be configured with a filter, a sort order and pagination. + */ +@Injectable({ + providedIn: 'root' +}) +export class DataSourceBuilderService { + + /** + * Inject required services. + */ + constructor(private sortService: SortService, + private filterService: FilterService, + private paginationService: PaginationService) { + } + + /** + * Create a new DataSourceBuilder instance. + */ + getBuilder(): DataSourceBuilder { + return new DataSourceBuilder(this.sortService, this.filterService, this.paginationService); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/filter.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/filter.service.ts new file mode 100644 index 0000000000..795351d1e2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/filter.service.ts @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +/** + * TODO: Document + * Replacement for AngularJS filter function https://docs.angularjs.org/api/ng/filter/filter + */ +@Injectable({ + providedIn: 'root' +}) +export class FilterService { + + constructor() { + } + + /** + * TODO: Document + * @param target + * @param filter + */ + applyFilter(target: T[] | null, filter: string): T[] { + + if (!target) + return []; + + return target.filter((element) => { + return element.toString().toLowerCase().includes(filter.toLowerCase()); + }); + } + + /** + * TODO: Document + * @param target + * @param predicate + */ + filterByPredicate(target: T[] | null, predicate: Function): T[] { + if (!target) + return []; + + return target.filter(predicate as any); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/pagination.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/pagination.service.ts new file mode 100644 index 0000000000..6eef31bc55 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/pagination.service.ts @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +/** + * Service for the pagination of an arbitrary array. + */ +@Injectable({ + providedIn: 'root' +}) +export class PaginationService { + + /** + * Extracts a page from the given source. + * + * @param source + * The source from which the page should be extracted. + * + * @param pageIndex + * The index of the page that should be returned. + * + * @param pageSize + * The size of each page. + * + * @returns + * The page with the given index. + */ + paginate(source: T[] | null, pageIndex: number, pageSize: number): T[] { + + if (!source) + return []; + + const startIndex = pageIndex * pageSize; + const endIndex = startIndex + pageSize; + + return source.slice(startIndex, endIndex); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.spec.ts new file mode 100644 index 0000000000..98f9a56c97 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.spec.ts @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SortService } from './sort.service'; +import { TestBed } from '@angular/core/testing'; + +describe('orderByPredicate', () => { + + let service: SortService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [SortService] + }); + + service = TestBed.get(SortService); + }); + + + it('should sort the collection in ascending order based on a single predicate', () => { + const collection = [ + {name: 'John', age: 30}, + {name: 'Jane', age: 25}, + {name: 'Bob', age: 35}, + ]; + const predicates = ['age']; + + const result = service.orderByPredicate(collection, predicates); + + expect(result).toEqual([ + {name: 'Jane', age: 25}, + {name: 'John', age: 30}, + {name: 'Bob', age: 35}, + ]); + }); + + it('should sort the collection in descending order based on a single predicate', () => { + const collection = [ + {name: 'John', age: 30}, + {name: 'Jane', age: 25}, + {name: 'Bob', age: 35}, + ]; + const predicates = ['-age']; + + const result = service.orderByPredicate(collection, predicates); + + expect(result).toEqual([ + {name: 'Bob', age: 35}, + {name: 'John', age: 30}, + {name: 'Jane', age: 25}, + ]); + }); + + it('should sort the collection based on multiple predicates', () => { + const collection = [ + {name: 'John', age: 30, salary: 50000}, + {name: 'Jane', age: 25, salary: 60000}, + {name: 'Bob', age: 35, salary: 40000}, + {name: 'Alice', age: 25, salary: 50000}, + ]; + const predicates = ['age', '-salary']; + + const result = service.orderByPredicate(collection, predicates); + + expect(result).toEqual([ + {name: 'Jane', age: 25, salary: 60000}, + {name: 'Alice', age: 25, salary: 50000}, + {name: 'John', age: 30, salary: 50000}, + {name: 'Bob', age: 35, salary: 40000}, + ]); + }); + + it('should return the same collection if no predicates are provided', () => { + const collection = [ + {name: 'John', age: 30}, + {name: 'Jane', age: 25}, + {name: 'Bob', age: 35}, + ]; + const predicates: string[] = []; + + const result = service.orderByPredicate(collection, predicates); + + expect(result).toEqual(collection); + }); + + it('should return an empty collection if the input collection is empty', () => { + const collection: any[] = []; + const predicates = ['age']; + + const result = service.orderByPredicate(collection, predicates); + + expect(result).toEqual([]); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.ts new file mode 100644 index 0000000000..5386bc73be --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/sort.service.ts @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import orderBy from 'lodash/orderBy'; +import { compile } from 'angular-expressions'; + +/** + * TODO: Document + */ +@Injectable({ + providedIn: 'root' +}) +export class SortService { + + constructor() { + } + + /** + * TODO Document + * @param target + * @param iteratees + */ + orderBy(target: T[], iteratees?: (keyof T)[]): T[] { + return orderBy(target, iteratees); + } + + /** + * Sorts the given collection by the given predicate. + * The predicate is a string (AngularJS expression) that can be compiled into a function. + * This function will be evaluated against each item and the result will be used for sorting. + * The predicate can be prefixed with a minus sign to indicate descending order. + * + * @param collection + * The collection to sort. + * + * @param predicates + * A list of predicates to be used for sorting. + * + * @returns + * The sorted collection. + */ + orderByPredicate(collection: T[] | null | undefined, predicates: string[]): T[] { + if (!collection) { + return []; + } + + const orders = predicates.map(p => p.startsWith('-') ? 'desc' : 'asc'); + + const expressions = predicates.map(p => { + const expression = p.startsWith('-') || p.startsWith('+') ? p.substring(1) : p; + // Compare strings in a case-insensitive manner + return (item: T) => { + const value = compile(expression)(item); + + if (value?.toString) + return value.toString().toLowerCase(); + + return null; + }; + }); + + return orderBy(collection, expressions, orders); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/filter.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/filter.css new file mode 100644 index 0000000000..67d2aced3f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/filter.css @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.filter { + margin: 0.5em 0; +} + +.filter .search-string { + background-image: url('^images/magnifier.svg'); + background-repeat: no-repeat; + background-size: 1.75em; + background-position: 0.25em center; + padding: 0.5em; + padding-left: 2.25em; + width: 100%; + max-width: none; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/pager.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/pager.css new file mode 100644 index 0000000000..6b65f202aa --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/pager.css @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.pager { + text-align: center; + margin: 1em; +} + +.pager .page-numbers { + display: inline-block; + margin: 0; + padding: 0; +} + +.pager .first-page, +.pager .prev-page, +.pager .set-page, +.pager .next-page, +.pager .last-page { + cursor: pointer; + vertical-align: middle; +} + +.pager .first-page.disabled, +.pager .prev-page.disabled, +.pager .set-page.disabled, +.pager .next-page.disabled, +.pager .last-page.disabled { + cursor: auto; + opacity: 0.25; +} + +.pager .set-page, +.pager .more-pages:not([hidden]) { + display: inline-block; + padding: 0.25em; + text-align: center; + min-width: 1.25em; +} + +.pager .set-page { + text-decoration: underline; +} + +.pager .set-page.current { + cursor: auto; + text-decoration: none; + font-weight: bold; + background: rgba(0, 0, 0, 0.1); + border: 1px solid rgba(0, 0, 0, 0.1); + -moz-border-radius: 0.2em; + -webkit-border-radius: 0.2em; + -khtml-border-radius: 0.2em; + border-radius: 0.2em; +} + +.pager .icon.first-page { + background-image: url('^images/action-icons/guac-first-page.svg'); +} + +.pager .icon.prev-page { + background-image: url('^images/action-icons/guac-prev-page.svg'); +} + +.pager .icon.next-page { + background-image: url('^images/action-icons/guac-next-page.svg'); +} + +.pager .icon.last-page { + background-image: url('^images/action-icons/guac-last-page.svg'); +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/user-item.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/user-item.css new file mode 100644 index 0000000000..ffedd39023 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/styles/user-item.css @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.user-item.anonymous { + font-style: italic; + opacity: 0.5; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSource.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSource.ts new file mode 100644 index 0000000000..ddac550c09 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSource.ts @@ -0,0 +1,163 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { combineLatest, finalize, map, Observable, of, Subject, takeUntil } from 'rxjs'; +import { SortService } from '../services/sort.service'; +import { FilterService } from '../services/filter.service'; +import { PaginationService } from '../services/pagination.service'; +import { SortOrder } from './SortOrder'; +import { PagerEvent } from '../components/guac-pager/guac-pager.component'; +import { FilterPattern } from './FilterPattern'; + +/** + * A data source which wraps a source array and applies filtering, sorting and pagination. + */ +export class DataSource { + + /** + * An observable which emits the filtered, sorted and paginated data of the source array. + */ + data!: Observable; + + /** + * An observable which emits the length of the filtered source array. + */ + totalLength!: Observable; + + /** + * The pattern object to use when filtering items. + */ + private readonly filterPattern: FilterPattern | null = null; + + /** + * A subject which emits when the currently loaded data is replaced by new data. + */ + private dataComplete!: Subject; + + /** + * Creates a new data source containing the given source array. + */ + constructor(private sortService: SortService, + private filterService: FilterService, + private paginationService: PaginationService, + private source: T[], + private searchString: Observable | null, + private filterProperties: string[] | null, + private sort: Observable | null, + private paginate: Observable | null) { + + if (filterProperties !== null) + this.filterPattern = new FilterPattern(filterProperties); + + this.computeData(); + } + + /** + * TODO: Document + */ + private computeData(): void { + this.dataComplete = new Subject(); + + this.totalLength = (this.searchString || of(null as string | null)).pipe( + // Also complete when the data observable completes. + takeUntil(this.dataComplete), + map(filter => { + return this.applyFilter(this.source, filter).length; + }), + ); + + // If an operation is null, replace it with an observable which emits null so that combineLatest + // will emit when the other operations emit. + const operations = [ + this.searchString || of(null as string | null), + this.sort || of(null as SortOrder | null), + this.paginate || of(null as PagerEvent | null), + ] as const; + + this.data = combineLatest(operations).pipe( + map(([searchString, sort, pagination]) => { + let data: T[] = this.source; + + // Filter, sort and paginate the data + data = this.applyFilter(data, searchString); + data = this.orderByPredicate(data, sort); + data = this.applyPagination(data, pagination); + + return data; + } + ), + + // Complete the totalLength observable when the data observable completes + finalize(() => { + this.dataComplete.next(); + this.dataComplete.complete(); + }) + ); + } + + /** + * Sets the source array and recomputes the data. + * + * @param source + * The new source array. + */ + updateSource(source: T[]): void { + this.source = source; + this.computeData(); + } + + /** + * TODO: Document + * Applies the given filter to the given data. + * @param data + * @param searchString + */ + private applyFilter(data: T[], searchString: string | null): T[] { + if (searchString === null || searchString === '' || this.filterPattern === null) + return data; + + this.filterPattern.compile(searchString); + return this.filterService.filterByPredicate(data, this.filterPattern.predicate) + } + + /** + * TODO: Document + * @param data + * @param sortOrder + */ + private orderByPredicate(data: T[], sortOrder: SortOrder | null): T[] { + if (sortOrder === null) + return data; + + return this.sortService.orderByPredicate(data, sortOrder.predicate); + } + + /** + * TODO: Document + * @param data + * @param pagination + */ + private applyPagination(data: T[], pagination: PagerEvent | null): T[] { + if (pagination === null || pagination.pageSize === 0) + return data; + + return this.paginationService.paginate(data, pagination.pageIndex, pagination.pageSize); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSourceBuilder.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSourceBuilder.ts new file mode 100644 index 0000000000..6d8681d304 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/DataSourceBuilder.ts @@ -0,0 +1,136 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Observable } from 'rxjs'; +import { SortOrder } from './SortOrder'; +import { PagerEvent } from '../components/guac-pager/guac-pager.component'; + +import { DataSource } from './DataSource'; +import { SortService } from '../services/sort.service'; +import { FilterService } from '../services/filter.service'; +import { PaginationService } from '../services/pagination.service'; + +/** + * A builder that allows to create a DataSource instance. A data source can be + * configured with a filter, a sort order and pagination. + */ +export class DataSourceBuilder { + + private _source?: TData[]; + private _searchString: Observable | null = null; + private _filterProperties: string[] | null = null; + private _sortOrder: Observable | null = null; + private _pagerEvent: Observable | null = null; + + /** + * Creates a new data source builder. + */ + constructor(private sortService: SortService, + private filterService: FilterService, + private paginationService: PaginationService) { + } + + /** + * Set the source on which the data operations should be applied. + * + * @param source + * The source to be used. + * + * @returns + * The current builder instance for further chaining. + */ + source(source: TData[]): DataSourceBuilder { + this._source = source; + return this; + } + + /** + * An Observable of TODO + * + * @param searchString + * The filter search string to use to restrict the displayed items. + * + * @param filterProperties + * An array of expressions to filter against for each object in the + * items array. These expressions must be Angular expressions + * which resolve to properties on the objects in the items array. + * + * @returns + * The current builder instance for further chaining. + */ + filter(searchString: Observable, filterProperties: string[]): DataSourceBuilder { + this._searchString = searchString; + this._filterProperties = filterProperties; + return this; + } + + /** + * An Observable of the sort order that should be applied to the source. Each + * time the sort order changes, the source will be sorted accordingly. + * + * @param sortOrder + * The sort order that should be applied. + * + * @returns + * The current builder instance for further chaining. + */ + sort(sortOrder: Observable): DataSourceBuilder { + this._sortOrder = sortOrder; + return this; + } + + /** + * An Observable of pagination events that should be used extract a page of the source. Each + * time a page event is emitted, the source will be updated accordingly. + * + * @param pagerEvent + * The sort order that should be applied. + * + * @returns + * The current builder instance for further chaining. + */ + paginate(pagerEvent: Observable): DataSourceBuilder { + this._pagerEvent = pagerEvent; + return this; + } + + /** + * Build the data source with the current configuration. + * + * @returns + * The data source with the current configuration. + */ + build(): DataSource { + + if (!this._source) + throw new Error('No source provided'); + + return new DataSource( + this.sortService, + this.filterService, + this.paginationService, + this._source, + this._searchString, + this._filterProperties, + this._sortOrder, + this._pagerEvent + ); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterPattern.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterPattern.ts new file mode 100644 index 0000000000..b4d2048f77 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterPattern.ts @@ -0,0 +1,247 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { compile } from 'angular-expressions'; +import { IPv4Network } from './IPv4Network'; +import { IPv6Network } from './IPv6Network'; +import { FilterToken } from './FilterToken'; +import isObjectLike from 'lodash/isObjectLike'; + +/** + * Handles compilation of filtering predicates as used by + * the {@link FilterService}. Predicates are compiled from a user- + * specified search string. + * TODO: Look at doc + */ +export class FilterPattern { + + /** + * Array of getters corresponding to the Angular expressions provided + * to the constructor of this class. The functions returns are those + * produced by the $parse service. + */ + private readonly getters: Function[]; + + /** + * The current filtering predicate. + */ + predicate: Function; + + /** + * Create a new FilterPattern. + * + * @param expressions + * The expressions whose values are to be filtered. + */ + constructor(expressions: string[]) { + this.getters = expressions.map(expression => compile(expression)); + this.predicate = this.nullPredicate; + } + + /** + * Filter predicate which simply matches everything. This function + * always returns true. + * + * @returns + * true. + */ + private nullPredicate(): boolean { + return true; + } + + /** + * Determines whether the given object matches the given filter pattern + * token. + * + * @param object + * The object to match the token against. + * + * @param token + * The token from the tokenized filter pattern to match aginst the + * given object. + * + * @returns + * true if the object matches the token, false otherwise. + */ + private matchesToken(object: object, token: FilterToken): boolean { + + // Match depending on token type + switch (token.type) { + + // Simple string literal + case 'LITERAL': + return this.matchesString(object, token.value); + + // IPv4 network address / subnet + case 'IPV4_NETWORK': + return this.matchesIPv4(object, token.value); + + // IPv6 network address / subnet + case 'IPV6_NETWORK': + return this.matchesIPv6(object, token.value); + + // Unsupported token type + default: + return false; + + } + + } + + /** + * Determines whether the given object contains properties that match + * the given string, according to the provided getters. + * + * @param object + * The object to match against. + * + * @param str + * The string to match. + * + * @returns + * true if the object matches the given string, false otherwise. + */ + private matchesString(object: object, str: string): boolean { + + // For each defined getter + for (let i = 0; i < this.getters.length; i++) { + + // Retrieve value of current getter + let value: any; + if (isObjectLike(object)) + value = (this.getters)[i](object); + // If the given object is a primitive value use the value directly + else + value = object; + + // If the value matches the pattern, the whole object matches + if (String(value).toLowerCase().indexOf(str) !== -1) + return true; + + } + + // No matches found + return false; + + } + + /** + * Determines whether the given object contains properties that match + * the given IPv4 network, according to the provided getters. + * + * @param object + * The object to match against. + * + * @param network + * The IPv4 network to match. + * + * @returns + * true if the object matches the given network, false otherwise. + */ + private matchesIPv4(object: object, network: IPv4Network): boolean { + + // For each defined getter + for (let i = 0; i < this.getters.length; i++) { + + // Test each possible IPv4 address within the string against + // the given IPv4 network + const addresses = String((this.getters)[i](object)).split(/[^0-9.]+/); + for (let j = 0; j < addresses.length; j++) { + const value = IPv4Network.parse(addresses[j]); + if (value && network.contains(value)) + return true; + } + + } + + // No matches found + return false; + + } + + /** + * Determines whether the given object contains properties that match + * the given IPv6 network, according to the provided getters. + * + * @param object + * The object to match against. + * + * @param network + * The IPv6 network to match. + * + * @returns + * true if the object matches the given network, false otherwise. + */ + matchesIPv6(object: object, network: IPv6Network): boolean { + + // For each defined getter + for (let i = 0; i < this.getters.length; i++) { + + // Test each possible IPv6 address within the string against + // the given IPv6 network + const addresses = String((this.getters)[i](object)).split(/[^0-9A-Fa-f:]+/); + for (let j = 0; j < addresses.length; j++) { + const value = IPv6Network.parse(addresses[j]); + if (value && network.contains(value)) + return true; + } + + } + + // No matches found + return false; + + } + + /** + * Compiles the given pattern string, assigning the resulting filter + * predicate. The resulting predicate will accept only objects that + * match the given pattern. + * + * @param pattern + * The pattern to compile. + */ + compile(pattern: string): void { + + // If no pattern provided, everything matches + if (!pattern) { + this.predicate = this.nullPredicate; + return; + } + + // Tokenize pattern, converting to lower case for case-insensitive matching + const tokens = FilterToken.tokenize(pattern.toLowerCase()); + + // Return predicate which matches against the value of any getter in the getters array + this.predicate = (object: object) => { + + // False if any token does not match + for (let i = 0; i < tokens.length; i++) { + if (!this.matchesToken(object, tokens[i])) + return false; + } + + // True if all tokens matched + return true; + + }; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts new file mode 100644 index 0000000000..20b94d888a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { IPv4Network } from './IPv4Network'; +import { IPv6Network } from './IPv6Network'; + +/** + * An arbitrary token having an associated type and value. + */ +export class FilterToken { + + /** + * The input string that was consumed to produce this token. + */ + consumed: string; + + /** + * The type of this token. Each legal type name is a property within + * FilterToken.Types. + */ + type: string; + + /** + * The value of this token. + */ + value: any; + + /** + * Create a new FilterToken. + * + * @param consumed + * The input string consumed to produce this token. + * + * @param type + * The type of this token. Each legal type name is a property within + * FilterToken.Types. + * + * @param value + * The value of this token. The type of this value is determined by + * the token type. + */ + constructor(consumed: string, type: string, value: any) { + + this.consumed = consumed; + this.type = type; + this.value = value; + + } + + /** + * All legal token types, and corresponding functions which match them. + * Each function returns the parsed token, or null if no such token was + * found. + */ + static Types: Record FilterToken | null> = { + + /** + * An IPv4 address or subnet. The value of an IPV4_NETWORK token is an + * IPv4Network. + */ + IPV4_NETWORK: function parseIPv4(str: string): FilterToken | null { + + const pattern = /^\S+/; + + // Read first word via regex + const matches = pattern.exec(str); + if (!matches) + return null; + + // Validate and parse as IPv4 address + const network = IPv4Network.parse(matches[0]); + if (!network) + return null; + + return new FilterToken(matches[0], 'IPV4_NETWORK', network); + + }, + + /** + * An IPv6 address or subnet. The value of an IPV6_NETWORK token is an + * IPv6Network. + */ + IPV6_NETWORK: function parseIPv6(str: string): FilterToken | null { + + const pattern = /^\S+/; + + // Read first word via regex + const matches = pattern.exec(str); + if (!matches) + return null; + + // Validate and parse as IPv6 address + const network = IPv6Network.parse(matches[0]); + if (!network) + return null; + + return new FilterToken(matches[0], 'IPV6_NETWORK', network); + + }, + + /** + * A string literal, which may be quoted. The value of a LITERAL token + * is a String. + */ + LITERAL: function parseLiteral(str: string): FilterToken | null { + + const pattern = /^"([^"]*)"|^\S+/; + + // Validate against pattern + const matches = pattern.exec(str); + if (!matches) + return null; + + // If literal is quoted, parse within the quotes + if (matches[1]) + return new FilterToken(matches[0], 'LITERAL', matches[1]); + + // Otherwise, literal is unquoted + return new FilterToken(matches[0], 'LITERAL', matches[0]); + + }, + + /** + * Arbitrary contiguous whitespace. The value of a WHITESPACE token is + * a String. + */ + WHITESPACE: function parseWhitespace(str: string): FilterToken | null { + + const pattern = /^\s+/; + + // Validate against pattern + const matches = pattern.exec(str); + if (!matches) + return null; + + // Generate token from matching whitespace + return new FilterToken(matches[0], 'WHITESPACE', matches[0]); + + } + + }; + + /** + * Tokenizes the given string, returning an array of tokens. Whitespace + * tokens are dropped. + * + * @param str + * The string to tokenize. + * + * @returns + * All tokens identified within the given string, in order. + */ + static tokenize(str: string): FilterToken[] { + + const tokens: FilterToken[] = []; + + /** + * Returns the first token on the current string, removing the token + * from that string. + * + * @returns + * The first token on the string, or null if no tokens match. + */ + const popToken = (): FilterToken | null => { + + // Attempt to find a matching token + for (let type in FilterToken.Types) { + + // Get matching function for current type + const matcher = FilterToken.Types[type]; + + // If token matches, return the matching group + const token = matcher(str); + if (token) { + str = str.substring(token.consumed.length); + return token; + } + + } + + // No match + return null; + + }; + + // Tokenize input until no input remains + while (str) { + + // Remove first token + const token = popToken(); + if (!token) + break; + + // Add token to tokens array, if not whitespace + if (token.type !== 'WHITESPACE') + tokens.push(token); + + } + + return tokens; + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv4Network.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv4Network.ts new file mode 100644 index 0000000000..a4fe6142f6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv4Network.ts @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Represents an IPv4 network as a pairing of base address and netmask, + * both of which are in binary form. To obtain an IPv4Network from + * standard CIDR or dot-decimal notation, use IPv4Network.parse(). + */ +export class IPv4Network { + + /** + * The binary address of this network. This will be a 32-bit quantity. + */ + address: number; + + /** + * The binary netmask of this network. This will be a 32-bit quantity. + */ + netmask: number; + + /** + * Create a new IPv4Network object. + * + * @param address + * The IPv4 address of the network in binary form. + * + * @param netmask + * The IPv4 netmask of the network in binary form. + */ + constructor(address: number, netmask: number) { + this.address = address; + this.netmask = netmask; + } + + /** + * Tests whether the given network is entirely within this network, + * taking into account the base addresses and netmasks of both. + * + * @param {IPv4Network} other + * The network to test. + * + * @returns {Boolean} + * true if the other network is entirely within this network, false + * otherwise. + */ + contains(other: IPv4Network): boolean { + return this.address === (other.address & other.netmask & this.netmask); + } + + /** + * Parses the given string as an IPv4 address or subnet, returning an + * IPv4Network object which describes that address or subnet. + * + * @param str + * The string to parse. + * + * @returns + * The parsed network, or null if the given string is not valid. + */ + static parse(str: string): IPv4Network | null { + + // Regex which matches the general form of IPv4 addresses + const pattern = /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})(?:\/([0-9]{1,2}))?$/; + + // Parse IPv4 address via regex + const match = pattern.exec(str); + if (!match) + return null; + + // Parse netmask, if given + let netmask = 0xFFFFFFFF; + if (match[5]) { + const bits = parseInt(match[5]); + if (bits > 0 && bits <= 32) + netmask = 0xFFFFFFFF << (32 - bits); + } + + // Read each octet onto address + let address = 0; + for (let i = 1; i <= 4; i++) { + + // Validate octet range + const octet = parseInt(match[i]); + if (octet > 255) + return null; + + // Shift on octet + address = (address << 8) | octet; + + } + + return new IPv4Network(address, netmask); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv6Network.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv6Network.ts new file mode 100644 index 0000000000..dceb6e1345 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/IPv6Network.ts @@ -0,0 +1,214 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Represents an IPv6 network as a pairing of base address and netmask, + * both of which are in binary form. To obtain an IPv6Network from + * standard CIDR notation, use IPv6Network.parse(). + */ +export class IPv6Network { + + /** + * The 128-bit binary address of this network as an array of eight + * 16-bit numbers. + * + * @type Number[] + */ + addressGroups: number[]; + + /** + * The 128-bit binary netmask of this network as an array of eight + * 16-bit numbers. + */ + netmaskGroups: number[]; + + /** + * Create a new IPv6Network object. + * + * @param addressGroups + * Array of eight IPv6 address groups in binary form, each group being + * 16-bit number. + * + * @param netmaskGroups + * Array of eight IPv6 netmask groups in binary form, each group being + * 16-bit number. + */ + constructor(addressGroups: number[], netmaskGroups: number[]) { + this.addressGroups = addressGroups; + this.netmaskGroups = netmaskGroups; + } + + /** + * Tests whether the given network is entirely within this network, + * taking into account the base addresses and netmasks of both. + * + * @param other + * The network to test. + * + * @returns + * true if the other network is entirely within this network, false + * otherwise. + */ + contains(other: IPv6Network): boolean { + + // Test that each masked 16-bit quantity matches the address + for (let i = 0; i < 8; i++) { + if (this.addressGroups[i] !== (other.addressGroups[i] + & other.netmaskGroups[i] + & this.netmaskGroups[i])) + return false; + } + + // All 16-bit numbers match + return true; + + } + + /** + * Generates a netmask having the given number of ones on the left side. + * All other bits within the netmask will be zeroes. The resulting netmask + * will be an array of eight numbers, where each number corresponds to a + * 16-bit group of an IPv6 netmask. + * + * @param bits + * The number of ones to include on the left side of the netmask. All + * other bits will be zeroes. + * + * @returns + * The generated netmask, having the given number of ones. + */ + private static generateNetmask(bits: number): number[] { + + const netmask: number[] = []; + + // Only generate up to 128 bits + bits = Math.min(128, bits); + + // Add any contiguous 16-bit sections of ones + while (bits >= 16) { + netmask.push(0xFFFF); + bits -= 16; + } + + // Add remaining ones + if (bits > 0 && bits <= 16) + netmask.push(0xFFFF & (0xFFFF << (16 - bits))); + + // Add remaining zeroes + while (netmask.length < 8) + netmask.push(0); + + return netmask; + + } + + /** + * Splits the given IPv6 address or partial address into its corresponding + * 16-bit groups. + * + * @param str + * The IPv6 address or partial address to split. + * + * @returns + * The numeric values of all 16-bit groups within the given IPv6 + * address. + */ + private static splitAddress(str: string): number[] { + + const address: number[] = []; + + // Split address into groups + const groups = str.split(':'); + + // Parse the numeric value of each group + groups.forEach(group => { + const value = parseInt(group || '0', 16); + address.push(value); + }); + + return address; + + } + + /** + * Parses the given string as an IPv6 address or subnet, returning an + * IPv6Network object which describes that address or subnet. + * + * @param str + * The string to parse. + * + * @returns + * The parsed network, or null if the given string is not valid. + */ + static parse(str: string): IPv6Network | null { + + // Regex which matches the general form of IPv6 addresses + const pattern = /^([0-9a-f]{0,4}(?::[0-9a-f]{0,4}){0,7})(?:\/([0-9]{1,3}))?$/; + + // Parse rudimentary IPv6 address via regex + const match = pattern.exec(str); + if (!match) + return null; + + // Extract address and netmask from parse results + const unparsedAddress = match[1]; + const unparsedNetmask = match[2]; + + // Parse netmask + let netmask; + if (unparsedNetmask) + netmask = IPv6Network.generateNetmask(parseInt(unparsedNetmask)); + else + netmask = IPv6Network.generateNetmask(128); + + let address; + + // Separate based on the double-colon, if present + const doubleColon = unparsedAddress.indexOf('::'); + + // If no double colon, just split into groups + if (doubleColon === -1) + address = IPv6Network.splitAddress(unparsedAddress); + + // Otherwise, split either side of the double colon and pad with zeroes + else { + + // Parse either side of the double colon + const leftAddress = IPv6Network.splitAddress(unparsedAddress.substring(0, doubleColon)); + const rightAddress = IPv6Network.splitAddress(unparsedAddress.substring(doubleColon + 2)); + + // Pad with zeroes up to address length + let remaining = 8 - leftAddress.length - rightAddress.length; + while (remaining > 0) { + leftAddress.push(0); + remaining--; + } + + address = leftAddress.concat(rightAddress); + + } + + // Validate length of address + if (address.length !== 8) + return null; + + return new IPv6Network(address, netmask); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts new file mode 100644 index 0000000000..4bb410c744 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Maintains a sorting predicate as required by the {@link SortService}. + * The order of properties sorted by the predicate can be altered while + * otherwise maintaining the sort order. + * TODO: Look at doc + */ +export class SortOrder { + + /** + * The current sorting predicate. + */ + predicate: string[]; + + /** + * The name of the highest-precedence sorting property. + */ + primary: string; + + /** + * Whether the highest-precedence sorting property is sorted in + * descending order. + */ + descending: boolean; + + /** + * Create a new SortOrder object. + + * @param predicate + * The properties to sort by, in order of precedence. + */ + constructor(predicate: string[]) { + + this.predicate = predicate; + this.primary = predicate[0]; + this.descending = false; + + // Handle initially-descending primary properties + if (this.primary.charAt(0) === '-') { + this.primary = this.primary.substring(1); + this.descending = true; + } + } + + /** + * Reorders the currently-defined predicate such that the named + * property takes precedence over all others. The property will be + * sorted in ascending order unless otherwise specified. + * + * @param name + * The name of the property to reorder by. + * + * @param descending + * Whether the property should be sorted in descending order. By + * default, all properties are sorted in ascending order. + */ + reorder(name: string, descending: boolean = false): void { + + // Build ascending and descending predicate components + const ascendingName = name; + const descendingName = '-' + name; + + // Remove requested property from current predicate + this.predicate = this.predicate.filter(function notRequestedProperty(current) { + return current !== ascendingName + && current !== descendingName; + }); + + // Add property to beginning of predicate + if (descending) + this.predicate.unshift(descendingName); + else + this.predicate.unshift(ascendingName); + + // Update sorted state + this.primary = name; + this.descending = descending; + + } + + /** + * Returns whether the sort order is primarily determined by the given + * property. + * + * @param property + * The name of the property to check. + * + * @returns + * true if the sort order is primarily determined by the given + * property, false otherwise. + */ + isSortedBy(property: string): boolean { + return this.primary === property; + } + + /** + * Sets the primary sorting property to the given property, if not already + * set. If already set, the ascending/descending sort order is toggled. + * + * @param property + * The name of the property to assign as the primary sorting property. + */ + togglePrimary(property: string): void { + + // Sort in ascending order by new property, if different + if (!this.isSortedBy(property)) + this.reorder(property, false); + + // Otherwise, toggle sort order + else + this.reorder(property, !this.descending); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/locale.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/locale.module.ts new file mode 100644 index 0000000000..6a334f1eca --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/locale.module.ts @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { APP_INITIALIZER, NgModule } from '@angular/core'; +import { + TRANSLOCO_CONFIG, + TRANSLOCO_LOADER, + TRANSLOCO_MISSING_HANDLER, + TranslocoConfig, + TranslocoMissingHandler, + TranslocoModule +} from '@ngneat/transloco'; +import { TranslationService } from './service/translation.service'; +import { TranslationLoaderService } from './service/translation-loader.service'; +import { Observable } from 'rxjs'; +import { TranslocoMessageFormatModule } from '@ngneat/transloco-messageformat'; +import { HashMap } from '@ngneat/transloco/lib/types'; + +/** + * Initializes the translation service. + * + * @returns + * An observable which completes when the translation service has been initialized. + */ +const initializeTranslationService = (translationService: TranslationService): Observable => { + return translationService.initialize(); +}; + +/** + * Provider factory which returns the TranslocoConfig. + */ +const translocoConfigFactory = (translationService: TranslationService): TranslocoConfig => { + return translationService.getTranslocoConfig(); +}; + +/** + * Property name to use in a parameter object of translate() functions to specify a default value + * that should be returned if a translation key is missing. + */ +export const VALUE_IF_MISSING_PROPERTY = 'valueIfMissing'; + +/** + * Returns a HashMap which can be passed to translate() functions of Transloco as additional + * parameter. Allows the caller to specify a default value to be returned if the requested + * translation is not available. + * + * @param value + * The value to return if the requested translation is not available. + */ +export const translationValueIfMissing = (value: any): HashMap => { + return {[VALUE_IF_MISSING_PROPERTY]: value}; +}; + +/** + * Custom missing handler. + */ +export class GuacMissingHandler implements TranslocoMissingHandler { + + /** + * Simply return the key itself if not even the fallback language contains a + * translation for the given key. + * + * This behavior can be modified by providing a parameter object with a + * property named `valueIfMissing`. If this property is not undefined, + * the value of this property will be returned instead. + * + * @see VALUE_IF_MISSING_PROPERTY + * @see translationValueIfMissing + */ + handle(key: string, config: TranslocoConfig, params?: HashMap) { + + if (params && params[VALUE_IF_MISSING_PROPERTY] !== undefined) + return params[VALUE_IF_MISSING_PROPERTY]; + + return key; + } +} + +/** + * Module for handling common localization-related tasks. + */ +@NgModule({ + exports: [TranslocoModule], + providers: [ + { + provide: APP_INITIALIZER, + useFactory: (translationService: TranslationService) => + () => initializeTranslationService(translationService), + deps: [TranslationService], + multi: true, + }, + { + provide: TRANSLOCO_CONFIG, + useFactory: translocoConfigFactory, + deps: [TranslationService], + }, + { + provide: TRANSLOCO_LOADER, + useClass: TranslationLoaderService + }, + { + provide: TRANSLOCO_MISSING_HANDLER, + useClass: GuacMissingHandler + } + ], + imports: [ + // TODO: By default, messageformat initializes all locales. + TranslocoMessageFormatModule.forRoot() + ] +}) +export class LocaleModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts new file mode 100644 index 0000000000..27b01c42f2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { LanguageService } from '../../rest/service/language.service'; +import { HttpClient, HttpContext } from '@angular/common/http'; +import { SKIP_ALL_INTERCEPTORS } from '../../util/interceptor.service'; +import { Translation, TranslocoLoader } from '@ngneat/transloco'; +import { TranslocoLoaderData } from '@ngneat/transloco/lib/transloco.loader'; + +/** + * Service for loading translation definition files. + */ +@Injectable({ + providedIn: 'root' +}) +export class TranslationLoaderService implements TranslocoLoader { + + /** + * Inject required services. + */ + constructor(private languageService: LanguageService, private http: HttpClient) { + } + + /** + * Custom loader function for Transloco which loads the desired + * language file dynamically via HTTP. If the language file cannot be + * found, an empty translation object is returned. + * + * @param languageKey + * The requested language key. + * + * @param data + * Optional data to be passed to the loader. + * + * @returns + * A promise which resolves to the requested translation object. + */ + getTranslation(languageKey: string, data?: TranslocoLoaderData): Promise { + + // Return promise which is resolved only after the translation file is loaded + return new Promise((resolve, reject) => { + + // Satisfy the translation request using possible variations of the given key + this.satisfyTranslation(resolve, reject, languageKey, this.getKeyVariations(languageKey)); + + }); + + } + + /** + * TODO: Remove this if the link syntax from angular-translate ("@:") is replaced with the syntax from transloco ("{{...}}"). + */ + private replaceValues(obj: any): void { + if (typeof obj === 'object') { + for (let key in obj) { + if (typeof obj[key] === 'string' && obj[key].startsWith('@:')) { + obj[key] = `{{${obj[key].substring(2)}}}`; + } else if (typeof obj[key] === 'object') { + this.replaceValues(obj[key]); + } + } + } + } + + /** + * Satisfies a translation request for the given key by searching for the + * translation files for each key in the given array, in order. The request + * fails only if none of the files can be found. + * + * @param resolve + * The function to call if at least one translation file can be + * successfully loaded. + * + * @param reject + * The function to call if none of the translation files can be + * successfully loaded. + * + * @param {String} requestedKey + * The originally-requested language key. + * + * @param {String[]} remainingKeys + * The keys of the languages to attempt to load, in order, where the + * first key in this array is the language to try within this function + * call. The first key in the array is not necessarily the originally- + * requested language key. + */ + satisfyTranslation(resolve: (value: Translation) => void, reject: () => void, requestedKey: string, remainingKeys: string[]): void { + + // Get current language key + const currentKey = remainingKeys.shift(); + + // If no languages to try, "succeed" with an empty translation (force fallback) + if (!currentKey) { + resolve({}); + return; + } + + /** + * Continues trying possible translation files until no possibilities + * exist. + * + * @private + */ + const tryNextTranslation = () => { + this.satisfyTranslation(resolve, reject, requestedKey, remainingKeys); + }; + + // Retrieve list of supported languages + this.languageService.getLanguages() + // Attempt to retrieve translation if language is supported + .subscribe({ + next: (languages) => { + + // Skip retrieval if language is not supported + if (!(currentKey in languages)) { + tryNextTranslation(); + return; + } + + // Attempt to retrieve language + // TODO: cache: cacheService.languages, + const httpContext: HttpContext = new HttpContext(); + httpContext.set(SKIP_ALL_INTERCEPTORS, true); + this.http.get( + 'translations/' + encodeURIComponent(currentKey) + '.json', + {context: httpContext} + ).subscribe({ + next: (translationData) => { + this.replaceValues(translationData); + resolve(translationData); + }, + // Retry with remaining languages if translation file could not be + // retrieved + error: tryNextTranslation + }) + + }, + + // Retry with remaining languages if translation does not exist + error: tryNextTranslation + }); + + } + + /** + * Given a valid language key, returns all possible legal variations of + * that key. Currently, this will be the given key and the given key + * without the country code. If the key has no country code, only the + * given key will be included in the returned array. + * + * @param key + * The language key to generate variations of. + * + * @returns + * All possible variations of the given language key. + */ + getKeyVariations(key: string): string[] { + + const underscore = key.indexOf('_'); + + // If no underscore, only one possibility + if (underscore === -1) + return [key]; + + // Otherwise, include the lack of country code as an option + return [key, key.substring(0, underscore)]; + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation.service.ts new file mode 100644 index 0000000000..47dcd7d7e1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation.service.ts @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable, isDevMode } from '@angular/core'; +import { translocoConfig, TranslocoConfig } from '@ngneat/transloco'; +import { LanguageService } from '../../rest/service/language.service'; +import { PreferenceService } from '../../settings/services/preference.service'; +import { map, Observable, tap } from 'rxjs'; + +/** + * The default language to use if no preference is specified or other languages are not available. + */ +export const DEFAULT_LANGUAGE = 'en'; + +/** + * Service for providing a configuration object for Transloco. + */ +@Injectable({ + providedIn: 'root' +}) +export class TranslationService { + + /** + * The preferred language to use when translating. + * The value is provided by the PreferenceService and is set during initialization. + */ + preferredLanguage: string = DEFAULT_LANGUAGE; + + /** + * The list of languages available for translation. + * The value is provided by the LanguageService and is set during initialization. + */ + availableLanguages: string[] = []; + + /** + * Inject required services. + */ + constructor(private languageService: LanguageService, private preferenceService: PreferenceService) { + } + + /** + * Initializes the TranslationService by retrieving the list of available languages from the REST API and the user's + * preferred language from the PreferenceService. + * + * Has to be called once inside an APP_INITIALIZER. + * + * @returns + * An observable which completes when the initialization is done. + */ + initialize(): Observable { + this.preferredLanguage = this.preferenceService.preferences.language; + + return this.languageService.getLanguages() + .pipe( + // extract language keys from the response + map(langauges => Object.keys(langauges)), + // store available languages + tap(languageKeys => this.availableLanguages = languageKeys), + // ignore the result + map(() => void (0)) + ); + } + + /** + * Returns the configuration object for Transloco. + * + * @returns + * The configuration object for Transloco. + */ + getTranslocoConfig(): TranslocoConfig { + + return translocoConfig({ + + // Provide the list of all available languages retrieved from the REST API + availableLangs: this.availableLanguages, + + // Set the default language according to the user's preferences + defaultLang: this.preferredLanguage, + + // If the file of the preferred language could not be loaded, fall back to English + fallbackLang: DEFAULT_LANGUAGE, + + // If a translation key is missing for the current language, fall back to English + missingHandler: { + // If a translation key is missing for the current language, fall back to English + useFallbackTranslation: true, + + // Do not use the missing handler if a translation value is an empty string + allowEmpty: true + }, + + // Allow changing language at runtime + reRenderOnLangChange: true, + prodMode: !isDevMode() + }); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.html new file mode 100644 index 0000000000..d9e2ee87ff --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.html @@ -0,0 +1,69 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts new file mode 100644 index 0000000000..1fb78b5cd5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts @@ -0,0 +1,260 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { + GuacFrontendEventArguments +} from '../../../events/types/GuacFrontendEventArguments'; +import { TranslatableMessage } from '../../../rest/types/TranslatableMessage'; +import { Field } from '../../../rest/types/Field'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { HttpClient } from '@angular/common/http'; +import { RequestService } from '../../../rest/service/request.service'; +import { catchError, filter } from 'rxjs'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { FormControl, FormGroup } from '@angular/forms'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { Error } from '../../../rest/types/Error'; +import { NavigationEnd, Router } from '@angular/router'; + +@Component({ + selector: 'guac-login', + templateUrl: './login.component.html', + encapsulation: ViewEncapsulation.None +}) +export class LoginComponent implements OnInit, OnChanges { + /** + * An optional instructional message to display within the login + * dialog. + */ + @Input() helpText?: TranslatableMessage; + + /** + * The login form or set of fields. This will be displayed to the user + * to capture their credentials. + */ + @Input({required: true}) form!: Field[]; + + /** + * A form group of all field name/value pairs that have already been provided. + * If not undefined, the user will be prompted to continue their login + * attempt using only the fields which remain. + */ + @Input() values?: FormGroup = new FormGroup({}); + + /** + * The initial value for all login fields. Note that this value must + * not be null. If null, empty fields may not be submitted back to the + * server at all, causing the request to misrepresent true login state. + * + * For example, if a user receives an insufficient credentials error + * due to their password expiring, failing to provide that new password + * should result in the user submitting their username, original + * password, and empty new password. If only the username and original + * password are sent, the invalid password reset request will be + * indistinguishable from a normal login attempt. + */ + readonly DEFAULT_FIELD_VALUE: string = ''; + + /** + * A description of the error that occurred during login, if any. + */ + loginError: TranslatableMessage | null = null; + + /** + * All form values entered by the user, as parameter form group. + */ + enteredValues: FormGroup = new FormGroup({}); + + /** + * All form fields which have not yet been filled by the user. + */ + remainingFields: Field[] = []; + + /** + * Whether an authentication attempt has been submitted. This will be + * set to true once credentials have been submitted and will only be + * reset to false once the attempt has been fully processed, including + * rerouting the user to the requested page if the attempt succeeded. + */ + submitted: boolean = false; + + /** + * The field that is most relevant to the user. + */ + relevantField: Field | null = null; + + /** + * Inject required services. + */ + constructor(private http: HttpClient, + private authenticationService: AuthenticationService, + private requestService: RequestService, + private guacEventService: GuacEventService, + private router: Router, + private destroyRef: DestroyRef) { + } + + /** + * Returns whether a previous login attempt is continuing. + * + * @return + * true if a previous login attempt is continuing, false otherwise. + */ + isContinuation(): boolean { + + // The login is continuing if any parameter values are provided + for (let name in this.values?.controls) + return true; + + return false; + + } + + ngOnChanges(changes: SimpleChanges): void { + + // Ensure provided values are included within entered values, even if + // they have no corresponding input fields + if (changes['values']) { + const values = changes['values'].currentValue as FormGroup; + this.enteredValues = new FormGroup({...this.enteredValues.controls, ...values.controls}); + // angular.extend($scope.enteredValues, values || {}); + } + + // Update field information when form is changed + if (changes['form']) { + const fields = changes['form'].currentValue as Field[]; + + // If no fields are provided, then no fields remain + if (!fields) { + this.remainingFields = []; + return; + } + + // Filter provided fields against provided values + this.remainingFields = fields.filter((field) => { + return this.values && !(field.name in this.values); + }); + + // Set default values for all unset fields + this.remainingFields.forEach((field) => { + if (!this.enteredValues.get(field.name)) + this.enteredValues.addControl(field.name, new FormControl(this.DEFAULT_FIELD_VALUE)); + }); + + this.relevantField = this.getRelevantField(); + } + + + } + + /** + * Submits the currently-specified username and password to the + * authentication service, redirecting to the main view if successful. + */ + login(): void { + this.authenticationService.authenticate(this.enteredValues.value) + .pipe( + takeUntilDestroyed(this.destroyRef), + catchError(this.requestService.IGNORE) + ) + .subscribe() + }; + + /** + * Returns the field most relevant to the user given the current state + * of the login process. This will normally be the first empty field. + * + * @return + * The field most relevant, null if there is no single most relevant + * field. + */ + private getRelevantField(): Field | null { + + for (let i = 0; i < this.remainingFields.length; i++) { + const field = this.remainingFields[i]; + if (!this.enteredValues.get(field.name)) + return field; + } + + return null; + + } + + ngOnInit(): void { + // Update UI to reflect in-progress auth status (clear any previous + // errors, flag as pending) + this.guacEventService.on('guacLoginPending', () => { + this.submitted = true; + this.loginError = null; + }); + + // Retry route upon success (entered values will be cleared only + // after route change has succeeded as this can take time) + this.guacEventService.on('guacLogin', () => { + this.router.navigate([this.router.url], {onSameUrlNavigation: 'reload'}); + }); + + // Reset upon failure + this.guacEventService.on('guacLoginFailed', ({error}) => { + + // Initial submission is complete and has failed + this.submitted = false; + + // Clear out passwords if the credentials were rejected for any reason + if (error.type !== Error.Type.INSUFFICIENT_CREDENTIALS) { + + // Flag generic error for invalid login + if (error.type === Error.Type.INVALID_CREDENTIALS) + this.loginError = { + key: 'LOGIN.ERROR_INVALID_LOGIN' + }; + + // Display error if anything else goes wrong + else + this.loginError = error.translatableMessage || null; + + // Reset all remaining fields to default values, but + // preserve any usernames + this.remainingFields.forEach((field) => { + if (field.type !== Field.Type.USERNAME && field.name in this.enteredValues) + this.enteredValues.get(field.name)?.setValue(this.DEFAULT_FIELD_VALUE); + }); + } + + }); + + // Reset state after authentication and routing have succeeded + this.router.events.pipe( + takeUntilDestroyed(this.destroyRef), + filter(event => event instanceof NavigationEnd) + ).subscribe(() => { + this.enteredValues = new FormGroup({}); + this.submitted = false; + }); + + // TODO: // Reset state after authentication and routing have succeeded + // this.gaucEventService.on('$routeChangeSuccess', () => { + // this.enteredValues = {}; + // this.submitted = false; + // }); + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/login.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/login.module.ts new file mode 100644 index 0000000000..5ab80f4d44 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/login.module.ts @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { LoginComponent } from './components/login/login.component'; +import { FormModule } from '../form/form.module'; +import { FormsModule } from '@angular/forms'; +import { TranslocoModule } from '@ngneat/transloco'; + +/** + * The module for the login functionality. + */ +@NgModule({ + declarations: [ + LoginComponent + ], + imports: [ + CommonModule, + FormModule, + FormsModule, + TranslocoModule + ], + exports: [ + LoginComponent + ] +}) +export class LoginModule { + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/animation.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/animation.css new file mode 100644 index 0000000000..d66b3fa428 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/animation.css @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +@keyframes shake-head { + 0% { margin-left: 0.25em; margin-right: -0.25em; } + 25% { margin-left: -0.25em; margin-right: 0.25em; } + 50% { margin-left: 0.25em; margin-right: -0.25em; } + 75% { margin-left: -0.25em; margin-right: 0.25em; } + 100% { margin-left: 0.00em; margin-right: 0.00em; } +} + +@-webkit-keyframes shake-head { + 0% { margin-left: 0.25em; margin-right: -0.25em; } + 25% { margin-left: -0.25em; margin-right: 0.25em; } + 50% { margin-left: 0.25em; margin-right: -0.25em; } + 75% { margin-left: -0.25em; margin-right: 0.25em; } + 100% { margin-left: 0.00em; margin-right: 0.00em; } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/dialog.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/dialog.css new file mode 100644 index 0000000000..d29657638e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/dialog.css @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.login-ui { + animation: fadein 0.125s linear; + -moz-animation: fadein 0.125s linear; + -webkit-animation: fadein 0.125s linear; +} + +.login-ui .login-dialog-middle { + width: 100%; + display: table-cell; + vertical-align: middle; + text-align: center; +} + +.login-ui .login-dialog { + + width: 100%; + max-width: 3in; + text-align: left; + padding: 1em; + font-size: 1.25em; + + display: inline-block; +} + +.login-ui .login-dialog h1 { + margin-top: 0; + margin-bottom: 0em; + text-align: center; +} + +.login-ui .login-dialog .buttons { + text-align: right; + margin: 0; + margin-top: 1em; +} + +.login-ui .login-dialog .login-fields { + vertical-align: middle; +} + +.login-ui .login-dialog th { + text-shadow: 1px 1px white; +} + +.login-ui .login-dialog .version { + padding: 0.5em 0; +} + +.login-ui .login-dialog .version .app-name { + font-weight: bold; + text-transform: uppercase; + text-align: center; + font-size: 1.25em; +} + +.login-ui .login-dialog .version .version-number { + + position: absolute; + right: 0; + bottom: 0; + + padding: 0.25em 0.75em; + margin: 0.25em; + + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + -khtml-border-radius: 0.5em; + border-radius: 0.5em; + + color: white; + background: green; + font-size: 0.5em; + font-style: italic; + opacity: 0.5; + +} + +.login-ui .login-dialog .logo { + display: block; + margin: 0.5em auto; + width: 3em; + height: 3em; + background-size: 3em 3em; + -moz-background-size: 3em 3em; + -webkit-background-size: 3em 3em; + -khtml-background-size: 3em 3em; + background-image: url('^images/guac-tricolor.svg'); +} + +.login-ui.continuation .login-dialog { + border-right: none; + border-left: none; + box-shadow: none; + max-width: 6in; +} + +.login-ui.continuation .login-dialog .logo, +.login-ui.continuation .login-dialog .version { + display: none; +} + +.login-ui.error .login-dialog { + animation-name: shake-head; + animation-duration: 0.25s; + animation-timing-function: linear; + -webkit-animation-name: shake-head; + -webkit-animation-duration: 0.25s; + -webkit-animation-timing-function: linear; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/input.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/input.css new file mode 100644 index 0000000000..57fa2b4b12 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/input.css @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.login-ui .login-dialog .login-fields input { + display: block; + border: 1px solid rgba(0, 0, 0, 0.25); + -moz-border-radius: 0.2em; + -webkit-border-radius: 0.2em; + -khtml-border-radius: 0.2em; + font-family: Carlito, FreeSans, Helvetica, Arial, sans-serif; + border-radius: 0.2em; + width: 100%; + margin: 0; + margin-bottom: 0.5em; + padding: 0.5em 0.75em; + max-width: none; +} + +.login-ui .login-dialog .buttons input[type="submit"] { + width: 100%; + margin: 0; +} + +.login-ui.continuation .login-dialog .buttons input[type="submit"] { + width: auto; +} + +.login-ui.initial .login-dialog input.continue-login, +.login-ui.continuation .login-dialog input.login { + display: none; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/login.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/login.css new file mode 100644 index 0000000000..d657f94957 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/styles/login.css @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +div.login-ui { + height: 100%; + width: 100%; + position: absolute; + left: 0; + top: 0; + display: table; + background: white; + z-index: 20; +} + +.login-ui p.login-error { + display: none; +} + +.login-ui.error p.login-error { + display: block; + + position: fixed; + left: 0; + right: 0; + top: 0; + + padding: 1em; + margin: 0.2em; + + background: #FDD; + border: 1px solid #964040; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + -khtml-border-radius: 0.25em; + text-align: center; + color: #964040; +} + +.login-ui .login-fields .form-field .password-field .toggle-password { + display: none; +} + +.login-ui .login-fields .labeled-field { + display: block; + position: relative; + z-index: 1; +} + +.login-ui .login-fields .labeled-field .field-header { + + display: block; + position: absolute; + left: 0; + right: 0; + overflow: hidden; + + z-index: -1; + margin: 0.5em; + font-size: 0.9em; + opacity: 0.5; + +} + +.login-ui .login-fields .labeled-field.empty input { + background: transparent; +} + +.login-ui .login-fields .labeled-field input:focus { + background: white; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.html new file mode 100644 index 0000000000..b2d5ba6705 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.html @@ -0,0 +1,21 @@ + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.ts new file mode 100644 index 0000000000..01d464b83b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/data-source-tabs/data-source-tabs.component.ts @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { ManagementPermissions } from '../../types/ManagementPermissions'; +import { PageDefinition } from '../../../navigation/types/PageDefinition'; +import keys from 'lodash/keys'; +import { canonicalize } from '../../../form/components/form-field-base/form-field-base.component'; + +/** + * Component which displays a set of tabs pointing to the same object within + * different data sources, such as user accounts which span multiple data + * sources. + */ +@Component({ + selector: 'data-source-tabs', + templateUrl: './data-source-tabs.component.html', + encapsulation: ViewEncapsulation.None +}) +export class DataSourceTabsComponent implements OnChanges { + + /** + * The permissions which dictate the management actions available + * to the current user. + */ + @Input() permissions: Record | null = null; + + /** + * A function which returns the URL of the object within a given + * data source. The relevant data source will be made available to + * the Angular expression defining this function as the + * "dataSource" variable. No other values will be made available, + * including values from the scope. + */ + @Input() url?: (dataSource: string) => string; + + /** + * The set of pages which each manage the same object within different + * data sources. + */ + pages: PageDefinition[] = []; + + ngOnChanges(changes: SimpleChanges): void { + if (changes['permissions']) { + const permissions = changes['permissions'].currentValue as Record; + + this.pages = []; + + const dataSources = keys(this.permissions).sort(); + dataSources.forEach(dataSource => { + + // Determine whether data source contains this object + const managementPermissions = permissions[dataSource]; + const exists = !!managementPermissions.identifier; + + // Data source is not relevant if the associated object does not + // exist and cannot be created + const readOnly = !managementPermissions.canSaveObject; + if (!exists && readOnly) + return; + + // Determine class name based on read-only / linked status + let className; + if (readOnly) className = 'read-only'; + else if (exists) className = 'linked'; + else className = 'unlinked'; + + // Add page entry + this.pages!.push(new PageDefinition({ + name: canonicalize('DATA_SOURCE_' + dataSource) + '.NAME', + url: this.url?.(dataSource) || '', + className: className + })); + + }); + + } + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.html new file mode 100644 index 0000000000..434bf13e20 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.html @@ -0,0 +1,69 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts new file mode 100644 index 0000000000..25938c1603 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts @@ -0,0 +1,342 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + ChangeDetectionStrategy, + Component, + Input, + OnChanges, + OnInit, + SimpleChanges, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import isEmpty from 'lodash/isEmpty'; +import sortedIndex from 'lodash/sortedIndex'; +import sortedIndexOf from 'lodash/sortedIndexOf'; +import { FilterService } from '../../../list/services/filter.service'; +import { SortService } from '../../../list/services/sort.service'; +import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; +import { BehaviorSubject, skip } from 'rxjs'; +import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; +import { DataSource } from '../../../list/types/DataSource'; + +/** + * A directive for manipulating a set of objects sharing some common relation + * and represented by an array of their identifiers. The specific objects + * added or removed are tracked within a separate pair of arrays of + * identifiers. + */ +@Component({ + selector: 'identifier-set-editor', + templateUrl: './identifier-set-editor.component.html', + encapsulation: ViewEncapsulation.None, +}) +export class IdentifierSetEditorComponent implements OnInit, OnChanges { + + /** + * The translation key of the text which should be displayed within + * the main header of the identifier set editor. + */ + @Input({required: true}) header!: string; + + /** + * The translation key of the text which should be displayed if no + * identifiers are currently present within the set. + */ + @Input({required: true}) emptyPlaceholder!: string; + + /** + * The translation key of the text which should be displayed if no + * identifiers are available to be added within the set. + */ + @Input({required: true}) unavailablePlaceholder!: string; + + /** + * All identifiers which are available to be added to or removed + * from the identifier set being edited. + */ + @Input() identifiersAvailable: string[] | null = null; + + /** + * The current state of the identifier set being manipulated. This + * array will be modified as changes are made through this + * identifier set editor. + */ + @Input() identifiers: string[] = []; + + /** + * The set of identifiers that have been added, relative to the + * initial state of the identifier set being manipulated. + */ + @Input({required: true}) identifiersAdded!: string[]; + + /** + * The set of identifiers that have been removed, relative to the + * initial state of the identifier set being manipulated. + * + * @type String[] + */ + @Input({required: true}) identifiersRemoved!: string[]; + + /** + * Reference to the instance of the pager component. + */ + @ViewChild(GuacPagerComponent, {static: true}) pager!: GuacPagerComponent; + + /** + * TODO: document + */ + identifiersAvailableDataSourceView: DataSource | null = null; + + /** + * TODO: document + */ + identifiersDataSourceView: DataSource | null = null; + + /** + * Whether the full list of available identifiers should be displayed. + * Initially, only an abbreviated list of identifiers currently present + * is shown. + */ + expanded: boolean = false; + + /** + * Map of identifiers to boolean flags indicating whether that + * identifier is currently present (true) or absent (false). If an + * identifier is absent, it may also be absent from this map. + */ + identifierFlags: Record = {}; + + /** + * Map of identifiers to boolean flags indicating whether that + * identifier is editable. If an identifier is not editable, it will be + * absent from this map. + */ + isEditable: Record = {}; + + /** + * The string currently being used to filter the list of available + * identifiers. + */ + filterString: BehaviorSubject = new BehaviorSubject(''); + + /** + * Inject required services. + */ + constructor(private filterService: FilterService, + private sortService: SortService, + private dataSourceBuilderService: DataSourceBuilderService) { + } + + ngOnInit(): void { + // Build the data source for the available identifiers. + this.identifiersAvailableDataSourceView = this.dataSourceBuilderService.getBuilder() + .source(this.identifiersAvailable || []) + .filter(this.filterString, ['']) + .paginate(this.pager.page) + .build(); + + // Build the data source for the current state of the identifier set being manipulated + this.identifiersDataSourceView = this.dataSourceBuilderService.getBuilder() + .source(this.identifiers) + .filter(this.filterString, ['']) + .build(); + } + + ngOnChanges(changes: SimpleChanges): void { + + // Keep identifierFlags up to date when identifiers array is replaced + // or initially assigned + if (changes['identifiers']) { + + // Maintain identifiers in sorted order so additions and removals + // can be made more efficiently + if (this.identifiers) + this.identifiers.sort(); + + // Convert array of identifiers into set of boolean + // presence/absence flags + const identifierFlags: Record = {}; + this.identifiers.forEach(identifier => { + identifierFlags[identifier] = true; + }); + this.identifierFlags = identifierFlags; + + // Update the corresponding data source + this.identifiersDataSourceView?.updateSource(this.identifiers); + } + + + if (changes['identifiersAvailable']) { + + // An identifier is editable iff it is available to be added or removed + // from the identifier set being edited (iff it is within the + // identifiersAvailable array) + this.isEditable = {}; + this.identifiers.forEach(identifier => { + this.isEditable[identifier] = true; + }); + + // Update the corresponding data source + this.identifiersAvailableDataSourceView?.updateSource(this.identifiersAvailable || []); + } + } + + /** + * Adds the given identifier to the given sorted array of identifiers, + * preserving the sorted order of the array. If the identifier is + * already present, no change is made to the array. The given array + * must already be sorted in ascending order. + * + * @param arr + * The sorted array of identifiers to add the given identifier to. + * + * @param identifier + * The identifier to add to the given array. + */ + private addIdentifier(arr: string[], identifier: string): void { + + // Determine location that the identifier should be added to + // maintain sorted order + const index = sortedIndex(arr, identifier); + + // Do not add if already present + if (arr[index] === identifier) + return; + + // Insert identifier at determined location + arr.splice(index, 0, identifier); + + } + + /** + * Removes the given identifier from the given sorted array of + * identifiers, preserving the sorted order of the array. If the + * identifier is already absent, no change is made to the array. The + * given array must already be sorted in ascending order. + * + * @param arr + * The sorted array of identifiers to remove the given identifier + * from. + * + * @param identifier + * The identifier to remove from the given array. + * + * @returns + * true if the identifier was present in the given array and has + * been removed, false otherwise. + */ + private removeIdentifier(arr: string[], identifier: string): boolean { + + // Search for identifier in sorted array + const index = sortedIndexOf(arr, identifier); + + // Nothing to do if already absent + if (index === -1) + return false; + + // Remove identifier + arr.splice(index, 1); + return true; + + } + + /** + * Notifies the controller that a change has been made to the flag + * denoting presence/absence of a particular identifier within the + * identifierFlags map. The identifiers, + * identifiersAdded, and identifiersRemoved + * arrays are updated accordingly. + * + * @param identifier + * The identifier which has been added or removed through modifying + * its boolean flag within identifierFlags. + */ + identifierChanged(identifier: string): void { + + // Determine status of modified identifier + const present = this.identifierFlags[identifier]; + + // Add/remove identifier from added/removed sets depending on + // change in flag state + if (present) { + + this.addIdentifier(this.identifiers, identifier); + + if (!this.removeIdentifier(this.identifiersRemoved, identifier)) + this.addIdentifier(this.identifiersAdded, identifier); + + } else { + + this.removeIdentifier(this.identifiers, identifier); + + if (!this.removeIdentifier(this.identifiersAdded, identifier)) + this.addIdentifier(this.identifiersRemoved, identifier); + + } + + // Update the corresponding signal + this.identifiersDataSourceView?.updateSource(this.identifiers); + } + + /** + * Removes the given identifier, updating identifierFlags, + * identifiers, identifiersAdded, and + * identifiersRemoved accordingly. + * + * @param {String} identifier + * The identifier to remove. + */ + removeIdentifierFromScope(identifier: string): void { + this.identifierFlags[identifier] = false; + this.identifierChanged(identifier); + } + + /** + * Shows the full list of available identifiers. If the full list is + * already shown, this function has no effect. + */ + expand(): void { + this.expanded = true; + } + + /** + * Hides the full list of available identifiers. If the full list is + * already hidden, this function has no effect. + */ + collapse(): void { + this.expanded = false; + } + + /** + * Returns whether there are absolutely no identifiers that can be + * managed using this editor. If true, the editor is effectively + * useless, as there is nothing whatsoever to display. + * + * @returns} + * true if there are no identifiers that can be managed using this + * editor, false otherwise. + */ + isEmpty(): boolean { + return isEmpty(this.identifiers) + && isEmpty(this.identifiersAvailable); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.html new file mode 100644 index 0000000000..709770be0a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.html @@ -0,0 +1,22 @@ + + + {{item.name}} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.ts new file mode 100644 index 0000000000..6fe987be90 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser-connection-group/location-chooser-connection-group.component.ts @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +@Component({ + selector: 'guac-location-chooser-connection-group', + templateUrl: './location-chooser-connection-group.component.html', + encapsulation: ViewEncapsulation.None +}) +export class LocationChooserConnectionGroupComponent { + @Input({required: true}) context!: { chooseGroup: (item: ConnectionGroup) => void }; + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.html new file mode 100644 index 0000000000..a34aaf5d51 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.html @@ -0,0 +1,40 @@ + +
      + + +
      {{chosenConnectionGroupName}}
      + + + + +
      + + + + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts new file mode 100644 index 0000000000..da5e96e9ac --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; + +/** + * A component for choosing the location of a connection or connection group. + */ +@Component({ + selector: 'guac-location-chooser', + templateUrl: './location-chooser.component.html', + encapsulation: ViewEncapsulation.None +}) +export class LocationChooserComponent implements OnInit, OnChanges { + + /** + * The identifier of the data source from which the given root + * connection group was retrieved. + */ + @Input() dataSource?: string; + + /** + * The root connection group of the connection group hierarchy to + * display. + */ + @Input({required: true}) rootGroup!: ConnectionGroup; + + /** + * The unique identifier of the currently-selected connection + * group. If not specified, the root group will be used. + */ + @Input() value?: string; + + /** + * Map of unique identifiers to their corresponding connection + * groups. + */ + private connectionGroups: Record = {}; + + /** + * Whether the group list menu is currently open. + */ + menuOpen: boolean = false; + + /** + * The human-readable name of the currently-chosen connection + * group. + */ + chosenConnectionGroupName: string | null = null; + + /** + * TODO + */ + rootGroups: Record = {}; + + /** + * Recursively traverses the given connection group and all + * children, storing each encountered connection group within the + * connectionGroups map by its identifier. + * + * @param group + * The connection group to traverse. + */ + private mapConnectionGroups(group: ConnectionGroup): void { + + // Map given group + (this.connectionGroups)[group.identifier] = group; + + // Map all child groups + if (group.childConnectionGroups) + group.childConnectionGroups.forEach((childGroup: ConnectionGroup) => this.mapConnectionGroups(childGroup)); + + } + + /** + * Toggle the current state of the menu listing connection groups. + * If the menu is currently open, it will be closed. If currently + * closed, it will be opened. + */ + toggleMenu(): void { + this.menuOpen = !this.menuOpen; + } + + ngOnInit(): void { + this.onDataSourceChange(); + } + + ngOnChanges(changes: SimpleChanges): void { + + // Update the root group map when data source or root group change + if (changes['dataSource'] || changes['rootGroup']) { + + // Abort if the root group is not set + if (this.dataSource && this.rootGroup) { + + // Wrap root group in map + this.rootGroups = {}; + this.rootGroups[this.dataSource] = this.rootGroup; + } + + } + + if (changes['dataSource']) { + this.onDataSourceChange(); + } + + } + + onDataSourceChange(): void { + this.connectionGroups = {}; + + if (this.rootGroup) { + + // Map all known groups + this.mapConnectionGroups(this.rootGroup); + + // If no value is specified, default to the root identifier + if (!this.value || !(this.value in this.connectionGroups)) + this.value = this.rootGroup.identifier; + + this.chosenConnectionGroupName = this.connectionGroups[this.value].name; + } + } + + + /** + * Expose selection function to group list template. + */ + groupListContext = { + + /** + * Selects the given group item. + * + * @param item + * The chosen item. + */ + chooseGroup: (item: ConnectionGroup) => { + + // Record new parent + this.value = item.identifier; + this.chosenConnectionGroupName = item.name; + + // Close menu + this.menuOpen = false; + + } + + }; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.html new file mode 100644 index 0000000000..6c0163d306 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.html @@ -0,0 +1,127 @@ + +
      + + + + + +
      +

      {{'MANAGE_CONNECTION.SECTION_HEADER_EDIT_CONNECTION' | transloco}}

      + +
      +
      + + + + + + + + + + + + + + + + + + + + + + +
      {{'MANAGE_CONNECTION.FIELD_HEADER_NAME' | transloco}}
      {{'MANAGE_CONNECTION.FIELD_HEADER_LOCATION' | transloco}} + +
      {{'MANAGE_CONNECTION.FIELD_HEADER_PROTOCOL' | transloco}} + +
      +
      + + +
      + +
      + + +

      {{'MANAGE_CONNECTION.SECTION_HEADER_PARAMETERS' | transloco}}

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

      {{'MANAGE_CONNECTION.SECTION_HEADER_HISTORY' | transloco}}

      +
      +

      {{'MANAGE_CONNECTION.INFO_CONNECTION_NOT_USED' | transloco}}

      + + + + + + + + + + + + + + + + + + + +
      {{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_USERNAME' | transloco}}{{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_START' | transloco}}{{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_DURATION' | transloco}}{{'MANAGE_CONNECTION.TABLE_HEADER_HISTORY_REMOTEHOST' | transloco}}
      + + {{wrapper.entry.startDate | date:historyDateFormat}}{{wrapper.entry.remoteHost}}
      + + + + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.ts new file mode 100644 index 0000000000..ef6c76fd37 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-connection/manage-connection.component.ts @@ -0,0 +1,413 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { ConnectionService } from '../../../rest/service/connection.service'; +import { ConnectionGroupService } from '../../../rest/service/connection-group.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { SchemaService } from '../../../rest/service/schema.service'; +import { Form } from '../../../rest/types/Form'; +import { ManagementPermissions } from '../../types/ManagementPermissions'; +import { HistoryEntryWrapper } from '../../types/HistoryEntryWrapper'; +import { Protocol } from '../../../rest/types/Protocol'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { Connection } from '../../../rest/types/Connection'; +import { forkJoin, map, Observable, of } from 'rxjs'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { TranslocoService } from '@ngneat/transloco'; +import { FormGroup } from '@angular/forms'; +import { FormService } from '../../../form/service/form.service'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; +import { DataSource } from '../../../list/types/DataSource'; +import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; + +/** + * Component for editing or creating connections. + */ +@Component({ + selector: 'guac-manage-connection', + templateUrl: './manage-connection.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ManageConnectionComponent implements OnInit { + + /** + * The unique identifier of the data source containing the connection being + * edited. + */ + @Input('dataSource') selectedDataSource!: string; + + /** + * Reference to the instance of the pager component. + */ + @ViewChild(GuacPagerComponent, {static: true}) pager!: GuacPagerComponent; + + + /** + * The identifier of the original connection from which this connection is + * being cloned. Only valid if this is a new connection. + */ + private cloneSourceIdentifier: string | null = null; + + /** + * The identifier of the connection being edited. If a new connection is + * being created, this will not be defined. + */ + @Input('id') private identifier?: string; + + /** + * All known protocols. + */ + protocols?: Record; + + /** + * The root connection group of the connection group hierarchy. + */ + rootGroup?: ConnectionGroup; + + /** + * The connection being modified. + */ + connection?: Connection; + + /** + * The parameter name/value pairs associated with the connection being + * modified. + */ + parameters?: Record; + + /** + * The form group for editing connection parameters. + */ + parametersFormGroup: FormGroup = new FormGroup({}); + + /** + * The date format for use within the connection history. + */ + historyDateFormat?: string; + + /** + * The usage history of the connection being modified. + */ + historyEntryWrappers?: HistoryEntryWrapper[]; + + /** + * TODO: document + */ + dataSourceView: DataSource | null = null; + + /** + * The management-related actions that the current user may perform on the + * connection currently being created/modified, or undefined if the current + * user's permissions have not yet been loaded. + */ + managementPermissions?: ManagementPermissions; + + /** + * All available connection attributes. This is only the set of attribute + * definitions, organized as logical groupings of attributes, not attribute + * values. + */ + attributes?: Form[]; + + /** + * Form group for editing connection attributes. + */ + connectionAttributesFormGroup: FormGroup = new FormGroup({}); + + /** + * Inject required services. + */ + constructor(private router: Router, + private route: ActivatedRoute, + private authenticationService: AuthenticationService, + private connectionService: ConnectionService, + private connectionGroupService: ConnectionGroupService, + private permissionService: PermissionService, + private requestService: RequestService, + private schemaService: SchemaService, + private translocoService: TranslocoService, + private formService: FormService, + private dataSourceBuilderService: DataSourceBuilderService, + private destroyRef: DestroyRef) { + } + + ngOnInit(): void { + this.cloneSourceIdentifier = this.route.snapshot.queryParamMap.get('clone'); + + // Build the data source for the user group list entries. + this.dataSourceView = this.dataSourceBuilderService.getBuilder() + .source([]) + .paginate(this.pager.page) + .build(); + + // Populate interface with requested data + forkJoin([ + this.loadRequestedConnection(), + this.schemaService.getConnectionAttributes(this.selectedDataSource), + this.permissionService.getEffectivePermissions(this.selectedDataSource, this.authenticationService.getCurrentUsername()!), + this.schemaService.getProtocols(this.selectedDataSource), + this.connectionGroupService.getConnectionGroupTree(this.selectedDataSource, ConnectionGroup.ROOT_IDENTIFIER, [PermissionSet.ObjectPermissionType.ADMINISTER]) + ]) + .subscribe({ + next: ([connectionData, attributes, permissions, protocols, rootGroup]) => { + + this.dataSourceView?.updateSource(this.historyEntryWrappers!); + + this.attributes = attributes; + this.connectionAttributesFormGroup = this.formService.getFormGroup(attributes); + this.connectionAttributesFormGroup.patchValue(this.connection?.attributes || {}); + this.connectionAttributesFormGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => { + this.connection!.attributes = value; + }); + + this.protocols = protocols; + this.parametersFormGroup = this.formService.getFormGroup(this.protocols[this.connection!.protocol].connectionForms); + this.parametersFormGroup.patchValue(this.parameters || {}); + this.parametersFormGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => { + this.parameters = value; + }); + + this.rootGroup = rootGroup; + + this.managementPermissions = ManagementPermissions.fromPermissionSet( + permissions, + PermissionSet.SystemPermissionType.CREATE_CONNECTION, + PermissionSet.hasConnectionPermission, + this.identifier); + + }, error: this.requestService.DIE + }); + + // Get history date format + this.translocoService.selectTranslate('MANAGE_CONNECTION.FORMAT_HISTORY_START').subscribe(historyDateFormat => { + this.historyDateFormat = historyDateFormat; + }); + } + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user interface to be + * useful, false otherwise. + */ + isLoaded(): this is Required { + + return this.protocols !== undefined + && this.rootGroup !== undefined + && this.connection !== undefined + && this.parameters !== undefined + && this.historyDateFormat !== undefined + && this.historyEntryWrappers !== undefined + && this.managementPermissions !== undefined + && this.attributes !== undefined + && this.dataSourceView !== null; + + } + + /** + * Loads the data required for performing the management task requested + * through the route parameters given at load time, automatically preparing + * the interface for editing an existing connection, cloning an existing + * connection, or creating an entirely new connection. + * + * @returns + * A promise which is resolved when the interface has been prepared + * for performing the requested management task. + */ + private loadRequestedConnection(): Observable { + + // If we are editing an existing connection, pull its data + if (this.identifier) + return this.loadExistingConnection(this.selectedDataSource, this.identifier); + + // If we are cloning an existing connection, pull its data instead + if (this.cloneSourceIdentifier) + return this.loadClonedConnection(this.selectedDataSource, this.cloneSourceIdentifier); + + // If we are creating a new connection, populate skeleton connection data + return this.loadSkeletonConnection(); + + } + + /** + * Loads the data associated with the connection having the given + * identifier, preparing the interface for making modifications to that + * existing connection. + * + * @param dataSource + * The unique identifier of the data source containing the connection to + * load. + * + * @param identifier + * The identifier of the connection to load. + * + * @returns + * A promise which is resolved when the interface has been prepared for + * editing the given connection. + */ + private loadExistingConnection(dataSource: string, identifier: string): Observable { + return forkJoin([ + this.connectionService.getConnection(dataSource, identifier), + this.connectionService.getConnectionHistory(dataSource, identifier), + this.connectionService.getConnectionParameters(dataSource, identifier) + ]).pipe( + map(([connection, historyEntries, parameters]) => { + + this.connection = connection; + this.parameters = parameters; + + // Wrap all history entries for sake of display + this.historyEntryWrappers = []; + historyEntries.forEach(historyEntry => { + this.historyEntryWrappers!.push(new HistoryEntryWrapper(historyEntry)); + }); + + }) + ); + } + + /** + * Loads the data associated with the connection having the given + * identifier, preparing the interface for cloning that existing + * connection. + * + * @param dataSource + * The unique identifier of the data source containing the connection + * to be cloned. + * + * @param identifier + * The identifier of the connection being cloned. + * + * @returns + * A promise which is resolved when the interface has been prepared for + * cloning the given connection. + */ + private loadClonedConnection(dataSource: string, identifier: string): Observable { + return forkJoin([ + this.connectionService.getConnection(dataSource, identifier), + this.connectionService.getConnectionParameters(dataSource, identifier) + ]).pipe( + map(([connection, parameters]) => { + + this.connection = connection; + this.parameters = parameters; + + // Clear the identifier field because this connection is new + delete this.connection.identifier; + + // Cloned connections have no history + this.historyEntryWrappers = []; + + }) + ); + } + + /** + * Loads skeleton connection data, preparing the interface for creating a + * new connection. + * + * @returns + * A promise which is resolved when the interface has been prepared for + * creating a new connection. + */ + private loadSkeletonConnection(): Observable { + + // Use skeleton connection object with no associated permissions, + // history, or parameters + this.connection = new Connection({ + protocol: 'vnc', + parentIdentifier: this.route.snapshot.queryParamMap.get('parent') || undefined + }); + + this.historyEntryWrappers = []; + this.parameters = {}; + + return of(void (0)); + + } + + /** + * @borrows Protocol.getNamespace + */ + getNamespace = Protocol.getNamespace; + + /** + * @borrows Protocol.getName + */ + getProtocolName = Protocol.getName; + + /** + * Cancels all pending edits, returning to the main list of connections + * within the selected data source. + */ + returnToConnectionList(): void { + this.router.navigate(['settings', encodeURIComponent(this.selectedDataSource), 'connections']) + } + + /** + * Cancels all pending edits, opening an edit page for a new connection + * which is prepopulated with the data from the connection currently being edited. + */ + cloneConnection(): void { + this.router.navigate(['manage', encodeURIComponent(this.selectedDataSource), 'connections'], {queryParams: {clone: this.identifier}}) + } + + /** + * Saves the current connection, creating a new connection or updating the + * existing connection, returning a promise which is resolved if the save + * operation succeeds and rejected if the save operation fails. + * + * @returns + * A promise which is resolved if the save operation succeeds and is + * rejected with an {@link Error} if the save operation fails. + */ + saveConnection(): Observable { + + if (!this.connection) + return of(void (0)); + + this.connection.parameters = this.parameters || undefined; + + // Save the connection + return this.connectionService.saveConnection(this.selectedDataSource, this.connection); + + } + + /** + * Deletes the current connection, returning a promise which is resolved if + * the delete operation succeeds and rejected if the delete operation fails. + * + * @returns + * A promise which is resolved if the delete operation succeeds and is + * rejected with an {@link Error} if the delete operation fails. + */ + deleteConnection(): Observable { + if (!this.connection) + return of(void (0)); + + return this.connectionService.deleteConnection(this.selectedDataSource, this.connection); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.html new file mode 100644 index 0000000000..41520a86bd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.html @@ -0,0 +1,114 @@ + + +
      +
      + +
      + + +
      +

      {{'MANAGE_USER_GROUP.SECTION_HEADER_EDIT_USER_GROUP' | transloco}}

      + +
      + + +
      + + +
      + + + + + +
      {{'MANAGE_USER_GROUP.FIELD_HEADER_USER_GROUP_NAME' | transloco}} + + {{userGroup.identifier}} +
      +
      + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts new file mode 100644 index 0000000000..ed64e6eab1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts @@ -0,0 +1,564 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { UserGroup } from '../../../rest/types/UserGroup'; +import { PermissionFlagSet } from '../../../rest/types/PermissionFlagSet'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { ManagementPermissions } from '../../types/ManagementPermissions'; +import { Form } from '../../../rest/types/Form'; +import { UserService } from '../../../rest/service/user.service'; +import { UserGroupService } from '../../../rest/service/user-group.service'; +import { SchemaService } from '../../../rest/service/schema.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { MembershipService } from '../../../rest/service/membership.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { NonNullableProperties } from '../../../util/utility-types'; +import { catchError, forkJoin, from, map, Observable, of, switchMap } from 'rxjs'; +import { FormGroup } from '@angular/forms'; +import { FormService } from '../../../form/service/form.service'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +@Component({ + selector: 'guac-manage-user-group', + templateUrl: './manage-user-group.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ManageUserGroupComponent implements OnInit { + + /** + * The identifier of the user group being edited. If a new user group is + * being created, this will not be defined. + */ + @Input({alias: 'id'}) private identifier?: string; + + /** + * The unique identifier of the data source containing the user group being + * edited. + */ + @Input({required: true}) dataSource!: string; + + /** + * The identifiers of all data sources currently available to the + * authenticated user. + */ + private dataSources: string[] = this.authenticationService.getAvailableDataSources(); + + /** + * The username of the current, authenticated user. + */ + private currentUsername: string | null = this.authenticationService.getCurrentUsername(); + + /** + * The identifier of the original user group from which this user group is + * being cloned. Only valid if this is a new user group. + */ + private cloneSourceIdentifier: string | null = null; + + /** + * All user groups associated with the same identifier as the group being + * created or edited, as a map of data source identifier to the UserGroup + * object within that data source. + */ + userGroups: Record | null = null; + + /** + * The user group being modified. + */ + userGroup: UserGroup | null = null; + + /** + * All permissions associated with the user group being modified. + */ + permissionFlags: PermissionFlagSet | null = null; + + /** + * The set of permissions that will be added to the user group when the + * user group is saved. Permissions will only be present in this set if they + * are manually added, and not later manually removed before saving. + */ + permissionsAdded: PermissionSet = new PermissionSet(); + + /** + * The set of permissions that will be removed from the user group when the + * user group is saved. Permissions will only be present in this set if they + * are manually removed, and not later manually added before saving. + */ + permissionsRemoved: PermissionSet = new PermissionSet(); + + /** + * The identifiers of all user groups which can be manipulated (all groups + * for which the user accessing this interface has UPDATE permission), + * whether that means changing the members of those groups or changing the + * groups of which those groups are members. If this information has not + * yet been retrieved, this will be null. + */ + availableGroups: string[] | null = null; + + /** + * The identifiers of all users which can be manipulated (all users for + * which the user accessing this interface has UPDATE permission), either + * through adding those users as a member of the current group or removing + * those users from the current group. If this information has not yet been + * retrieved, this will be null. + */ + availableUsers: string[] | null = null; + + /** + * The identifiers of all user groups of which this group is a member, + * taking into account any user groups which will be added/removed when + * saved. If this information has not yet been retrieved, this will be + * null. + */ + parentGroups: string[] | null = null; + + /** + * The set of identifiers of all parent user groups to which this group + * will be added when saved. Parent groups will only be present in this set + * if they are manually added, and not later manually removed before + * saving. + */ + parentGroupsAdded: string[] = []; + + /** + * The set of identifiers of all parent user groups from which this group + * will be removed when saved. Parent groups will only be present in this + * set if they are manually removed, and not later manually added before + * saving. + */ + parentGroupsRemoved: string[] = []; + + /** + * The identifiers of all user groups which are members of this group, + * taking into account any user groups which will be added/removed when + * saved. If this information has not yet been retrieved, this will be + * null. + */ + memberGroups: string[] | null = null; + + /** + * The set of identifiers of all member user groups which will be added to + * this group when saved. Member groups will only be present in this set if + * they are manually added, and not later manually removed before saving. + */ + memberGroupsAdded: string[] = []; + + /** + * The set of identifiers of all member user groups which will be removed + * from this group when saved. Member groups will only be present in this + * set if they are manually removed, and not later manually added before + * saving. + */ + memberGroupsRemoved: string[] = []; + + /** + * The identifiers of all users which are members of this group, taking + * into account any users which will be added/removed when saved. If this + * information has not yet been retrieved, this will be null. + */ + memberUsers: string[] | null = null; + + /** + * The set of identifiers of all member users which will be added to this + * group when saved. Member users will only be present in this set if they + * are manually added, and not later manually removed before saving. + */ + memberUsersAdded: string[] = []; + + /** + * The set of identifiers of all member users which will be removed from + * this group when saved. Member users will only be present in this set if + * they are manually removed, and not later manually added before saving. + */ + memberUsersRemoved: string[] = []; + + /** + * For each applicable data source, the management-related actions that the + * current user may perform on the user group currently being created + * or modified, as a map of data source identifier to the + * {@link ManagementPermissions} object describing the actions available + * within that data source, or null if the current user's permissions have + * not yet been loaded. + */ + managementPermissions: Record | null = null; + + /** + * All available user group attributes. This is only the set of attribute + * definitions, organized as logical groupings of attributes, not attribute + * values. + */ + attributes: Form[] | null = null; + + /** + * The form group for editing user group attributes. + */ + attributesFormGroup: FormGroup = new FormGroup({}); + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private dataSourceService: DataSourceService, + private membershipService: MembershipService, + private permissionService: PermissionService, + private requestService: RequestService, + private schemaService: SchemaService, + private userGroupService: UserGroupService, + private userService: UserService, + private formService: FormService, + private router: Router, + private route: ActivatedRoute, + private destroyRef: DestroyRef) { + } + + ngOnInit(): void { + this.cloneSourceIdentifier = this.route.snapshot.queryParamMap.get('clone'); + + // Populate interface with requested data + forkJoin([ + this.loadRequestedUserGroup(), + this.dataSourceService.apply((dataSource: string, userID: string) => this.permissionService.getEffectivePermissions(dataSource, userID), this.dataSources, this.currentUsername), + this.userGroupService.getUserGroups(this.dataSource, [PermissionSet.ObjectPermissionType.UPDATE]), + this.userService.getUsers(this.dataSource, [PermissionSet.ObjectPermissionType.UPDATE]), + this.schemaService.getUserGroupAttributes(this.dataSource) + ]) + .subscribe({ + next: ([userGroupData, permissions, userGroups, users, attributes]) => { + + this.attributes = attributes; + + this.attributesFormGroup = this.formService.getFormGroup(this.attributes); + this.attributesFormGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((value) => { + this.userGroup!.attributes = value; + }); + + this.managementPermissions = {}; + this.dataSources.forEach(dataSource => { + + // Determine whether data source contains this user group + const exists = (dataSource in (this.userGroups || {})); + + // Add the identifiers of all modifiable user groups + this.availableGroups = []; + for (let groupIdentifier in userGroups) { + const userGroup = userGroups[groupIdentifier]; + this.availableGroups.push(userGroup.identifier!); + } + + // Add the identifiers of all modifiable users + this.availableUsers = []; + for (let username in users) { + const user = users[username]; + this.availableUsers.push(user.username); + } + + // Calculate management actions available for this specific group + this.managementPermissions![dataSource] = ManagementPermissions.fromPermissionSet( + permissions[dataSource], + PermissionSet.SystemPermissionType.CREATE_USER_GROUP, + PermissionSet.hasUserGroupPermission, + exists ? this.identifier : undefined); + + }); + + }, error: this.requestService.WARN + }); + + } + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user group interface to + * be useful, false otherwise. + */ + isLoaded(): this is NonNullableProperties { + + return this.userGroups !== null + && this.userGroup !== null + && this.permissionFlags !== null + && this.managementPermissions !== null + && this.availableGroups !== null + && this.availableUsers !== null + && this.parentGroups !== null + && this.memberGroups !== null + && this.memberUsers !== null + && this.attributes !== null; + + } + + /** + * Returns whether the current user can edit the identifier of the user + * group being edited. + * + * @returns + * true if the current user can edit the identifier of the user group + * being edited, false otherwise. + */ + canEditIdentifier(): boolean { + return !this.identifier; + } + + /** + * Loads the data required for performing the management task requested + * through the route parameters given at load time, automatically preparing + * the interface for editing an existing user group, cloning an existing + * user group, or creating an entirely new user group. + * + * @returns + * An observable which completes when the interface has been prepared + * for performing the requested management task. + */ + loadRequestedUserGroup(): Observable { + + // Pull user group data and permissions if we are editing an existing + // user group + if (this.identifier) + return this.loadExistingUserGroup(this.dataSource, this.identifier); + + // If we are cloning an existing user group, pull its data instead + if (this.cloneSourceIdentifier) + return this.loadClonedUserGroup(this.dataSource, this.cloneSourceIdentifier); + + // If we are creating a new user group, populate skeleton user group data + return this.loadSkeletonUserGroup(); + + } + + /** + * Loads the data associated with the user group having the given + * identifier, preparing the interface for making modifications to that + * existing user group. + * + * @param dataSource + * The unique identifier of the data source containing the user group + * to load. + * + * @param identifier + * The unique identifier of the user group to load. + * + * @returns + * An observable which completes when the interface has been prepared for + * editing the given user group. + */ + private loadExistingUserGroup(dataSource: string, identifier: string): Observable { + const userGroups = from(this.dataSourceService.apply( + (dataSource: string, identifier: string) => this.userGroupService.getUserGroup(dataSource, identifier), + this.dataSources, + identifier)); + + // Use empty permission set if group cannot be found + const permissions = + this.permissionService.getPermissions(this.dataSource, this.identifier!, true) + .pipe(catchError(this.requestService.defaultValue(new PermissionSet()))); + + // Assume no parent groups if group cannot be found + const parentGroups = + this.membershipService.getUserGroups(this.dataSource, this.identifier!, true) + .pipe(catchError(this.requestService.defaultValue([]))); + + // Assume no member groups if group cannot be found + const memberGroups = + this.membershipService.getMemberUserGroups(this.dataSource, this.identifier!) + .pipe(catchError(this.requestService.defaultValue([]))); + + // Assume no member users if group cannot be found + const memberUsers = + this.membershipService.getMemberUsers(this.dataSource, this.identifier!) + .pipe(catchError(this.requestService.defaultValue([]))); + + return forkJoin([userGroups, permissions, parentGroups, memberGroups, memberUsers]) + .pipe( + map(([userGroups, permissions, parentGroups, memberGroups, memberUsers]) => { + + this.userGroups = userGroups; + this.parentGroups = parentGroups; + this.memberGroups = memberGroups; + this.memberUsers = memberUsers; + + // Create skeleton user group if user group does not exist + this.userGroup = userGroups[dataSource] || new UserGroup({ + 'identifier': identifier + }); + + this.permissionFlags = PermissionFlagSet.fromPermissionSet(permissions); + + }) + ); + } + + /** + * Loads the data associated with the user group having the given + * identifier, preparing the interface for cloning that existing user + * group. + * + * @param dataSource + * The unique identifier of the data source containing the user group to + * be cloned. + * + * @param identifier + * The unique identifier of the user group being cloned. + * + * @returns {Promise} + * An observable which completes when the interface has been prepared for + * cloning the given user group. + */ + private loadClonedUserGroup(dataSource: string, identifier: string): Observable { + return forkJoin([ + this.dataSourceService.apply((dataSource: string, identifier: string) => + this.userGroupService.getUserGroup(dataSource, identifier), [dataSource], identifier), + this.permissionService.getPermissions(dataSource, identifier, true), + this.membershipService.getUserGroups(dataSource, identifier, true), + this.membershipService.getMemberUserGroups(dataSource, identifier), + this.membershipService.getMemberUsers(dataSource, identifier) + ]) + .pipe( + map(([userGroups, permissions, parentGroups, memberGroups, memberUsers]) => { + this.userGroups = {}; + this.userGroup = userGroups[dataSource]; + this.parentGroups = parentGroups; + this.parentGroupsAdded = parentGroups; + this.memberGroups = memberGroups; + this.memberGroupsAdded = memberGroups; + this.memberUsers = memberUsers; + this.memberUsersAdded = memberUsers; + + this.permissionFlags = PermissionFlagSet.fromPermissionSet(permissions); + this.permissionsAdded = permissions; + + }) + ); + } + + /** + * Loads skeleton user group data, preparing the interface for creating a + * new user group. + * + * @returns + * An observable which completes when the interface has been prepared for + * creating a new user group. + */ + private loadSkeletonUserGroup(): Observable { + + // No user groups exist regardless of data source if the user group is + // being created + this.userGroups = {}; + + // Use skeleton user group object with no associated permissions + this.userGroup = new UserGroup(); + this.parentGroups = []; + this.memberGroups = []; + this.memberUsers = []; + this.permissionFlags = new PermissionFlagSet(); + + return of(void (0)); + + } + + /** + * Returns the URL for the page which manages the user group currently + * being edited under the given data source. The given data source need not + * be the same as the data source currently selected. + * + * @param dataSource + * The unique identifier of the data source that the URL is being + * generated for. + * + * @returns + * The URL for the page which manages the user group currently being + * edited under the given data source. + */ + getUserGroupURL(dataSource: string): string { + return '/manage/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(this.identifier || ''); + } + + /** + * Cancels all pending edits, returning to the main list of user groups. + */ + returnToUserGroupList(): void { + this.router.navigate(['/settings/userGroups']); + } + + /** + * Cancels all pending edits, opening an edit page for a new user group + * which is prepopulated with the data from the user currently being edited. + */ + cloneUserGroup(): void { + this.router.navigate( + ['manage', encodeURIComponent(this.dataSource), 'userGroups'], + {queryParams: {clone: this.identifier}} + ); + } + + /** + * Saves the current user group, creating a new user group or updating the + * existing user group depending on context, returning a promise which is + * resolved if the save operation succeeds and rejected if the save + * operation fails. + * + * @returns + * An observable which completes if the save operation succeeds and is + * fails with an {@link Error} if the save operation fails. + */ + saveUserGroup(): Observable { + + // Save or create the user group, depending on whether the user group exists + let saveUserGroup$: Observable; + if (this.dataSource in (this.userGroups || {})) + saveUserGroup$ = this.userGroupService.saveUserGroup(this.dataSource, this.userGroup!); + else + saveUserGroup$ = this.userGroupService.createUserGroup(this.dataSource, this.userGroup!); + + return saveUserGroup$ + .pipe( + switchMap(() => { + + return forkJoin([ + this.permissionService.patchPermissions(this.dataSource, this.userGroup!.identifier!, this.permissionsAdded, this.permissionsRemoved, true), + this.membershipService.patchUserGroups(this.dataSource, this.userGroup!.identifier!, this.parentGroupsAdded, this.parentGroupsRemoved, true), + this.membershipService.patchMemberUserGroups(this.dataSource, this.userGroup!.identifier!, this.memberGroupsAdded, this.memberGroupsRemoved), + this.membershipService.patchMemberUsers(this.dataSource, this.userGroup!.identifier!, this.memberUsersAdded, this.memberUsersRemoved) + ]) + .pipe(map(() => void (0))) + }) + ); + + } + + /** + * Deletes the current user group, returning a promise which is resolved if + * the delete operation succeeds and rejected if the delete operation + * fails. + * + * @returns + * An observable which completes if the delete operation succeeds and fails + * with an {@link Error} if the delete operation fails. + */ + deleteUserGroup(): Observable { + return this.userGroupService.deleteUserGroup(this.dataSource, this.userGroup!); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.html new file mode 100644 index 0000000000..7b7c96fd4f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.html @@ -0,0 +1,113 @@ + +
      + + + + +
      + + +
      +

      {{'MANAGE_USER.SECTION_HEADER_EDIT_USER' | transloco}}

      + +
      + + + + +
      +

      {{'MANAGE_USER.INFO_READ_ONLY' | transloco}}

      +
      + + +
      + + +
      + + + + + + + + + + + + + +
      {{'MANAGE_USER.FIELD_HEADER_USERNAME' | transloco}} + + {{user.username}} +
      {{'MANAGE_USER.FIELD_HEADER_PASSWORD' | transloco}}
      {{'MANAGE_USER.FIELD_HEADER_PASSWORD_AGAIN' | transloco}}
      +
      + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + +
      + +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts new file mode 100644 index 0000000000..686d0de26b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts @@ -0,0 +1,580 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { HttpClient } from '@angular/common/http'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { UserGroupService } from '../../../rest/service/user-group.service'; +import { UserService } from '../../../rest/service/user.service'; +import { MembershipService } from '../../../rest/service/membership.service'; +import { SchemaService } from '../../../rest/service/schema.service'; +import { User } from '../../../rest/types/User'; +import { Form } from '../../../rest/types/Form'; +import { PermissionFlagSet } from '../../../rest/types/PermissionFlagSet'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { ManagementPermissions } from '../../types/ManagementPermissions'; +import { catchError, forkJoin, map, Observable, of, switchMap, throwError } from 'rxjs'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { Error } from '../../../rest/types/Error'; +import { FormGroup } from '@angular/forms'; +import { FormService } from '../../../form/service/form.service'; + +@Component({ + selector: 'guac-manage-user', + templateUrl: './manage-user.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ManageUserComponent implements OnInit { + + + /** + * The unique identifier of the data source containing the user being + * edited. + */ + @Input() dataSource!: string; + + /** + * The username of the user being edited. If a new user is + * being created, this will not be defined. + */ + @Input('id') username?: string + + /** + * The identifiers of all data sources currently available to the + * authenticated user. + */ + private dataSources: string[] = []; + + /** + * The username of the current, authenticated user. + */ + private currentUsername: string | null = null; + + /** + * The username of the original user from which this user is + * being cloned. Only valid if this is a new user. + */ + cloneSourceUsername: string | null = null; + + /** + * The string value representing the user currently being edited within the + * permission flag set. Note that his may not match the user's actual + * username - it is a marker that is (1) guaranteed to be associated with + * the current user's permissions in the permission set and (2) guaranteed + * not to collide with any user that does not represent the current user + * within the permission set. + */ + selfUsername: string = ''; + + /** + * All user accounts associated with the same username as the account being + * created or edited, as a map of data source identifier to the User object + * within that data source. + */ + users: Record | null = null; + + /** + * The user being modified. + */ + user: User | null = null; + + /** + * The form group describing the attributes of the user being modified. + */ + userAttributes: FormGroup = new FormGroup({}); + + /** + * All permissions associated with the user being modified. + */ + permissionFlags: PermissionFlagSet | null = null; + + /** + * The set of permissions that will be added to the user when the user is + * saved. Permissions will only be present in this set if they are + * manually added, and not later manually removed before saving. + */ + permissionsAdded: PermissionSet = new PermissionSet(); + + /** + * The set of permissions that will be removed from the user when the user + * is saved. Permissions will only be present in this set if they are + * manually removed, and not later manually added before saving. + */ + permissionsRemoved: PermissionSet = new PermissionSet(); + + /** + * The identifiers of all user groups which can be manipulated (all groups + * for which the user accessing this interface has UPDATE permission), + * either through adding the current user as a member or removing the + * current user from that group. If this information has not yet been + * retrieved, this will be null. + */ + availableGroups: string[] | null = null; + + /** + * The identifiers of all user groups of which the user is a member, + * taking into account any user groups which will be added/removed when + * saved. If this information has not yet been retrieved, this will be + * null. + */ + parentGroups: string[] | null = null; + + /** + * The set of identifiers of all parent user groups to which the user will + * be added when saved. Parent groups will only be present in this set if + * they are manually added, and not later manually removed before saving. + */ + parentGroupsAdded: string[] = []; + + /** + * The set of identifiers of all parent user groups from which the user + * will be removed when saved. Parent groups will only be present in this + * set if they are manually removed, and not later manually added before + * saving. + */ + parentGroupsRemoved: string[] = []; + + /** + * For each applicable data source, the management-related actions that the + * current user may perform on the user account currently being created + * or modified, as a map of data source identifier to the + * {@link ManagementPermissions} object describing the actions available + * within that data source, or null if the current user's permissions have + * not yet been loaded. + */ + managementPermissions: Record | null = null; + + /** + * All available user attributes. This is only the set of attribute + * definitions, organized as logical groupings of attributes, not attribute + * values. + */ + attributes: Form[] | null = null; + + /** + * The password match for the user. + */ + passwordMatch?: string = undefined; + + constructor(private router: Router, + private route: ActivatedRoute, + private http: HttpClient, + private authenticationService: AuthenticationService, + private dataSourceService: DataSourceService, + private membershipService: MembershipService, + private permissionService: PermissionService, + private requestService: RequestService, + private schemaService: SchemaService, + private userGroupService: UserGroupService, + private userService: UserService, + private formService: FormService, + private destroyRef: DestroyRef + ) { + } + + ngOnInit(): void { + this.dataSources = this.authenticationService.getAvailableDataSources(); + this.currentUsername = this.authenticationService.getCurrentUsername(); + this.cloneSourceUsername = this.route.snapshot.queryParamMap.get('clone'); + + // Populate interface with requested data + const userData = this.loadRequestedUser(); + const permissions = this.dataSourceService.apply( + (ds: string, username: string) => this.permissionService.getEffectivePermissions(ds, username), + this.dataSources, + this.currentUsername + ); + const userGroups = this.userGroupService.getUserGroups(this.dataSource, [PermissionSet.ObjectPermissionType.UPDATE]); + const attributes = this.schemaService.getUserAttributes(this.dataSource); + + forkJoin([userData, permissions, userGroups, attributes]) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + next: ([userData, permissions, userGroups, attributes]) => { + + this.attributes = attributes; + + // Populate form with user attributes + this.createUserAttributesFormGroup(); + + this.managementPermissions = {}; + + // add account page + this.dataSources.forEach(dataSource => { + + // Determine whether data source contains this user + const exists = (dataSource in (this.users || {})); + + // Add the identifiers of all modifiable user groups + const availableGroups: string[] = []; + for (let groupIdentifier in userGroups) { + const userGroup = userGroups[groupIdentifier]; + availableGroups.push(userGroup.identifier!); + } + this.availableGroups = availableGroups; + + // Calculate management actions available for this specific account + if (this.managementPermissions) + this.managementPermissions[dataSource] = ManagementPermissions.fromPermissionSet( + permissions[dataSource], + PermissionSet.SystemPermissionType.CREATE_USER, + PermissionSet.hasUserPermission, + exists ? this.username : undefined); + + }); + + }, error: this.requestService.DIE + }); + } + + /** + * Creates the form group that is passed to the guac-form component to allow the + * editing of the user's attributes. This form group is populated with the user's + * current attribute values. The user's attributes are updated when the form group + * values change. + */ + private createUserAttributesFormGroup() { + if (!this.attributes) + return + + // Get a form group which allows editing of the user's attributes + this.userAttributes = this.formService.getFormGroup(this.attributes); + + // Populate the form group with the user's current attribute values + this.userAttributes.patchValue(this.user!.attributes); + + // Update the user's attributes when the form group is updated + this.userAttributes.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + if (this.user) + this.user.attributes = value; + }); + } + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user interface to be + * useful, false otherwise. + */ + isLoaded(): boolean { + + return this.users !== null + && this.permissionFlags !== null + && this.managementPermissions !== null + && this.availableGroups !== null + && this.parentGroups !== null + && this.attributes !== null; + + } + + /** + * Returns whether the current user can edit the username of the user being + * edited within the given data source. + * + * @param dataSource + * The identifier of the data source to check. If omitted, this will + * default to the currently-selected data source. + * + * @returns + * true if the current user can edit the username of the user being + * edited, false otherwise. + */ + canEditUsername(dataSource?: string): boolean { + return !this.username; + } + + /** + * Loads the data associated with the user having the given username, + * preparing the interface for making modifications to that existing user. + * + * @param dataSource + * The unique identifier of the data source containing the user to + * load. + * + * @param username + * The username of the user to load. + * + * @returns + * An observable that completes when the interface has been prepared for + * editing the given user. + */ + private loadExistingUser(dataSource: string, username: string): Observable { + + const users = this.dataSourceService.apply( + (ds: string, username: string) => this.userService.getUser(ds, username), + this.dataSources, + username + ); + + // Use empty permission set if user cannot be found + const permissions = this.permissionService.getPermissions(dataSource, username) + .pipe( + catchError(this.requestService.defaultValue(new PermissionSet())) + ); + + // Assume no parent groups if user cannot be found + const parentGroups = this.membershipService.getUserGroups(dataSource, username) + .pipe( + catchError(this.requestService.defaultValue([])) + ); + + + return forkJoin([users, permissions, parentGroups]) + .pipe( + map(([users, permissions, parentGroups]) => { + + this.users = users; + this.parentGroups = parentGroups; + + // Create skeleton user if uster does not exist + this.user = users[dataSource] || new User({ + 'username': username + }); + + // The current user will be associated with username of the existing + // user in the retrieved permission set + this.selfUsername = username; + this.permissionFlags = PermissionFlagSet.fromPermissionSet(permissions); + + }) + ); + } + + /** + * Loads the data associated with the user having the given username, + * preparing the interface for cloning that existing user. + * + * @param dataSource + * The unique identifier of the data source containing the user to + * be cloned. + * + * @param username + * The username of the user being cloned. + * + * @returns + * An observable that completes when the interface has been prepared for + * cloning the given user. + */ + private loadClonedUser(dataSource: string, username: string): Observable { + + const users = this.dataSourceService.apply( + (ds: string, username: string) => this.userService.getUser(ds, username), + [dataSource], + username + ); + + const permissions = this.permissionService.getPermissions(dataSource, username); + const parentGroups = this.membershipService.getUserGroups(dataSource, username); + + + return forkJoin([users, permissions, parentGroups]) + .pipe( + map(([users, permissions, parentGroups]) => { + + this.users = {}; + this.user = users[dataSource]; + this.parentGroups = parentGroups; + this.parentGroupsAdded = parentGroups; + + // The current user will be associated with cloneSourceUsername in the + // retrieved permission set + this.selfUsername = username; + this.permissionFlags = PermissionFlagSet.fromPermissionSet(permissions); + this.permissionsAdded = permissions; + + }) + ); + } + + /** + * Loads skeleton user data, preparing the interface for creating a new + * user. + * + * @returns + * An observable that completes when the interface has been prepared for + * creating a new user. + */ + private loadSkeletonUser(): Observable { + + // No users exist regardless of data source if there is no username + this.users = {}; + + // Use skeleton user object with no associated permissions + this.user = new User(); + this.parentGroups = []; + this.permissionFlags = new PermissionFlagSet(); + + // As no permissions are yet associated with the user, it is safe to + // use any non-empty username as a placeholder for self-referential + // permissions + this.selfUsername = 'SELF'; + + return of(void (0)); + + } + + /** + * Loads the data required for performing the management task requested + * through the route parameters given at load time, automatically preparing + * the interface for editing an existing user, cloning an existing user, or + * creating an entirely new user. + * + * @returns + * An observable that completes when the interface has been prepared + * for performing the requested management task. + */ + loadRequestedUser(): Observable { + + // Pull user data and permissions if we are editing an existing user + if (this.username) + return this.loadExistingUser(this.dataSource, this.username); + + // If we are cloning an existing user, pull his/her data instead + if (this.cloneSourceUsername) + return this.loadClonedUser(this.dataSource, this.cloneSourceUsername); + + // If we are creating a new user, populate skeleton user data + return this.loadSkeletonUser(); + + } + + /** + * Returns the URL for the page which manages the user account currently + * being edited under the given data source. The given data source need not + * be the same as the data source currently selected. + * + * @param dataSource + * The unique identifier of the data source that the URL is being + * generated for. + * + * @returns + * The URL for the page which manages the user account currently being + * edited under the given data source. + */ + getUserURL(dataSource: string): string { + return '/manage/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(this.username || ''); + } + + /** + * Cancels all pending edits, returning to the main list of users. + */ + returnToUserList(): void { + this.router.navigate(['/settings/users']); + } + + /** + * Cancels all pending edits, opening an edit page for a new user + * which is prepopulated with the data from the user currently being edited. + */ + cloneUser(): void { + this.router.navigate( + ['manage', encodeURIComponent(this.dataSource), 'users'], + {queryParams: {clone: this.username}} + ); + } + + /** + * Saves the current user, creating a new user or updating the existing + * user depending on context, returning an observable that completes if the + * save operation succeeds and rejected if the save operation fails. + * + * @returns + * An observable that completes if the save operation succeeds and fails + * with an {@link Error} if the save operation fails. + */ + saveUser(): Observable { + + // Verify passwords match + if (this.passwordMatch !== this.user?.password) { + return throwError(() => new Error({ + translatableMessage: { + key: 'MANAGE_USER.ERROR_PASSWORD_MISMATCH' + } + })); + } + + // Save or create the user, depending on whether the user exists + let saveUserPromise; + if (this.dataSource in (this.users || {})) + saveUserPromise = this.userService.saveUser(this.dataSource, this.user!); + else + saveUserPromise = this.userService.createUser(this.dataSource, this.user!); + + return saveUserPromise.pipe( + switchMap(() => { + + // Move permission flags if username differs from marker + if (this.selfUsername !== this.user!.username) { + + // Rename added permission + if (this.permissionsAdded.userPermissions[this.selfUsername]) { + this.permissionsAdded.userPermissions[this.user!.username] = this.permissionsAdded.userPermissions[this.selfUsername]; + delete this.permissionsAdded.userPermissions[this.selfUsername]; + } + + // Rename removed permission + if (this.permissionsRemoved.userPermissions[this.selfUsername]) { + this.permissionsRemoved.userPermissions[this.user!.username] = this.permissionsRemoved.userPermissions[this.selfUsername]; + delete this.permissionsRemoved.userPermissions[this.selfUsername]; + } + + } + + // Upon success, save any changed permissions/groups + return forkJoin([ + this.permissionService.patchPermissions(this.dataSource, this.user!.username, this.permissionsAdded, this.permissionsRemoved), + this.membershipService.patchUserGroups(this.dataSource, this.user!.username, this.parentGroupsAdded, this.parentGroupsRemoved) + ]); + + }), + + // Map [void, void] from forkJoin to a simple void + map(() => void (0)) + ); + + } + + /** + * Deletes the current user, returning an observable that completes if the + * delete operation succeeds and rejected if the delete operation fails. + * + * @returns + * An observable that completes if the delete operation succeeds and is + * rejected with an {@link Error} if the delete operation fails. + */ + deleteUser(): Observable { + + if (this.user !== null) { + return this.userService.deleteUser(this.dataSource, this.user); + } + + return of(void (0)); + } + + modelOnly(): boolean { + return !this.managementPermissions?.[this.dataSource].canChangeAllAttributes; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.html new file mode 100644 index 0000000000..5fbd842c9e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.html @@ -0,0 +1,27 @@ + +
      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.ts new file mode 100644 index 0000000000..113925846c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/management-buttons/management-buttons.component.ts @@ -0,0 +1,194 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { ManagementPermissions } from '../../types/ManagementPermissions'; +import { Observable } from 'rxjs'; +import { MenuAction } from '../../../navigation/types/MenuAction'; +import { GuacNotificationService } from '../../../notification/services/guac-notification.service'; + +/** + * Component which displays a set of object management buttons (save, delete, + * clone, etc.) representing the actions available to the current user in + * context of the object being edited/created. + */ +@Component({ + selector: 'management-buttons', + templateUrl: './management-buttons.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ManagementButtonsComponent implements OnInit { + + /** + * The translation namespace associated with all applicable + * translation strings. This directive requires at least the + * following translation strings within the given namespace: + * + * - ACTION_CANCEL + * - ACTION_CLONE + * - ACTION_DELETE + * - ACTION_SAVE + * - DIALOG_HEADER_CONFIRM_DELETE + * - TEXT_CONFIRM_DELETE + */ + @Input({required: true}) namespace!: string; + + /** + * The permissions which dictate the management actions available + * to the current user. + */ + @Input({required: true}) permissions!: ManagementPermissions; + + /** + * The function to invoke to save the arbitrary object being edited + * if the current user has permission to do so. The provided + * function MUST return an observable which completes if the save + * operation succeeds and fail with an {@link Error} if the + * save operation fails. + */ + @Input({required: true}) save!: () => Observable; + + /** + * The function to invoke when the current user chooses to clone + * the object being edited. The provided function MUST perform the + * actions necessary to produce an interface which will clone the + * object. + */ + @Input({required: true}) clone!: () => void; + + /** + * The function to invoke to delete the arbitrary object being edited + * if the current user has permission to do so. The provided + * function MUST return a promise which is resolved if the delete + * operation succeeds and is rejected with an {@link Error} if the + * delete operation fails. + */ + @Input({required: true}) delete!: () => Observable; + + /** + * The function to invoke when the current user chooses to cancel + * the edit in progress, or when a save/delete operation has + * succeeded. The provided function MUST perform the actions + * necessary to return the user to a reasonable starting point. + */ + @Input({required: true}) return!: () => void; + + /** + * An action to be provided along with the object sent to showStatus which + * immediately deletes the current connection. + */ + private DELETE_ACTION!: MenuAction; + + /** + * An action to be provided along with the object sent to showStatus which + * closes the currently-shown status dialog. + */ + private CANCEL_ACTION!: MenuAction; + + /** + * Inject required services. + */ + constructor(private notificationService: GuacNotificationService) { + } + + ngOnInit(): void { + + this.DELETE_ACTION = { + name: this.namespace + '.ACTION_DELETE', + className: 'danger', + callback: () => { + this.deleteObjectImmediately(); + this.notificationService.showStatus(false); + } + }; + + this.CANCEL_ACTION = { + name: this.namespace + '.ACTION_CANCEL', + callback: () => { + this.notificationService.showStatus(false); + } + }; + + } + + /** + * Invokes the provided return function to navigate the user back to + * the page they started from. + */ + navigateBack(): void { + this.return();//TODO ($scope.$parent); + } + + /** + * Invokes the provided delete function, immediately deleting the + * current object without prompting the user for confirmation. If + * deletion is successful, the user is navigated back to the page they + * started from. If the deletion fails, an error notification is + * displayed. + */ + private deleteObjectImmediately(): void { + this.delete().subscribe({ + next: () => this.navigateBack(), + error: this.notificationService.SHOW_REQUEST_ERROR + }); + //TODO $scope['delete']($scope.$parent).then(navigateBack, guacNotification.SHOW_REQUEST_ERROR); + } + + /** + * Cancels all pending edits, invoking the provided clone function to + * open an edit page for a new object which is prepopulated with the + * data from the current object. + */ + cloneObject(): void { + this.clone(); + } + + /** + * Invokes the provided save function to save the current object. If + * saving is successful, the user is navigated back to the page they + * started from. If saving fails, an error notification is displayed. + */ + saveObject(): void { + this.save().subscribe({ + next: () => this.navigateBack(), + error: this.notificationService.SHOW_REQUEST_ERROR + }); + // TODO ($scope.$parent).then(navigateBack, guacNotification.SHOW_REQUEST_ERROR); + } + + /** + * Deletes the current object, prompting the user first to confirm that + * deletion is desired. If the user confirms that deletion is desired, + * the object is deleted through invoking the provided delete function. + * The user is automatically navigated back to the page they started + * from or given an error notification depending on whether deletion + * succeeds. + */ + deleteObject(): void { + + // Confirm deletion request + this.notificationService.showStatus({ + title: this.namespace + '.DIALOG_HEADER_CONFIRM_DELETE', + text: {key: this.namespace + '.TEXT_CONFIRM_DELETE'}, + actions: [this.DELETE_ACTION, this.CANCEL_ACTION] + }); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.html new file mode 100644 index 0000000000..11c5c46b2a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.html @@ -0,0 +1,36 @@ + +
      +

      {{'MANAGE_USER.SECTION_HEADER_PERMISSIONS' | transloco}}

      +
      + + + + + + + + + +
      {{systemPermissionType.label | transloco}}
      {{'MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD' | transloco}}
      +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.ts new file mode 100644 index 0000000000..864733bee3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/system-permission-editor/system-permission-editor.component.ts @@ -0,0 +1,303 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { PermissionFlagSet } from '../../../rest/types/PermissionFlagSet'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { RequestService } from '../../../rest/service/request.service'; + +/** + * A directive for manipulating the system permissions granted within a given + * {@link PermissionFlagSet}, tracking the specific permissions added or + * removed within a separate pair of {@link PermissionSet} objects. Optionally, + * the permission for a particular user to update themselves (change their own + * password/attributes) may also be manipulated. + */ +@Component({ + selector: 'system-permission-editor', + templateUrl: './system-permission-editor.component.html', + encapsulation: ViewEncapsulation.None +}) +export class SystemPermissionEditorComponent implements OnInit { + + /** + * The unique identifier of the data source associated with the + * permissions being manipulated. + */ + @Input({required: true}) dataSource!: string; + + /** + * The username of the user whose self-update permission (whether + * the user has permission to update their own user account) should + * be additionally controlled by this editor. If no such user + * permissions should be controlled, this should be left undefined. + */ + @Input() username?: string; + + /** + * The current state of the permissions being manipulated. This + * {@link PermissionFlagSet} will be modified as changes are made + * through this permission editor. + */ + @Input({required: true}) permissionFlags!: PermissionFlagSet; + + /** + * The set of permissions that have been added, relative to the + * initial state of the permissions being manipulated. + */ + @Input({required: true}) permissionsAdded!: PermissionSet; + + /** + * The set of permissions that have been removed, relative to the + * initial state of the permissions being manipulated. + */ + @Input({required: true}) permissionsRemoved!: PermissionSet; + + /** + * The identifiers of all data sources currently available to the + * authenticated user. + */ + private dataSources: string[] = []; + + /** + * The username of the current, authenticated user. + */ + private currentUsername: string | null = null; + + /** + * The permissions granted to the currently-authenticated user. + */ + private permissions: Record | null = null; + + + /** + * Available system permission types, as translation string / internal + * value pairs. + */ + systemPermissionTypes: { label: string; value: PermissionSet.SystemPermissionType }[] = [ + { + label: 'MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM', + value: PermissionSet.SystemPermissionType.ADMINISTER + }, + { + label: 'MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS', + value: PermissionSet.SystemPermissionType.CREATE_USER + }, + { + label: 'MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS', + value: PermissionSet.SystemPermissionType.CREATE_USER_GROUP + }, + { + label: 'MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS', + value: PermissionSet.SystemPermissionType.CREATE_CONNECTION + }, + { + label: 'MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS', + value: PermissionSet.SystemPermissionType.CREATE_CONNECTION_GROUP + }, + { + label: 'MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES', + value: PermissionSet.SystemPermissionType.CREATE_SHARING_PROFILE + } + ]; + + + constructor(private authenticationService: AuthenticationService, + private dataSourceService: DataSourceService, + private permissionService: PermissionService, + private requestService: RequestService) { + } + + ngOnInit(): void { + this.dataSources = this.authenticationService.getAvailableDataSources(); + this.currentUsername = this.authenticationService.getCurrentUsername(); + + // Query the permissions granted to the currently-authenticated user + this.dataSourceService.apply( + (dataSource: string, userID: string) => this.permissionService.getEffectivePermissions(dataSource, userID), + this.dataSources, + this.currentUsername + ) + .then(permissions => { + this.permissions = permissions; + }, this.requestService.PROMISE_DIE); + + + } + + /** + * Returns whether the current user has permission to change the system + * permissions granted to users. + * + * @returns + * true if the current user can grant or revoke system permissions + * to the permission set being edited, false otherwise. + */ + canChangeSystemPermissions(): boolean { + + // Do not check if permissions are not yet loaded + if (!this.permissions) + return false; + + // Only the administrator can modify system permissions + return PermissionSet.hasSystemPermission(this.permissions[this.dataSource], + PermissionSet.SystemPermissionType.ADMINISTER); + + } + + /** + * Updates the permissionsAdded and permissionsRemoved permission sets + * to reflect the addition of the given system permission. + * + * @param type + * The system permission to add, as defined by + * PermissionSet.SystemPermissionType. + */ + addSystemPermission(type: PermissionSet.SystemPermissionType): void { + + // If permission was previously removed, simply un-remove it + if (PermissionSet.hasSystemPermission(this.permissionsRemoved, type)) + PermissionSet.removeSystemPermission(this.permissionsRemoved, type); + + // Otherwise, explicitly add the permission + else + PermissionSet.addSystemPermission(this.permissionsAdded, type); + + } + + /** + * Updates the permissionsAdded and permissionsRemoved permission sets + * to reflect the removal of the given system permission. + * + * @param type + * The system permission to remove, as defined by + * PermissionSet.SystemPermissionType. + */ + removeSystemPermission(type: PermissionSet.SystemPermissionType): void { + + // If permission was previously added, simply un-add it + if (PermissionSet.hasSystemPermission(this.permissionsAdded, type)) + PermissionSet.removeSystemPermission(this.permissionsAdded, type); + + // Otherwise, explicitly remove the permission + else + PermissionSet.addSystemPermission(this.permissionsRemoved, type); + + } + + /** + * Notifies the controller that a change has been made to the given + * system permission for the permission set being edited. + * + * @param type + * The system permission that was changed, as defined by + * PermissionSet.SystemPermissionType. + */ + systemPermissionChanged(type: PermissionSet.SystemPermissionType): void { + + // Determine current permission setting + const granted = this.permissionFlags.systemPermissions[type]; + + // Add/remove permission depending on flag state + if (granted) + this.addSystemPermission(type); + else + this.removeSystemPermission(type); + + } + + /** + * Updates the permissionsAdded and permissionsRemoved permission sets + * to reflect the addition of the given user permission. + * + * @param type + * The user permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user affected by the permission being added. + */ + addUserPermission(type: PermissionSet.ObjectPermissionType, identifier: string): void { + + // If permission was previously removed, simply un-remove it + if (PermissionSet.hasUserPermission(this.permissionsRemoved, type, identifier)) + PermissionSet.removeUserPermission(this.permissionsRemoved, type, identifier); + + // Otherwise, explicitly add the permission + else + PermissionSet.addUserPermission(this.permissionsAdded, type, identifier); + + } + + /** + * Updates the permissionsAdded and permissionsRemoved permission sets + * to reflect the removal of the given user permission. + * + * @param type + * The user permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user affected by the permission being + * removed. + */ + removeUserPermission(type: PermissionSet.ObjectPermissionType, identifier: string): void { + + // If permission was previously added, simply un-add it + if (PermissionSet.hasUserPermission(this.permissionsAdded, type, identifier)) + PermissionSet.removeUserPermission(this.permissionsAdded, type, identifier); + + // Otherwise, explicitly remove the permission + else + PermissionSet.addUserPermission(this.permissionsRemoved, type, identifier); + + } + + /** + * Notifies the controller that a change has been made to the given user + * permission for the permission set being edited. + * + * @param type + * The user permission that was changed, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user affected by the changed permission. + */ + userPermissionChanged(type: PermissionSet.ObjectPermissionType, identifier: string): void { + + // Determine current permission setting + const granted = this.permissionFlags.userPermissions[type][identifier]; + + // Add/remove permission depending on flag state + if (granted) + this.addUserPermission(type, identifier); + else + this.removeUserPermission(type, identifier); + + } + + /** + * Make the ObjectPermissionType enum available to the template. + */ + protected readonly ObjectPermissionType = PermissionSet.ObjectPermissionType; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/manage.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/manage.module.ts new file mode 100644 index 0000000000..fd9c6dd25a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/manage.module.ts @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule, NgOptimizedImage } from '@angular/common'; +import { ManageUserComponent } from './components/manage-user/manage-user.component'; +import { FormModule } from '../form/form.module'; +import { TranslocoModule } from '@ngneat/transloco'; +import { FormsModule } from '@angular/forms'; +import { NavigationModule } from '../navigation/navigation.module'; +import { DataSourceTabsComponent } from './components/data-source-tabs/data-source-tabs.component'; +import { SystemPermissionEditorComponent } from './components/system-permission-editor/system-permission-editor.component'; +import { IdentifierSetEditorComponent } from './components/identifier-set-editor/identifier-set-editor.component'; +import { ListModule } from '../list/list.module'; +import { ManagementButtonsComponent } from './components/management-buttons/management-buttons.component'; +import { ManageConnectionComponent } from './components/manage-connection/manage-connection.component'; +import { LocationChooserComponent } from './components/location-chooser/location-chooser.component'; +import { GroupListModule } from '../group-list/group-list.module'; +import { LocationChooserConnectionGroupComponent } from './components/location-chooser-connection-group/location-chooser-connection-group.component'; +import { ManageUserGroupComponent } from './components/manage-user-group/manage-user-group.component'; + +/** + * The module for the administration functionality. + */ +@NgModule({ + declarations: [ + ManageUserComponent, + DataSourceTabsComponent, + SystemPermissionEditorComponent, + IdentifierSetEditorComponent, + ManagementButtonsComponent, + ManageConnectionComponent, + LocationChooserComponent, + LocationChooserConnectionGroupComponent, + ManageUserGroupComponent + ], + imports: [ + CommonModule, + FormModule, + TranslocoModule, + FormsModule, + NavigationModule, + ListModule, + NgOptimizedImage, + GroupListModule + ], + exports: [ + ManageUserComponent, + DataSourceTabsComponent, + SystemPermissionEditorComponent, + IdentifierSetEditorComponent, + ManagementButtonsComponent, + ManageConnectionComponent, + LocationChooserComponent, + LocationChooserConnectionGroupComponent + ] +}) +export class ManageModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts new file mode 100644 index 0000000000..902fc34a0e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts @@ -0,0 +1,492 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { AuthenticationService } from '../../auth/service/authentication.service'; +import { ConnectionGroupService } from '../../rest/service/connection-group.service'; +import { DataSourceService } from '../../rest/service/data-source-service.service'; +import { PermissionService } from '../../rest/service/permission.service'; +import { RequestService } from '../../rest/service/request.service'; +import { PageDefinition } from '../../navigation/types/PageDefinition'; +import { ConnectionGroup } from '../../rest/types/ConnectionGroup'; +import { PermissionSet } from '../../rest/types/PermissionSet'; +import { ClientIdentifier } from '../../navigation/types/ClientIdentifier'; +import { catchError, forkJoin, from, map, Observable } from 'rxjs'; +import cloneDeep from 'lodash/cloneDeep'; +import { canonicalize } from '../../form/components/form-field-base/form-field-base.component'; +import { ClientIdentifierService } from '../../navigation/service/client-identifier.service'; + +/** + * A service for generating all the important pages a user can visit. + */ +@Injectable({ + providedIn: 'root' +}) +export class UserPageService { + + /** + * The home page to assign to a user if they can navigate to more than one + * page. + */ + private readonly SYSTEM_HOME_PAGE: PageDefinition = new PageDefinition({ + name: 'USER_MENU.ACTION_NAVIGATE_HOME', + url: '/' + }); + + /** + * Inject required services. + */ + constructor( + private authenticationService: AuthenticationService, + private connectionGroupService: ConnectionGroupService, + private dataSourceService: DataSourceService, + private permissionService: PermissionService, + private requestService: RequestService, + private clientIdentifierService: ClientIdentifierService + ) { + } + + /** + * Returns an appropriate home page for the current user. + * + * @param rootGroups + * A map of all root connection groups visible to the current user, + * where each key is the identifier of the corresponding data source. + * + * @param permissions + * A map of all permissions granted to the current user, where each + * key is the identifier of the corresponding data source. + * + * @returns + * The user's home page. + */ + private generateHomePage(rootGroups: Record, permissions: Record): PageDefinition { + + const settingsPages = this.generateSettingsPages(permissions); + + // If user has access to settings pages, return home page and skip + // evaluation for automatic connections. The Preferences page is + // a Settings page and is always visible, and the Session management + // page is also available to all users so that they can kill their + // own session. We look for more than those two pages to determine + // if we should go to the home page. + if (settingsPages.length > 2) + return this.SYSTEM_HOME_PAGE; + + // If exactly one connection or balancing group is available, use + // that as the home page + const clientPages = this.getClientPages(rootGroups); + return (clientPages.length === 1) ? clientPages[0] : this.SYSTEM_HOME_PAGE; + + } + + /** + * Adds to the given array all pages that the current user may use to + * access connections or balancing groups that are descendants of the given + * connection group. + * + * @param clientPages + * The array that pages should be added to. + * + * @param dataSource + * The data source containing the given connection group. + * + * @param connectionGroup + * The connection group ancestor of the connection or balancing group + * descendants whose pages should be added to the given array. + */ + private addClientPages(clientPages: PageDefinition[], dataSource: string, connectionGroup: ConnectionGroup): void { + + // Add pages for all child connections + connectionGroup.childConnections?.forEach((connection) => { + clientPages.push(new PageDefinition({ + name: connection.name!, + url: '/client/' + this.clientIdentifierService.getString({ + dataSource: dataSource, + type: ClientIdentifier.Types.CONNECTION, + id: connection.identifier + }) + })); + }); + + // Add pages for all child balancing groups, as well as the connectable + // descendants of all balancing groups of any type + connectionGroup.childConnectionGroups?.forEach((connectionGroup) => { + if (connectionGroup.type === ConnectionGroup.Type.BALANCING) { + clientPages.push(new PageDefinition({ + name: connectionGroup.name, + url: '/client/' + this.clientIdentifierService.getString({ + dataSource: dataSource, + type: ClientIdentifier.Types.CONNECTION_GROUP, + id: connectionGroup.identifier + }) + })); + } + + this.addClientPages(clientPages, dataSource, connectionGroup); + + }); + + } + + /** + * Returns a full list of all pages that the current user may use to access + * a connection or balancing group, regardless of the depth of those + * connections/groups within the connection hierarchy. + * + * @param rootGroups + * A map of all root connection groups visible to the current user, + * where each key is the identifier of the corresponding data source. + * + * @returns + * A list of all pages that the current user may use to access a + * connection or balancing group. + */ + getClientPages(rootGroups: Record): PageDefinition[] { + + const clientPages: PageDefinition[] = []; + + // Determine whether a connection or balancing group should serve as + // the home page + for (let dataSource in rootGroups) { + this.addClientPages(clientPages, dataSource, rootGroups[dataSource]); + } + + return clientPages; + + } + + /** + * Returns an observable which emits an appropriate home page for the + * current user. + * + * @returns + * An observable which emits the user's default home page. + */ + getHomePage(): Observable { + + // Resolve promise using home page derived from root connection groups + const rootGroups = this.dataSourceService.apply( + (dataSource: string, connectionGroupID: string) => this.connectionGroupService.getConnectionGroupTree(dataSource, connectionGroupID), + this.authenticationService.getAvailableDataSources(), + ConnectionGroup.ROOT_IDENTIFIER + ); + const permissionsSets = this.dataSourceService.apply( + (dataSource: string, userID: string) => this.permissionService.getEffectivePermissions(dataSource, userID), + this.authenticationService.getAvailableDataSources(), + this.authenticationService.getCurrentUsername() + ); + + return forkJoin([rootGroups, permissionsSets]) + .pipe( + map(([rootGroups, permissionsSets]) => { + return this.generateHomePage(rootGroups, permissionsSets); + }), + catchError(this.requestService.DIE) + ); + + } + + /** + * Returns all settings pages that the current user can visit. This can + * include any of the various manage pages. + * + * @param permissionSets + * A map of all permissions granted to the current user, where each + * key is the identifier of the corresponding data source. + * + * @returns + * An array of all settings pages that the current user can visit. + */ + private generateSettingsPages(permissionSets: Record): PageDefinition[] { + + const pages: PageDefinition[] = []; + + const canManageUsers: string[] = []; + const canManageUserGroups: string[] = []; + const canManageConnections: string[] = []; + const canViewConnectionRecords: string[] = []; + + // Inspect the contents of each provided permission set + this.authenticationService.getAvailableDataSources().forEach((dataSource) => { + + // Get permissions for current data source, skipping if non-existent + let permissions: PermissionSet = permissionSets[dataSource]; + if (!permissions) + return; + + // Do not modify original object + permissions = cloneDeep(permissions); + + // Ignore permission to update root group + PermissionSet.removeConnectionGroupPermission(permissions, + PermissionSet.ObjectPermissionType.UPDATE, + ConnectionGroup.ROOT_IDENTIFIER); + + // Ignore permission to update self + PermissionSet.removeUserPermission(permissions, + PermissionSet.ObjectPermissionType.UPDATE, + this.authenticationService.getCurrentUsername()!); + + // Determine whether the current user needs access to the user management UI + if ( + // System permissions + PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_USER) + + // Permission to update users + || PermissionSet.hasUserPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) + + // Permission to delete users + || PermissionSet.hasUserPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) + + // Permission to administer users + || PermissionSet.hasUserPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) + ) { + canManageUsers.push(dataSource); + } + + // Determine whether the current user needs access to the group management UI + if ( + // System permissions + PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_USER_GROUP) + + // Permission to update user groups + || PermissionSet.hasUserGroupPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) + + // Permission to delete user groups + || PermissionSet.hasUserGroupPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) + + // Permission to administer user groups + || PermissionSet.hasUserGroupPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) + ) { + canManageUserGroups.push(dataSource); + } + + // Determine whether the current user needs access to the connection management UI + if ( + // System permissions + PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION) + || PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION_GROUP) + + // Permission to update connections or connection groups + || PermissionSet.hasConnectionPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) + || PermissionSet.hasConnectionGroupPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE) + + // Permission to delete connections or connection groups + || PermissionSet.hasConnectionPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) + || PermissionSet.hasConnectionGroupPermission(permissions, PermissionSet.ObjectPermissionType.DELETE) + + // Permission to administer connections or connection groups + || PermissionSet.hasConnectionPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) + || PermissionSet.hasConnectionGroupPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER) + ) { + canManageConnections.push(dataSource); + } + + // Determine whether the current user needs access to view connection history + if ( + // A user must be a system administrator to view connection records + PermissionSet.hasSystemPermission(permissions, PermissionSet.SystemPermissionType.ADMINISTER) + ) { + canViewConnectionRecords.push(dataSource); + } + + }); + + // Add link to Session management (always accessible) + pages.push(new PageDefinition({ + name: 'USER_MENU.ACTION_MANAGE_SESSIONS', + url: '/settings/sessions' + })); + + // If user can manage connections, add links for connection management pages + canViewConnectionRecords.forEach((dataSource) => { + pages.push(new PageDefinition({ + name: [ + 'USER_MENU.ACTION_VIEW_HISTORY', + canonicalize('DATA_SOURCE_' + dataSource) + '.NAME' + ], + url: '/settings/' + encodeURIComponent(dataSource) + '/history' + })); + }); + + // If user can manage users, add link to user management page + if (canManageUsers.length) { + pages.push(new PageDefinition({ + name: 'USER_MENU.ACTION_MANAGE_USERS', + url: '/settings/users' + })); + } + + // If user can manage user groups, add link to group management page + if (canManageUserGroups.length) { + pages.push(new PageDefinition({ + name: 'USER_MENU.ACTION_MANAGE_USER_GROUPS', + url: '/settings/userGroups' + })); + } + + // If user can manage connections, add links for connection management pages + canManageConnections.forEach((dataSource) => { + pages.push(new PageDefinition({ + name: [ + 'USER_MENU.ACTION_MANAGE_CONNECTIONS', + canonicalize('DATA_SOURCE_' + dataSource) + '.NAME' + ], + url: '/settings/' + encodeURIComponent(dataSource) + '/connections' + })); + }); + + // Add link to user preferences (always accessible) + pages.push(new PageDefinition({ + name: 'USER_MENU.ACTION_MANAGE_PREFERENCES', + url: '/settings/preferences' + })); + + return pages; + } + + /** + * Returns an observable which emits an array of all settings pages that + * the current user can visit. This can include any of the various manage + * pages. The promise will not be rejected. + * + * @returns + * An observable which emits an array of all settings pages that the + * current user can visit. + */ + getSettingsPages(): Observable { + + // Retrieve current permissions + return from(this.dataSourceService.apply( + (dataSource: string, userID: string) => this.permissionService.getEffectivePermissions(dataSource, userID), + this.authenticationService.getAvailableDataSources(), + this.authenticationService.getCurrentUsername() + )) + + // Resolve promise using settings pages derived from permissions + .pipe(map(permissions => { + return this.generateSettingsPages(permissions); + }), + catchError(this.requestService.DIE) + ); + + } + + /** + * Returns all the main pages that the current user can visit. This can + * include the home page, manage pages, etc. In the case that there are no + * applicable pages of this sort, it may return a client page. + * + * @param rootGroups + * A map of all root connection groups visible to the current user, + * where each key is the identifier of the corresponding data source. + * + * @param permissions + * A map of all permissions granted to the current user, where each + * key is the identifier of the corresponding data source. + * + * @returns + * An array of all main pages that the current user can visit. + */ + generateMainPages(rootGroups: Record, permissions: Record): PageDefinition[] { + + const pages: PageDefinition[] = []; + + // Get home page and settings pages + const homePage = this.generateHomePage(rootGroups, permissions); + const settingsPages = this.generateSettingsPages(permissions); + + // Only include the home page in the list of main pages if the user + // can navigate elsewhere. + if (homePage === this.SYSTEM_HOME_PAGE || settingsPages.length) + pages.push(homePage); + + // Add generic link to the first-available settings page + if (settingsPages.length) { + pages.push(new PageDefinition({ + name: 'USER_MENU.ACTION_MANAGE_SETTINGS', + url: settingsPages[0].url + })); + } + + return pages; + } + + /** + * Returns a promise which resolves to an array of all main pages that the + * current user can visit. This can include the home page, manage pages, + * etc. In the case that there are no applicable pages of this sort, it may + * return a client page. The promise will not be rejected. + * + * @returns + * A promise which resolves to an array of all main pages that the + * current user can visit. + */ + getMainPages(): Observable { + + const promise: Promise = new Promise((resolve, reject) => { + + let rootGroups: Record | null = null; + let permissions: Record | null = null; + + /** + * Resolves the main pages retrieval promise, if possible. If + * insufficient data is available, this function does nothing. + */ + const resolveMainPages = () => { + if (rootGroups && permissions) + resolve(this.generateMainPages(rootGroups, permissions)); + }; + + // Retrieve root group, resolving main pages if possible + this.dataSourceService.apply( + (dataSource: string, connectionGroupID: string) => this.connectionGroupService.getConnectionGroupTree(dataSource, connectionGroupID), + this.authenticationService.getAvailableDataSources(), + ConnectionGroup.ROOT_IDENTIFIER + ) + .then(function rootConnectionGroupsRetrieved(retrievedRootGroups) { + rootGroups = retrievedRootGroups; + resolveMainPages(); + }, this.requestService.PROMISE_DIE); + + + // Retrieve current permissions + this.dataSourceService.apply( + (dataSource: string, userID: string) => this.permissionService.getEffectivePermissions(dataSource, userID), + this.authenticationService.getAvailableDataSources(), + this.authenticationService.getCurrentUsername() + ) + + // Resolving main pages if possible + .then(function permissionsRetrieved(retrievedPermissions) { + permissions = retrievedPermissions; + resolveMainPages(); + }, this.requestService.PROMISE_DIE); + + }); + + return from(promise); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/attributes.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/attributes.css new file mode 100644 index 0000000000..2b5bc92fc1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/attributes.css @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* Do not stretch attributes to fit available area */ +.attributes input[type=text], +.attributes input[type=email], +.attributes input[type=password], +.attributes input[type=number] { + width: auto; +} + +.attributes .form .fields { + display: table; + margin: 1em; +} + +.attributes .form .fields .labeled-field { + display: table-row; +} + +.attributes .form .fields .field-header, +.attributes .form .fields .form-field { + display: table-cell; + padding: 0.125em; + vertical-align: top; +} + +.attributes .form .fields .field-header { + padding-right: 1em; +} + +.attributes .form h3 { + + font-size: 1.25em; + font-weight: bold; + text-transform: uppercase; + padding: 0.5em; + margin: 1em 0; + + border-bottom: 1px solid rgba(0, 0, 0, 0.125); + border-top: 1px solid rgba(0, 0, 0, 0.125); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.125); + background: rgba(0, 0, 0, 0.04); + + width: 100%; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/connection-parameter.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/connection-parameter.css new file mode 100644 index 0000000000..c5645fb36f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/connection-parameter.css @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* Do not stretch connection parameters to fit available area */ +.connection-parameters input[type=text], +.connection-parameters input[type=email], +.connection-parameters input[type=password], +.connection-parameters input[type=number] { + width: auto; +} + +.connection-parameters .form .fields { + display: table; + padding-left: .5em; + border-left: 3px solid rgba(0,0,0,0.125); + width: 100%; +} + +.connection-parameters .form .fields .labeled-field { + display: table-row; +} + +.connection-parameters .form .fields .field-header, +.connection-parameters .form .fields .form-field { + display: table-cell; + padding: 0.125em; + vertical-align: top; + width: 100%; +} + +.connection-parameters .form .fields .field-header { + padding-right: 1em; + width: 0; + white-space: nowrap; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/forms.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/forms.css new file mode 100644 index 0000000000..0f3b3df9b2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/forms.css @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.manage table.properties th { + text-align: left; + font-weight: normal; + padding-right: 1em; +} + +.manage .action-buttons { + text-align: center; + margin-bottom: 1em; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/locationChooser.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/locationChooser.css new file mode 100644 index 0000000000..0eda66a163 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/locationChooser.css @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.location-chooser .dropdown { + + position: absolute; + z-index: 2; + margin-top: -1px; + + width: 3in; + max-height: 2in; + overflow: auto; + + border: 1px solid rgba(0, 0, 0, 0.5); + background: white; + + font-size: 10pt; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user-group.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user-group.css new file mode 100644 index 0000000000..afb0320169 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user-group.css @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.manage-user-group .page-tabs .page-list li.read-only a[href], +.manage-user-group .page-tabs .page-list li.unlinked a[href], +.manage-user-group .page-tabs .page-list li.linked a[href] { + padding-right: 2.5em; + position: relative; +} + +.manage-user-group .page-tabs .page-list li.read-only a[href]:before, +.manage-user-group .page-tabs .page-list li.unlinked a[href]:before, +.manage-user-group .page-tabs .page-list li.linked a[href]:before { + content: ' '; + position: absolute; + right: 0; + bottom: 0; + top: 0; + width: 2.5em; + background-size: 1.25em; + background-repeat: no-repeat; + background-position: center; +} + +.manage-user-group .page-tabs .page-list li.read-only a[href]:before { + background-image: url('^images/lock.svg'); +} + +.manage-user-group .page-tabs .page-list li.unlinked a[href]:before { + background-image: url('^images/plus.svg'); +} + +.manage-user-group .page-tabs .page-list li.unlinked a[href] { + opacity: 0.5; +} + +.manage-user-group .page-tabs .page-list li.unlinked a[href]:hover, +.manage-user-group .page-tabs .page-list li.unlinked a[href].current { + opacity: 1; +} + +.manage-user-group .page-tabs .page-list li.linked a[href]:before { + background-image: url('^images/checkmark.svg'); +} + +.manage-user-group .notice.read-only { + + background: #FDA; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25em; + + text-align: center; + padding: 1em; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user.css new file mode 100644 index 0000000000..27c18e127d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/manage-user.css @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.manage-user .page-tabs .page-list li.read-only a[href], +.manage-user .page-tabs .page-list li.unlinked a[href], +.manage-user .page-tabs .page-list li.linked a[href] { + padding-right: 2.5em; + position: relative; +} + +.manage-user .page-tabs .page-list li.read-only a[href]:before, +.manage-user .page-tabs .page-list li.unlinked a[href]:before, +.manage-user .page-tabs .page-list li.linked a[href]:before { + content: ' '; + position: absolute; + right: 0; + bottom: 0; + top: 0; + width: 2.5em; + background-size: 1.25em; + background-repeat: no-repeat; + background-position: center; +} + +.manage-user .page-tabs .page-list li.read-only a[href]:before { + background-image: url('^images/lock.svg'); +} + +.manage-user .page-tabs .page-list li.unlinked a[href]:before { + background-image: url('^images/plus.svg'); +} + +.manage-user .page-tabs .page-list li.unlinked a[href] { + opacity: 0.5; +} + +.manage-user .page-tabs .page-list li.unlinked a[href]:hover, +.manage-user .page-tabs .page-list li.unlinked a[href].current { + opacity: 1; +} + +.manage-user .page-tabs .page-list li.linked a[href]:before { + background-image: url('^images/checkmark.svg'); +} + +.manage-user .notice.read-only { + + background: #FDA; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25em; + + text-align: center; + padding: 1em; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/related-objects.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/related-objects.css new file mode 100644 index 0000000000..77284b8c94 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/styles/related-objects.css @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.related-objects .abbreviated-related-objects { + display: table; + margin: 1em 0; +} + +.related-objects .abbreviated-related-objects ul { + display: table-cell; + vertical-align: top; +} + +.related-objects .abbreviated-related-objects ul, +.related-objects .all-related-objects ul { + padding: 0; + list-style: none; +} + +.related-objects .abbreviated-related-objects ul li { + + display: inline-block; + margin: 0.25em; + padding: 0.25em; + + border: 1px solid silver; + background: #F5F5F5; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + -khtml-border-radius: 0.25em; + border-radius: 0.25em; + +} + +.related-objects .abbreviated-related-objects ul li img.remove { + max-height: 0.75em; + max-width: 0.75em; + margin: 0 0.25em; +} + +.related-objects .abbreviated-related-objects ul li .identifier { + margin: 0 0.25em; +} + +.related-objects .abbreviated-related-objects img.expand:not([hidden]), +.related-objects .abbreviated-related-objects img.collapse:not([hidden]) { + display: table-cell; + max-height: 1.5em; + max-width: 1.5em; + margin: 0.375em 0; +} + +.related-objects .all-related-objects { + border-top: 1px solid silver; +} + +.related-objects .abbreviated-related-objects p.no-related-objects, +.related-objects .all-related-objects p.no-objects-available { + font-style: italic; + opacity: 0.5; +} + +.related-objects .abbreviated-related-objects p.no-related-objects { + display: table-cell; + vertical-align: middle; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts new file mode 100644 index 0000000000..bbb5afc0b8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ConnectionHistoryEntry } from '../../rest/types/ConnectionHistoryEntry'; + +/** + * Wrapper for ConnectionHistoryEntry which adds display-specific + * properties, such as the connection duration. + */ +export class HistoryEntryWrapper { + + /** + * The wrapped ConnectionHistoryEntry. + */ + entry: ConnectionHistoryEntry; + + /** + * An object providing value and unit properties, denoting the duration + * and its corresponding units. + */ + duration: ConnectionHistoryEntry.Duration | null = null; + + /** + * The string to display as the duration of this history entry. If a + * duration is available, its value and unit will be exposed to any + * given translation string as the VALUE and UNIT substitution + * variables respectively. + */ + durationText: string = 'MANAGE_CONNECTION.TEXT_HISTORY_DURATION'; + + /** + * Creates a new HistoryEntryWrapper. + * + * @param historyEntry + * The history entry to wrap. + */ + constructor(historyEntry: ConnectionHistoryEntry) { + this.entry = historyEntry; + this.duration = null; + + // Notify if connection is active right now + if (historyEntry.active) + this.durationText = 'MANAGE_CONNECTION.INFO_CONNECTION_ACTIVE_NOW'; + + // If connection is not active, inform user if end date is not known + else if (!historyEntry.endDate) + this.durationText = 'MANAGE_CONNECTION.INFO_CONNECTION_DURATION_UNKNOWN'; + + // Set the duration if the necessary information is present + if (historyEntry.endDate && historyEntry.startDate) + this.duration = new ConnectionHistoryEntry.Duration(historyEntry.endDate - historyEntry.startDate); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUser.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUser.ts new file mode 100644 index 0000000000..9f0c62fd31 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUser.ts @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { User } from '../../rest/types/User'; + +/** + * A pairing of an {@link User} with the identifier of its corresponding + * data source. + */ +export class ManageableUser { + + /** + * The unique identifier of the data source containing this user. + */ + dataSource: string; + + /** + * The {@link User} object represented by this ManageableUser and + * contained within the associated data source. + */ + user: User; + + /** + * Create a new ManageableUser object. + * + * @param template + * The object whose properties should be copied within the new + * ManageableUser. + */ + constructor(template: ManageableUser) { + this.dataSource = template.dataSource; + this.user = template.user; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUserGroup.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUserGroup.ts new file mode 100644 index 0000000000..933299b39d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManageableUserGroup.ts @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { UserGroup } from '../../rest/types/UserGroup'; + +/** + * A pairing of an {@link UserGroup} with the identifier of its corresponding + * data source. + */ +export class ManageableUserGroup { + + /** + * The unique identifier of the data source containing this user. + */ + dataSource: string; + + /** + * The @link{UserGroup} object represented by this ManageableUserGroup + * and contained within the associated data source. + */ + userGroup: UserGroup; + + + /** + * Create a new ManageableUserGroup object. + * + * @param template + * The object whose properties should be copied within the new + * ManageableUserGroup. + */ + constructor(template: ManageableUserGroup) { + this.dataSource = template.dataSource; + this.userGroup = template.userGroup; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManagementPermissions.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManagementPermissions.ts new file mode 100644 index 0000000000..60b0cdd046 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/ManagementPermissions.ts @@ -0,0 +1,171 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { PermissionSet } from '../../rest/types/PermissionSet'; + +/** + * Higher-level representation of the management-related permissions + * available to the current user on a particular, arbitrary object. + */ +export class ManagementPermissions { + + /** + * The identifier of the associated object, or null if the object does + * not yet exist. + */ + identifier: string | null; + + /** + * Whether the user can save the associated object. This could be + * updating an existing object, or creating a new object. + */ + canSaveObject: boolean; + + /** + * Whether the user can clone the associated object. + */ + canCloneObject: boolean; + + /** + * Whether the user can delete the associated object. + */ + canDeleteObject: boolean; + + /** + * Whether the user can change attributes which are currently + * associated with the object. + */ + canChangeAttributes: boolean; + + /** + * Whether the user can change absolutely all attributes associated + * with the object, including those which are not already present. + */ + canChangeAllAttributes: boolean; + + /** + * Whether the user can change permissions which are assigned to the + * associated object, if the object is capable of being assigned + * permissions. + */ + canChangePermissions: boolean; + + /** + * Create a new ManagementPermissions object. + * + * @param template + * An object whose properties should be copied into the new + * ManagementPermissions object. + */ + constructor(template: ManagementPermissions) { + this.identifier = template.identifier || null; + this.canSaveObject = template.canSaveObject; + this.canCloneObject = template.canCloneObject; + this.canDeleteObject = template.canDeleteObject; + this.canChangeAttributes = template.canChangeAttributes; + this.canChangeAllAttributes = template.canChangeAllAttributes; + this.canChangePermissions = template.canChangePermissions; + } + + /** + * Creates a new {@link ManagementPermissions} which defines the high-level + * actions the current user may take for the given object. + * + * @param permissions + * The effective permissions granted to the current user within the + * data source associated with the object being managed. + * + * @param createPermission + * The system permission required to create objects of the same type as + * the object being managed, as defined by + * {@link PermissionSet.SystemPermissionTypes}. + * + * @param hasObjectPermission + * The function to invoke to test whether a {@link PermissionSet} + * contains a particular object permission. The parameters accepted + * by this function must be identical to those accepted by + * {@link PermissionSet.hasUserPermission()}, + * {@link PermissionSet.hasConnectionPermission()}, etc. + * + * @param identifier + * The identifier of the object being managed. If the object does not + * yet exist, this parameter should be omitted or set to null. + * + * @returns + * A new {@link ManagementPermissions} which defines the high-level + * actions the current user may take for the given object. + */ + static fromPermissionSet(permissions: PermissionSet, createPermission: PermissionSet.SystemPermissionType, + hasObjectPermission: (permissions: PermissionSet, permission: PermissionSet.ObjectPermissionType, identifier?: string) => boolean, + identifier?: string): ManagementPermissions { + + const nullableIdentifier = identifier === undefined ? null : identifier; + + const isAdmin = PermissionSet.hasSystemPermission(permissions, + PermissionSet.SystemPermissionType.ADMINISTER); + + const canCreate = PermissionSet.hasSystemPermission(permissions, createPermission); + const canAdminister = hasObjectPermission(permissions, PermissionSet.ObjectPermissionType.ADMINISTER, identifier); + const canUpdate = hasObjectPermission(permissions, PermissionSet.ObjectPermissionType.UPDATE, identifier); + const canDelete = hasObjectPermission(permissions, PermissionSet.ObjectPermissionType.DELETE, identifier); + + const exists = !!nullableIdentifier; + + return new ManagementPermissions({ + + identifier: nullableIdentifier, + + // A user can save (create or update) an object if they are a + // system-level administrator, OR the object does not yet exist and + // the user has explicit permission to create such objects, OR the + // object does already exist and the user has explicit UPDATE + // permission on the object + canSaveObject: isAdmin || (!exists && canCreate) || canUpdate, + + // A user can clone an object only if the object exists, and + // only if they are a system-level administrator OR they have + // explicit permission to create such objects + canCloneObject: exists && (isAdmin || canCreate), + + // A user can delete an object only if the object exists, and + // only if they are a system-level administrator OR they have + // explicit DELETE permission on the object + canDeleteObject: exists && (isAdmin || canDelete), + + // Attributes in general (with or without existing values) can only + // be changed if the object is being created, OR the user is a + // system-level administrator, OR the user has explicit UPDATE + // permission on the object + canChangeAttributes: !exists || isAdmin || canUpdate, + + // A user can change the attributes of an object which are not + // explicitly defined on that object when the object is being + // created + canChangeAllAttributes: !exists, + + // A user can change the system permissions related to an object + // if they are a system-level admin, OR they are creating the + // object, OR they have explicit ADMINISTER permission on the + // existing object + canChangePermissions: isAdmin || !exists || canAdminister + + }); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.html new file mode 100644 index 0000000000..9a63c4f70e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.html @@ -0,0 +1,27 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts new file mode 100644 index 0000000000..8e20936f2c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, ElementRef, Inject, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { DOCUMENT } from "@angular/common"; + +@Component({ + selector: 'guac-menu', + templateUrl: './guac-menu.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacMenuComponent implements OnInit { + + /** + * The string which should be rendered as the menu title. + */ + @Input() menuTitle: string = ''; + + /** + * Whether the menu should remain open while the user interacts + * with the contents of the menu. By default, the menu will close + * if the user clicks within the menu contents. + */ + @Input() interactive: boolean = false; + + /** + * The outermost element of the guacMenu directive. + */ + element?: Element; + + /** + * Whether the contents of the menu are currently shown. + */ + menuShown: boolean = false; + + constructor(@Inject(DOCUMENT) private document: Document, private elementRef: ElementRef) { + this.element = elementRef.nativeElement; + } + + ngOnInit(): void { + // Close menu when user clicks anywhere outside this specific menu + this.document.body.addEventListener('click', (e: MouseEvent) => { + //clickOutsideMenu + // TODO: $scope.$apply(function closeMenu() { + // TODO: Check cast to Node + if (e.target !== this.element && !this.element?.contains(e.target as Node)) + this.menuShown = false; + // }); + }, false); + } + + + /** + * Toggles visibility of the menu contents. + */ + toggleMenu(): void { + this.menuShown = !this.menuShown; + } + + /** + * Prevent clicks within menu contents from toggling menu visibility + * if the menu contents are intended to be interactive. + */ + clickInsideMenuContents(e: Event): void { + if (this.interactive) + e.stopPropagation(); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.html new file mode 100644 index 0000000000..ef8ff50718 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.html @@ -0,0 +1,41 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts new file mode 100644 index 0000000000..f1e4f5b000 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GuacPageListComponent } from './guac-page-list.component'; +import { By } from "@angular/platform-browser"; +import { SimpleChange } from "@angular/core"; +import { LocaleModule } from "../../../locale/locale.module"; + +describe('PageListComponent', () => { + let component: GuacPageListComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [GuacPageListComponent], + imports: [LocaleModule] + }); + fixture = TestBed.createComponent(GuacPageListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should display a list of links to pages', () => { + + const selector = By.css('a'); + + component.pages = [ + {name: 'Page 1', url: '/page1'}, + {name: 'Page 2', url: '/page2'}, + {name: 'Page 3', url: '/page3'} + ]; + + component.ngOnChanges({pages: new SimpleChange([], component.pages, false)}); + fixture.detectChanges(); + + const elements = fixture.debugElement.queryAll(selector); + expect(elements.length).toBe(3); + }); + + it('should add a "current" class to the link of the current page', () => { + + const selector = By.css('a'); + + component.pages = [ + {name: 'Page 0', url: '/'}, + {name: 'Page 1', url: '/page1'}, + ]; + + component.ngOnChanges({pages: new SimpleChange([], component.pages, false)}); + fixture.detectChanges(); + + const elements = fixture.debugElement.queryAll(selector); + + const page0 = elements[0].nativeElement; + const page1 = elements[1].nativeElement; + + expect(page0).toHaveClass('current'); + expect(page1).not.toHaveClass('current'); + + component.currentURL = '/page1'; + fixture.detectChanges(); + + expect(page0).not.toHaveClass('current'); + expect(page1).toHaveClass('current'); + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts new file mode 100644 index 0000000000..a61b0fe577 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts @@ -0,0 +1,261 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { PageDefinition } from '../../types/PageDefinition'; +import { isArray } from '../../../util/is-array'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { filter } from 'rxjs'; + +/** + * A directive which provides a list of links to specific pages. + */ +@Component({ + selector: 'guac-page-list', + templateUrl: './guac-page-list.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacPageListComponent implements OnInit, OnChanges { + + /** + * The array of pages to display. + */ + @Input() pages: PageDefinition[] = []; + + /** + * The URL of the currently-displayed page. + */ + currentURL: string = ''; + + /** + * The names associated with the current page, if the current page + * is known. The value of this property corresponds to the value of + * PageDefinition.name. Though PageDefinition.name may be a String, + * this will always be an Array. + */ + currentPageName: string[] = []; + + /** + * Array of each level of the page list, where a level is defined + * by a mapping of names (translation strings) to the + * PageDefinitions corresponding to those names. + */ + levels: Record[] = []; + + /** + * Inject required services. + */ + constructor(private router: Router, private route: ActivatedRoute) { + } + + ngOnInit(): void { + + // Set the currentURL initially + this.currentURL = this.router.url; + + // Updates the currentURL when the route changes. + this.router.events + .pipe(filter((event): event is NavigationEnd => event instanceof NavigationEnd)) + .subscribe((event) => { + this.currentURL = event.url; + }); + } + + + /** + * Returns the names associated with the given page, in + * hierarchical order. If the page is only associated with a single + * name, and that name is not stored as an array, it will be still + * be returned as an array containing a single item. + * + * @param {PageDefinition} page + * The page to return the names of. + * + * @return {String[]} + * An array of all names associated with the given page, in + * hierarchical order. + */ + getPageNames(page: PageDefinition): string[] { + + // If already an array, simply return the name + if (isArray(page.name)) + return page.name; + + // Otherwise, transform into array + return [page.name]; + + } + + /** + * Adds the given PageDefinition to the overall set of pages + * displayed by this guacPageList, automatically updating the + * available levels and the contents of those levels. + * + * @param page + * The PageDefinition to add. + * + * @param weight + * The sorting weight to use for the page if it does not + * already have an associated weight. + */ + addPage(page: PageDefinition, weight: number = 0): void { + + // Pull all names for page + const names = this.getPageNames(page); + + // Copy the hierarchy of this page into the displayed levels + // as far as is relevant for the currently-displayed page + for (let i = 0; i < names.length; i++) { + + // Create current level, if it doesn't yet exist + let pages = this.levels[i]; + if (!pages) + pages = this.levels[i] = {}; + + // Get the name at the current level + const name = names[i]; + + // Determine whether this page definition is part of the + // hierarchy containing the current page + const isCurrentPage = (this.currentPageName[i] === name); + + // Store new page if it doesn't yet exist at this level + if (!pages[name]) { + pages[name] = new PageDefinition({ + name: name, + url: isCurrentPage ? this.currentURL : page.url, + className: page.className, + weight: page.weight || (weight + i) + }); + } + + // If the name at this level no longer matches the + // hierarchy of the current page, do not go any deeper + if (this.currentPageName[i] !== name) + break; + + } + + } + + /** + * Navigate to the given page. + * + * @param page + * The page to navigate to. + */ + navigateToPage(page: PageDefinition): void { + this.router.navigate([page.url]); + } + + /** + * Tests whether the given page is the page currently being viewed. + * + * @param {PageDefinition} page + * The page to test. + * + * @returns {Boolean} + * true if the given page is the current page, false otherwise. + */ + isCurrentPage(page: PageDefinition): boolean { + return this.currentURL === page.url; + } + + /** + * Given an arbitrary map of PageDefinitions, returns an array of + * those PageDefinitions, sorted by weight. + * + * @param {Object.<*, PageDefinition>} level + * A map of PageDefinitions with arbitrary keys. The value of + * each key is ignored. + * + * @returns {PageDefinition[]} + * An array of all PageDefinitions in the given map, sorted by + * weight. + */ + getPages(level: Record): PageDefinition[] { + + const pages: PageDefinition[] = []; + + // Convert contents of level to a flat array of pages + for (let key in level) { + const page = level[key]; + pages.push(page); + + } + + // Sort page array by weight + pages.sort(function comparePages(a, b) { + return (a.weight || 0) - (b.weight || 0); + }); + + return pages; + + } + + ngOnChanges(changes: SimpleChanges): void { + // Update page levels whenever pages changes + if (changes['pages']) { + const pages: PageDefinition[] = changes['pages'].currentValue; + + // Determine current page name + this.currentPageName = []; + for (let page of pages) { + + // If page is current page, store its names + if (this.isCurrentPage(page)) + this.currentPageName = this.getPageNames(page); + } + + + // Reset contents of levels + this.levels = []; + + // Add all page definitions + pages.forEach((page) => this.addPage(page)) + + // Filter to only relevant levels + this.levels = this.levels.filter(function isRelevant(level) { + + // Determine relevancy by counting the number of pages + let pageCount = 0; + for (let name in level) { + + // Level is relevant if it has two or more pages + if (++pageCount === 2) + return true; + + } + + // Otherwise, the level is not relevant + return false; + + }); + } + } + + trackByIndex(index: number): number { + return index; + } + + /** + * Make isArray() available to the template to render page.name accordingly. + */ + protected readonly isArray = isArray; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.html new file mode 100644 index 0000000000..fbb248fef5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.html @@ -0,0 +1,28 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts new file mode 100644 index 0000000000..1de1b5a2f0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GuacSectionTabsComponent } from './guac-section-tabs.component'; +import { By } from '@angular/platform-browser'; +import { LocaleModule } from '../../../locale/locale.module'; + +describe('SectionTabsComponent', () => { + let component: GuacSectionTabsComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [GuacSectionTabsComponent], + imports: [LocaleModule] + }); + fixture = TestBed.createComponent(GuacSectionTabsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should produce the correct section header translation string', () => { + component.namespace = 'namespace'; + const sectionHeader = component.getSectionHeader('Tab 1'); + expect(sectionHeader).toBe('NAMESPACE.SECTION_HEADER_TAB_1'); + }); + + it('should emit the current tab name when a tab is selected', () => { + component.tabs = ['Tab 1', 'Tab 2', 'Tab 3']; + component.current = 'Tab 1'; + spyOn(component.currentChange, 'emit'); + component.selectTab('Tab 2'); + expect(component.current).toBe('Tab 2'); + expect(component.currentChange.emit).toHaveBeenCalledWith('Tab 2'); + }); + + it('should render the tabs', () => { + component.tabs = ['Tab 1', 'Tab 2', 'Tab 3']; + fixture.detectChanges(); + const tabElements = fixture.debugElement.queryAll(By.css('a')); + expect(tabElements.length).toBe(3); + expect(tabElements[0].nativeElement.textContent).toContain('TAB_1'); + expect(tabElements[1].nativeElement.textContent).toContain('TAB_2'); + expect(tabElements[2].nativeElement.textContent).toContain('TAB_3'); + }); + + it('should apply the "current" CSS class to the current tab', () => { + component.tabs = ['Tab 1', 'Tab 2', 'Tab 3']; + component.current = 'Tab 2'; + fixture.detectChanges(); + const tabElements = fixture.debugElement.queryAll(By.css('a')); + expect(tabElements.length).toBe(3); + expect(tabElements[0].nativeElement).not.toHaveClass('current'); + expect(tabElements[1].nativeElement).toHaveClass('current'); + expect(tabElements[2].nativeElement).not.toHaveClass('current'); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts new file mode 100644 index 0000000000..6a86401a93 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; +import { canonicalize } from '../../../form/components/form-field-base/form-field-base.component'; + +/** + * Component which displays a set of tabs dividing a section of a page into + * logical subsections or views. The currently selected tab is communicated + * through assignment to the variable bound to the current + * attribute. No navigation occurs as a result of selecting a tab. + */ +@Component({ + selector: 'guac-section-tabs', + templateUrl: './guac-section-tabs.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacSectionTabsComponent { + + /** + * The translation namespace to use when producing translation + * strings for each tab. Tab translation strings will be of the + * form: + * + * NAMESPACE.SECTION_HEADER_NAME + * + * where NAMESPACE is the namespace provided to this + * attribute and NAME is one of the names within the + * array provided to the tabs attribute and + * transformed via canonicalize(). + */ + @Input() namespace?: string; + + /** + * The name of the currently selected tab. This name MUST be one of + * the names present in the array given via the tabs + * attribute. This directive will not automatically choose an + * initially selected tab, and a default value should be manually + * assigned to current to ensure a tab is initially + * selected. + */ + @Input() current?: string; + + /** + * The name of the currently selected tab. This name MUST be one of + * the names present in the array given via the tabs + * attribute. This directive will not automatically choose an + * initially selected tab, and a default value should be manually + * assigned to current to ensure a tab is initially + * selected. + * + * When the current tab changes, this output property emits the new + * tab name as a string. + */ + @Output() currentChange: EventEmitter = new EventEmitter(); + + /** + * The unique names of all tabs which should be made available, in + * display order. These names will be assigned to the variable + * bound to the current attribute when the current + * tab changes. + */ + @Input() tabs?: string[]; + + /** + * Produces the translation string for the section header representing + * the tab having the given name. The translation string will be of the + * form: + * + * NAMESPACE.SECTION_HEADER_NAME + * + * where NAMESPACE is the namespace provided to the + * directive and NAME is the given name transformed + * via canonicalize(). + * + * @param name + * The name of the tab. + * + * @returns + * The translation string which produces the translated header + * of the tab having the given name. + */ + getSectionHeader(name: string): string { + + // If no name, then no header + if (!name) + return ''; + + return canonicalize(this.namespace || 'MISSING_NAMESPACE') + + '.SECTION_HEADER_' + canonicalize(name); + + } + + /** + * Selects the tab having the given name. The name of the currently + * selected tab will be communicated outside the directive through + * $scope.current. + * + * @param name + * The name of the tab to select. + */ + selectTab(name: string): void { + this.current = name; + this.currentChange.emit(this.current); + } + + /** + * Returns whether the tab having the given name is currently + * selected. A tab is currently selected if its name is stored within + * $scope.current, as assigned externally or by selectTab(). + * + * @param name + * The name of the tab to test. + * + * @returns + * true if the tab having the given name is currently selected, + * false otherwise. + */ + isSelected(name: string): boolean { + return this.current === name; + }; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.html new file mode 100644 index 0000000000..a69b5691bb --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.html @@ -0,0 +1,51 @@ + +
      + + + +
      + +
      {{ role }}
      +
      {{ organization }}
      +
      + + + + + + + + + + +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.ts new file mode 100644 index 0000000000..dfb8434446 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-user-menu/guac-user-menu.component.ts @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { MenuAction } from '../../types/MenuAction'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { UserService } from '../../../rest/service/user.service'; +import { UserPageService } from '../../../manage/services/user-page.service'; +import { PageDefinition } from '../../types/PageDefinition'; +import { User } from '../../../rest/types/User'; + +/** + * A directive which provides a user-oriented menu containing options for + * navigation and configuration. + */ +@Component({ + selector: 'guac-user-menu', + templateUrl: './guac-user-menu.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacUserMenuComponent implements OnInit { + + /** + * Optional array of actions which are specific to this particular + * location, as these actions may not be appropriate for other + * locations which contain the user menu. + */ + @Input() localActions?: MenuAction[]; + + /** + * The username of the current user. + */ + username: string | null = this.authenticationService.getCurrentUsername(); + + /** + * The user's full name. If not yet available, or if not defined, + * this will be null. + */ + fullName: string | null = null; + + /** + * A URL pointing to relevant user information such as the user's + * email address. If not yet available, or if no such URL can be + * determined, this will be null. + */ + userURL: string | null = null; + + /** + * The organization, company, group, etc. that the user belongs to. + * If not yet available, or if not defined, this will be null. + */ + organization: string | null = null; + + /** + * The role that the user has at the organization, company, group, + * etc. they belong to. If not yet available, or if not defined, + * this will be null. + */ + role: string | null = null; + + /** + * The available main pages for the current user. + */ + pages: PageDefinition[] = []; + + /** + * Action which logs out the current user, redirecting them to back + * to the login screen after logout completes. + */ + private readonly LOGOUT_ACTION: MenuAction = { + name: 'USER_MENU.ACTION_LOGOUT', + className: 'logout', + callback: () => this.logout() + }; + + /** + * All available actions for the current user. + */ + actions: MenuAction[] = [this.LOGOUT_ACTION]; + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private requestService: RequestService, + private userService: UserService, + private userPageService: UserPageService + ) { + } + + ngOnInit(): void { + // Display user profile attributes if available + this.userService.getUser(this.authenticationService.getDataSource()!, this.username!) + .subscribe({ + next: user => { + // Pull basic profile information + this.fullName = user.attributes[User.Attributes.FULL_NAME]; + this.organization = user.attributes[User.Attributes.ORGANIZATION]; + this.role = user.attributes[User.Attributes.ORGANIZATIONAL_ROLE]; + + // Link to email address if available + const email = user.attributes[User.Attributes.EMAIL_ADDRESS]; + this.userURL = email ? 'mailto:' + email : null; + }, + + error: this.requestService.IGNORE + }); + + // Retrieve the main pages from the user page service + this.userPageService.getMainPages() + .subscribe(pages => { + this.pages = pages; + }); + } + + /** + * Returns whether the current user has authenticated anonymously. + * + * @returns + * true if the current user has authenticated anonymously, false + * otherwise. + */ + isAnonymous(): boolean { + return this.authenticationService.isAnonymous(); + } + + /** + * Logs out the current user, redirecting them to back to the root + * after logout completes. + */ + logout(): void { + this.authenticationService.logout().subscribe({ + error: this.requestService.IGNORE + }); + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/navigation.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/navigation.module.ts new file mode 100644 index 0000000000..7347ffc6a9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/navigation.module.ts @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GuacMenuComponent } from './components/guac-menu/guac-menu.component'; +import { GuacPageListComponent } from './components/guac-page-list/guac-page-list.component'; +import { GuacSectionTabsComponent } from './components/guac-section-tabs/guac-section-tabs.component'; +import { TranslocoModule } from '@ngneat/transloco'; +import { GuacUserMenuComponent } from './components/guac-user-menu/guac-user-menu.component'; +import { RouterLink } from '@angular/router'; + +/** + * Module for generating and implementing user navigation options. + */ +@NgModule({ + declarations: [ + GuacMenuComponent, + GuacPageListComponent, + GuacSectionTabsComponent, + GuacUserMenuComponent + ], + exports: [ + GuacMenuComponent, + GuacPageListComponent, + GuacSectionTabsComponent, + GuacUserMenuComponent + ], + imports: [ + CommonModule, + TranslocoModule, + RouterLink, + ] +}) +export class NavigationModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/service/client-identifier.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/service/client-identifier.service.ts new file mode 100644 index 0000000000..8388d5c0a5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/service/client-identifier.service.ts @@ -0,0 +1,174 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { AuthenticationService } from '../../auth/service/authentication.service'; +import { ClientIdentifier } from '../types/ClientIdentifier'; + +/** + * Encodes the given value as base64url, a variant of base64 defined by + * RFC 4648: https://datatracker.ietf.org/doc/html/rfc4648#section-5. + * + * The "base64url" variant is identical to standard base64 except that it + * uses "-" instead of "+", "_" instead of "/", and padding with "=" is + * optional. + * + * @param value + * The string value to encode. + * + * @returns + * The provided string value encoded as unpadded base64url. + */ +const base64urlEncode = (value: string): string => { + + // Translate padded standard base64 to unpadded base64url + return window.btoa(value).replace(/[+/=]/g, + (str) => ({ + '+': '-', + '/': '_', + '=': '' + })[str] as string + ); + +} + +/** + * Decodes the given base64url or base64 string. The input string may + * contain "=" padding characters, but this is not required. + * + * @param value + * The base64url or base64 value to decode. + * + * @returns + * The result of decoding the provided base64url or base64 string. + */ +const base64urlDecode = (value: string): string => { + + // Add any missing padding (standard base64 requires input strings to + // be multiples of 4 in length, padded using '=') + value += ([ + '', + '===', + '==', + '=' + ])[value.length % 4]; + + // Translate padded base64url to padded standard base64 + return window.atob(value.replace(/[-_]/g, + (str) => ({ + '-': '+', + '_': '/' + })[str] as string + )); +} + +@Injectable({ + providedIn: 'root' +}) +export class ClientIdentifierService { + + private window: Window; + + /** + * Inject required services. + */ + constructor(@Inject(DOCUMENT) private document: Document, + private authenticationService: AuthenticationService + ) { + this.window = this.document.defaultView as Window; + } + + + /** + * Converts the given ClientIdentifier or ClientIdentifier-like object to + * a String representation. Any object having the same properties as + * ClientIdentifier may be used, but only those properties will be taken + * into account when producing the resulting String. + * + * @param id + * The ClientIdentifier or ClientIdentifier-like object to convert to + * a String representation. + * + * @returns + * A deterministic String representation of the given ClientIdentifier + * or ClientIdentifier-like object. + */ + getString(id: ClientIdentifier): string { + return ClientIdentifierService.getString(id); + } + + /** + * Converts the given ClientIdentifier or ClientIdentifier-like object to + * a String representation. Any object having the same properties as + * ClientIdentifier may be used, but only those properties will be taken + * into account when producing the resulting String. + * + * @param id + * The ClientIdentifier or ClientIdentifier-like object to convert to + * a String representation. + * + * @returns + * A deterministic String representation of the given ClientIdentifier + * or ClientIdentifier-like object. + */ + static getString(id: ClientIdentifier): string { + return base64urlEncode([ + id.id, + id.type, + id.dataSource + ].join('\0')); + } + + /** + * Converts the given String into the corresponding ClientIdentifier. If + * the provided String is not a valid identifier, it will be interpreted + * as the identifier of a connection within the data source that + * authenticated the current user. + * + * @param str + * The String to convert to a ClientIdentifier. + * + * @returns + * The ClientIdentifier represented by the given String. + */ + fromString(str: string): ClientIdentifier { + + try { + const values = base64urlDecode(str).split('\0'); + return new ClientIdentifier({ + id: values[0], + type: values[1], + dataSource: values[2] + }); + } + + // If the provided string is invalid, transform into a reasonable guess + catch (e) { + return new ClientIdentifier({ + id: str, + type: ClientIdentifier.Types.CONNECTION, + dataSource: this.authenticationService.getDataSource() || 'default' + }); + } + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/menu.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/menu.css new file mode 100644 index 0000000000..78c63e8c77 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/menu.css @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.menu-dropdown { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: center; + -ms-flex-direction: row; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: center; + -moz-box-orient: horizontal; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: center; + -webkit-box-orient: horizontal; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: center; + -webkit-flex-direction: row; + + /* W3C */ + display: flex; + align-items: center; + flex-direction: row; + +} + +.menu-dropdown { + position: relative; + border-left: 1px solid rgba(0,0,0,0.125); + background: rgba(0,0,0,0.04); +} + +.menu-dropdown:hover { + background: rgba(0,0,0,0.01); +} + +.menu-dropdown.open, +.menu-dropdown.open:hover { + background: rgba(0,0,0,0.3); +} + +.menu-dropdown .menu-title { + + cursor: default; + margin: 0; + padding: 0.5em; + padding-right: 2em; + + white-space: nowrap; + overflow: hidden; + width: 100%; + text-overflow: ellipsis; + + -ms-flex: 0 0 auto; + -moz-box-flex: 0; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; + +} + +.menu-dropdown .menu-indicator { + + position: absolute; + right: 0; + top: 0; + bottom: 0; + + width: 2em; + background-repeat: no-repeat; + background-size: 1em; + background-position: center center; + background-image: url('^images/arrows/down.svg'); + +} + +.menu-dropdown .menu-contents { + + visibility: hidden; + + position: absolute; + top: 100%; + right: 0; + min-width: 100%; + white-space: nowrap; + + background: #EEE; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.125); + border-left: 1px solid rgba(0,0,0,0.125); + border-bottom: 1px solid rgba(0,0,0,0.125); + + z-index: 5; + +} + +.menu-dropdown .menu-contents ul { + margin: 0; + padding: 0; +} + +.menu-dropdown.open .menu-contents { + visibility: visible; +} + +.menu-dropdown .menu-contents li { + padding: 0; + list-style-type: none; +} + +.menu-dropdown .menu-contents li a { + + display: block; + cursor: pointer; + color: black; + text-decoration: none; + padding: 0.75em; + +} + +.menu-dropdown .menu-contents li a:hover { + background-color: #CDA; +} + +.menu-dropdown .menu-contents li a.current, +.menu-dropdown .menu-contents li a.current:hover { + background-color: transparent; + cursor: default; + opacity: 0.25; +} + +.menu-dropdown .menu-contents li a.danger { + color: white; + font-weight: bold; + background-color: #A43; +} + +.menu-dropdown .menu-contents li a.danger:hover { + background-color: #C54; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/tabs.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/tabs.css new file mode 100644 index 0000000000..3d1c8cdec3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/tabs.css @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.page-tabs .page-list ul, +.section-tabs ul { + margin: 0; + padding: 0; + background: rgba(0, 0, 0, 0.0125); + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.page-tabs .page-list ul + ul, +.section-tabs ul + ul { + font-size: 0.75em; +} + +.page-tabs .page-list li, +.section-tabs li { + display: inline-block; + list-style: none; +} + +.page-tabs .page-list li a[href], +.section-tabs li a { + display: block; + color: black; + text-decoration: none; + padding: 0.75em 1em; +} + +.page-tabs .page-list li a[href]:visited { + color: black; +} + +.page-tabs .page-list li a[href]:hover, +.section-tabs li a:hover { + background-color: #CDA; + cursor: pointer; +} + +.page-tabs .page-list li a[href].current, +.page-tabs .page-list li a[href].current:hover, +.section-tabs li a.current, +.section-tabs li a.current:hover { + background: rgba(0,0,0,0.3); + cursor: default; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/user-menu.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/user-menu.css new file mode 100644 index 0000000000..b1ae23480e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/styles/user-menu.css @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.user-menu { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: row; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: horizontal; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: horizontal; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: row; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: row; + +} + +.user-menu .menu-dropdown .menu-title { + + font-weight: bold; + padding-left: 2em; + + background-repeat: no-repeat; + background-size: 1em; + background-position: 0.5em center; + background-image: url('^images/user-icons/guac-user.svg'); + +} + +.user-menu .menu-dropdown .menu-contents li a { + + background-repeat: no-repeat; + background-size: 1em; + background-position: 0.75em center; + padding-left: 2.5em; + background-image: url('^images/protocol-icons/guac-monitor.svg'); + +} + +.user-menu .menu-dropdown .menu-contents li a[href="#/"] { + background-image: url('^images/action-icons/guac-home-dark.svg'); +} + +.user-menu .menu-dropdown .menu-contents li a[href="#/settings/users"], +.user-menu .menu-dropdown .menu-contents li a[href="#/settings/connections"], +.user-menu .menu-dropdown .menu-contents li a[href="#/settings/sessions"], +.user-menu .menu-dropdown .menu-contents li a[href="#/settings/preferences"] { + background-image: url('^images/action-icons/guac-config-dark.svg'); +} + +.user-menu .menu-dropdown .menu-contents li a.logout { + background-image: url('^images/action-icons/guac-logout-dark.svg'); +} + +.user-menu .menu-dropdown .menu-contents .profile { + margin: 1em; + padding-bottom: 1em; + border-bottom: 1px solid rgba(0, 0, 0, 0.25); + width: 2in; +} + +.user-menu .menu-dropdown .menu-contents .profile .full-name { + font-weight: bold; +} +.user-menu .menu-dropdown .menu-contents .profile .organization, +.user-menu .menu-dropdown .menu-contents .profile .organizational-role { + font-size: 0.8em; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts new file mode 100644 index 0000000000..da691b1554 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { inject } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { AuthenticationService } from '../../auth/service/authentication.service'; + +/** + * Uniquely identifies a particular connection or connection + * group within Guacamole. This object can be converted to/from a string to + * generate a guaranteed-unique, deterministic identifier for client URLs. + */ +export class ClientIdentifier { + + /** + * The identifier of the data source associated with the object to + * which the client will connect. This identifier will be the + * identifier of an AuthenticationProvider within the Guacamole web + * application. + */ + dataSource: string; + + /** + * The type of object to which the client will connect. Possible values + * are defined within ClientIdentifier.Types. + */ + type: string; + + /** + * The unique identifier of the object to which the client will + * connect. + */ + id?: string; + + /** + * Create a new ClientIdentifier. + * + * @param template + * The object whose properties should be copied within the new + * ClientIdentifier. + */ + constructor(template: ClientIdentifier) { + this.dataSource = template.dataSource; + this.type = template.type; + this.id = template.id; + } + +} + +export namespace ClientIdentifier { + + /** + * All possible ClientIdentifier types. + */ + export enum Types { + /** + * The type string for a Guacamole connection. + */ + CONNECTION = 'c', + + /** + * The type string for a Guacamole connection group. + */ + CONNECTION_GROUP = 'g', + + /** + * The type string for an active Guacamole connection. + */ + ACTIVE_CONNECTION = 'a' + } +} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/MenuAction.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/MenuAction.ts new file mode 100644 index 0000000000..5b019391ad --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/MenuAction.ts @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Pairs an arbitrary callback with + * an action name. The name of this action will ultimately be presented to + * the user when the user when this action's associated menu is open. + */ +export class MenuAction { + + /** + * The CSS class associated with this action. + */ + className?: string; + + /** + * The name of this action. + */ + name: string; + + /** + * The callback to call when this action is performed. + */ + callback: Function; + + /** + * Creates a new MenuAction. + * + * @param name + * The name of this action. + * + * @param callback + * The callback to call when the user elects to perform this action. + * + * @param className + * The CSS class to associate with this action, if any. + */ + constructor(name: string, callback: Function, className?: string) { + this.name = name; + this.callback = callback; + this.className = className; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/PageDefinition.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/PageDefinition.ts new file mode 100644 index 0000000000..ee225c5f60 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/PageDefinition.ts @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Pairs the URL of a page with + * an arbitrary, human-readable name. + */ +export class PageDefinition { + + /** + * The name of the page, which should be a translation table key. + * Alternatively, this may also be a list of names, where the final + * name represents the page and earlier names represent categorization. + * Those categorical names may be rendered hierarchically as a system + * of menus, tabs, etc. + */ + name: string | string[]; + + /** + * The URL of the page. + */ + url: string; + + /** + * The CSS class name to associate with this page, if any. This will be + * an empty string by default. + */ + className?: string; + + /** + * A numeric value denoting the relative sort order when compared to + * other sibling PageDefinitions. If unspecified, sort order is + * determined by the system using the PageDefinition. + */ + weight?: number; + + + /** + * Creates a new PageDefinition object. + * + * @param template + * The object whose properties should be copied within the new + * PageDefinition. + */ + constructor(template: PageDefinition) { + this.name = template.name; + this.url = template.url; + this.className = template.className || ''; + this.weight = template.weight; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.html new file mode 100644 index 0000000000..12b92b2063 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.html @@ -0,0 +1,21 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.spec.ts new file mode 100644 index 0000000000..2a986d7acd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GuacModalComponent } from './guac-modal.component'; + +describe('ModalComponent', () => { + let component: GuacModalComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [GuacModalComponent] + }); + fixture = TestBed.createComponent(GuacModalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.ts new file mode 100644 index 0000000000..5285c8b843 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-modal/guac-modal.component.ts @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, ViewEncapsulation } from '@angular/core'; + +/** + * A component for displaying arbitrary modal content. + */ +@Component({ + selector: 'guac-modal', + templateUrl: './guac-modal.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacModalComponent { + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.html new file mode 100644 index 0000000000..088b3137ac --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.html @@ -0,0 +1,66 @@ + +
      + + +
      +
      {{notification.title | transloco}}
      +
      + +
      + + +

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

      + +
      + + +
      + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.ts new file mode 100644 index 0000000000..0d4039220b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/components/guac-notification/guac-notification.component.ts @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, + DestroyRef, + Inject, + Input, + OnChanges, + OnDestroy, + SimpleChanges, + ViewEncapsulation +} from '@angular/core'; +import { Notification } from '../../types/Notification'; +import { DOCUMENT } from '@angular/common'; +import { FormService } from '../../../form/service/form.service'; +import { FormGroup } from '@angular/forms'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +/** + * A directive for displaying notifications. + */ +@Component({ + selector: 'guac-notification', + templateUrl: './guac-notification.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacNotificationComponent implements OnChanges, OnDestroy { + + /** + * The notification to display. + */ + @Input({required: true}) notification!: Notification | any; + + /** + * The percentage of the operation that has been completed, if known. + */ + progressPercent: number | null = null; + + /** + * Current window. + */ + private window: Window; + + /** + * The time remaining in the countdown, if any. + */ + timeRemaining: number | null = null; + + /** + * The interval used to update the countdown, if any. + */ + private interval: number | null = null; + + /** + * TODO + */ + notificationFormGroup: FormGroup = new FormGroup({}); + + constructor(@Inject(DOCUMENT) private document: Document, + private formService: FormService, + private destroyRef: DestroyRef) { + this.window = this.document.defaultView as Window; + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes['notification']) { + // Update progress bar if end known + // TODO: Handle changes of notification.progress.ratio + // if (this.notification.progress?.ratio) + // this.progressPercent = this.notification.progress.ratio * 100; + + const forms = this.formService.asFormArray(this.notification.forms); + this.notificationFormGroup = this.formService.getFormGroup(forms); + this.notificationFormGroup.patchValue(this.notification.formModel || {}); + this.notificationFormGroup.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((value) => { + this.notification.formModel = value; + }) + + const countdown = this.notification.countdown; + + // Clean up any existing interval + if (this.interval) + this.window.clearInterval(this.interval); + + // Update and handle countdown, if provided + if (countdown) { + + this.timeRemaining = countdown.remaining; + + this.interval = this.window.setInterval(() => { + + // Update time remaining + this.timeRemaining!--; + + // Call countdown callback when time remaining expires + if (this.timeRemaining === 0 && countdown.callback) + countdown.callback(); + + }, 1000, this.timeRemaining); + + } + + } + + } + + /** + * Clean up interval upon destruction. + */ + ngOnDestroy(): void { + if (this.interval) + this.window.clearInterval(this.interval); + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/notification.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/notification.module.ts new file mode 100644 index 0000000000..1e7bd4d11d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/notification.module.ts @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GuacModalComponent } from './components/guac-modal/guac-modal.component'; +import { GuacNotificationComponent } from './components/guac-notification/guac-notification.component'; +import { TranslocoModule } from '@ngneat/transloco'; +import { FormModule } from '../form/form.module'; +import { FormsModule } from '@angular/forms'; + +/** + * The module for code used to display arbitrary notifications. + */ +@NgModule({ + declarations: [ + GuacModalComponent, + GuacNotificationComponent + ], + imports: [ + CommonModule, + TranslocoModule, + FormModule, + FormsModule + ], + exports: [ + GuacModalComponent, + GuacNotificationComponent + ] +}) +export class NotificationModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts new file mode 100644 index 0000000000..1c2afe0677 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts @@ -0,0 +1,127 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { RequestService } from '../../rest/service/request.service'; +import { SessionStorageFactory } from '../../storage/session-storage-factory.service'; +import { NotificationAction } from '../types/NotificationAction'; +import { Notification } from '../types/Notification'; +import { filter, Observable, throwError } from 'rxjs'; +import { NavigationEnd, Router } from '@angular/router'; + +/** + * Service for displaying notifications and modal status dialogs. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacNotificationService { + + /** + * Getter/setter which retrieves or sets the current status notification, + * which may simply be false if no status is currently shown. + */ + private storedStatus: Function = this.sessionStorageFactory.create(false); + + /** + * Inject required services. + */ + constructor(private router: Router, + private requestService: RequestService, + private sessionStorageFactory: SessionStorageFactory) { + + // Hide status upon navigation + this.router.events + .pipe(filter(event => event instanceof NavigationEnd)) + .subscribe(() => this.showStatus(false)); + + } + + /** + * An action to be provided along with the object sent to showStatus which + * closes the currently-shown status dialog. + */ + readonly ACKNOWLEDGE_ACTION: NotificationAction = { + name: 'APP.ACTION_ACKNOWLEDGE', + callback: () => { + this.showStatus(false); + } + } + + /** + * Retrieves the current status notification, which may simply be false if + * no status is currently shown. + */ + getStatus(): Notification | boolean { + return this.storedStatus(); + } + + /** + * Shows or hides the given notification as a modal status. If a status + * notification is currently shown, no further statuses will be shown + * until the current status is hidden. + * + * @param status + * The status notification to show. + * + * @example + * + * // To show a status message with actions + * guacNotification.showStatus({ + * 'title' : 'Disconnected', + * 'text' : { + * 'key' : 'NAMESPACE.SOME_TRANSLATION_KEY' + * }, + * 'actions' : [{ + * 'name' : 'reconnect', + * 'callback' : function () { + * // Reconnection code goes here + * } + * }] + * }); + * + * // To hide the status message + * guacNotification.showStatus(false); + */ + showStatus(status: Notification | Boolean | Object): void { + if (!this.storedStatus() || !status) + this.storedStatus(status); + } + + /** + * Observable error callback which displays a modal notification for all + * failures due to REST errors. The message displayed to the user within + * the notification is provided by the contents of the @link{Error} object + * within the REST response. All other errors, such as those due to + * JavaScript errors, are logged to the browser console without displaying + * any notification. + */ + readonly SHOW_REQUEST_ERROR: (error: any) => Observable = this.requestService.createErrorCallback(error => { + this.showStatus({ + className: 'error', + title: 'APP.DIALOG_HEADER_ERROR', + text: error.translatableMessage, + actions: [this.ACKNOWLEDGE_ACTION] + }); + + // TODO: Check what happens when the error is thrown + return throwError(() => error); + }); + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/modal.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/modal.css new file mode 100644 index 0000000000..dade6f2858 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/modal.css @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +guac-modal { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 100%; + width: 100%; + position: fixed; + left: 0; + top: 0; + z-index: 10; + overflow: hidden; +} + +guac-modal .modal-contents { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 100%; + text-align: center; +} + +guac-modal { + animation: fadein 0.125s linear; + -moz-animation: fadein 0.125s linear; + -webkit-animation: fadein 0.125s linear; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/notification.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/notification.css new file mode 100644 index 0000000000..029ffe38f9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/styles/notification.css @@ -0,0 +1,144 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.notification { + border: 1px solid rgba(0, 0, 0, 0.25); + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.25); + background: white; + color: black; +} + +.notification.error { + background: #FDD; +} + +.notification .body { + margin: 0.5em; +} + +.notification .buttons { + margin: 0.5em; +} + +@keyframes notification-progress { + from {background-position: 0px 0px;} + to {background-position: 64px 0px;} +} + +@-webkit-keyframes notification-progress { + from {background-position: 0px 0px;} + to {background-position: 64px 0px;} +} + +.notification .title-bar { + font-size: 1.25em; + font-weight: bold; + + text-transform: uppercase; + border-bottom: 1px solid rgba(0, 0, 0, 0.125); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.125); + background: rgba(0, 0, 0, 0.04); + + padding: 0.5em; + margin-bottom: 1em; +} + +.notification .progress .bar { + background: #A3D655; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 0; + box-shadow: inset 1px 1px 0 rgba(255, 255, 255, 0.5), + inset -1px -1px 0 rgba( 0, 0, 0, 0.1), + 1px 1px 0 gray; +} + +.notification .progress { + + width: 100%; + background: #C2C2C2 url('^images/progress.svg'); + background-size: 16px 16px; + -moz-background-size: 16px 16px; + -webkit-background-size: 16px 16px; + -khtml-background-size: 16px 16px; + + animation-name: notification-progress; + animation-duration: 2s; + animation-timing-function: linear; + animation-iteration-count: infinite; + + -webkit-animation-name: notification-progress; + -webkit-animation-duration: 2s; + -webkit-animation-timing-function: linear; + -webkit-animation-iteration-count: infinite; + + padding: 0.25em; + + border: 1px solid gray; + + position: relative; + +} + +.notification .progress .text { + position: relative; +} + +.notification .parameters { + width: 100%; +} + +.notification .parameters .fields { + display: table; + width: 100%; +} + +.notification .parameters .fields .labeled-field { + display: table-row; +} + +.notification .parameters .fields .field-header, +.notification .parameters .fields .form-field { + text-align: left; + display: table-cell; + padding: .125em; + vertical-align: top; +} + +.notification .parameters .fields .field-header { + padding-right: 1em; +} + +.notification .parameters .fields .field-header { + width: 0; +} + +.notification .parameters .fields .form-field { + width: 100%; +} + +.notification .parameters input[type=text], +.notification .parameters input[type=email], +.notification .parameters input[type=number], +.notification .parameters input[type=password], +.notification .parameters textarea { + max-width: 100%; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/Notification.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/Notification.ts new file mode 100644 index 0000000000..b3b074cdcc --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/Notification.ts @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NotificationCountdown } from './NotificationCountdown'; +import { NotificationProgress } from './NotificationProgress'; +import { Field } from '../../rest/types/Field'; +import { Form } from '../../rest/types/Form'; +import { NotificationAction } from './NotificationAction'; +import { TranslatableMessage } from '../../rest/types/TranslatableMessage'; + +/** + * Provides the Notification class. + */ +export class Notification { + + /** + * The CSS class to associate with the notification, if any. + */ + className?: string; + + /** + * The title of the notification. + */ + title?: string; + + /** + * The body text of the notification. + */ + text?: TranslatableMessage; + + /** + * The translation namespace of the translation strings that will + * be generated for all fields within the notification. This namespace + * is absolutely required if form fields will be included in the + * notification. + */ + formNamespace?: string; + + /** + * Optional form content to display. This may be a form, an array of + * forms, or a simple array of fields. + */ + forms?: Form[] | Form | Field[] | Field; + + /** + * The object which will receive all field values. Each field value + * will be assigned to the property of this object having the same + * name. + * + * @type Object. + */ + formModel?: Record; + + /** + * The function to invoke when the form is submitted, if form fields + * are present within the notification. + */ + formSubmitCallback?: Function; + + /** + * An array of all actions available to the user in response to this + * notification. + * + * @type NotificationAction[] + */ + actions: NotificationAction[]; + + /** + * The current progress state of the ongoing action associated with this + * notification. + * + * @type NotificationProgress + */ + progress?: NotificationProgress; + + /** + * The countdown and corresponding default action which applies to + * this notification, if any. + * + * @type NotificationCountdown + */ + countdown?: NotificationCountdown; + + /** + * Creates a new Notification, initializing the properties of that + * Notification with the corresponding properties of the given template. + * + * @param template + * The object whose properties should be copied within the new + * Notification. + */ + constructor(template: Partial = {}) { + this.className = template.className; + this.title = template.title; + this.text = template.text; + this.formNamespace = template.formNamespace; + this.forms = template.forms; + this.formModel = template.formModel; // TODO: was " = template.model"; + this.formSubmitCallback = template.formSubmitCallback; + this.actions = template.actions || []; + this.progress = template.progress; + this.countdown = template.countdown; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationAction.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationAction.ts new file mode 100644 index 0000000000..6d2618f8ee --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationAction.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the NotificationAction interface, which pairs an arbitrary callback with + * an action name. The name of this action will ultimately be presented to + * the user when the user is prompted to choose among available actions. + */ +export interface NotificationAction { + /** + * The name of this action. + */ + name: string; + + /** + * The callback to call when this action is performed. + */ + callback: () => void; + + /** + * The CSS class associated with this action. + */ + className?: string; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationCountdown.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationCountdown.ts new file mode 100644 index 0000000000..822ffb80cc --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationCountdown.ts @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the NotificationCountdown class, which describes an action that + * should be performed after a specific number of seconds has elapsed. + */ +export class NotificationCountdown { + + /** + * Creates a new NotificationCountdown. + * + * @param text + * The body text of the notification countdown. For the sake of i18n, + * the variable REMAINING should be applied within the translation + * string for formatting plurals, etc. + * + * @param remaining + * The number of seconds remaining in the countdown. After this number + * of seconds elapses, the callback associated with this + * NotificationCountdown will be called. + * + * @param callback + * The callback to call when the countdown elapses. + */ + constructor(public text: string, public remaining: number, public callback?: () => void) { + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationProgress.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationProgress.ts new file mode 100644 index 0000000000..c78b18f2da --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/types/NotificationProgress.ts @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the NotificationProgress class, which describes the current status + * of an operation, and how much of that operation remains to be performed. + */ +export class NotificationProgress { + + /** + * Creates a new NotificationProgress. + * + * @param text + * The text describing the operation progress. For the sake of i18n, + * the variable VALUE should be applied within the translation + * string for formatting plurals, etc., while UNIT should be used + * for the progress unit, if any. + * + * @param value + * The current state of operation progress, as an arbitrary number + * which increases as the operation continues. + * + * @param unit + * The unit of the arbitrary value, if that value has an associated + * unit. + * + * @param ratio + * If known, the current status of the operation as a value between 0 + * and 1 inclusive, where 0 is not yet started, and 1 is complete. + */ + constructor(public text: string, public value: number, public unit?: string, public ratio?: number) { + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.html new file mode 100644 index 0000000000..e67f660c70 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.html @@ -0,0 +1,21 @@ + +
      +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts new file mode 100644 index 0000000000..869ee12b12 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PlayerDisplayComponent } from './player-display.component'; +import { ElementModule } from "../../element/element.module"; + +describe('PlayerDisplayComponent', () => { + let component: PlayerDisplayComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [PlayerDisplayComponent], + imports: [ElementModule], + }); + fixture = TestBed.createComponent(PlayerDisplayComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts new file mode 100644 index 0000000000..76aa7957fa --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts @@ -0,0 +1,124 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + AfterViewInit, + Component, + ElementRef, + Input, + OnChanges, + SimpleChanges, + ViewChild, + ViewEncapsulation +} from '@angular/core'; + +/** + * Component which contains a given Guacamole.Display, automatically scaling + * the display to fit available space. + */ +@Component({ + selector: 'guac-player-display', + templateUrl: './player-display.component.html', + encapsulation: ViewEncapsulation.None +}) +export class PlayerDisplayComponent implements AfterViewInit, OnChanges { + + /** + * The Guacamole.Display instance which should be displayed within the + * directive. + */ + @Input() display?: Guacamole.Display; + + /** + * The root element of this instance of the guacPlayerDisplay + * directive. + */ + @ViewChild('guacPlayerDisplay') element!: ElementRef; + + /** + * The element which serves as a container for the root element of the + * Guacamole.Display assigned to $scope.display. + */ + @ViewChild('guacPlayerDisplayContainer') container!: ElementRef; + + ngAfterViewInit(): void { + this.addDisplayToContainer(this.display); + } + + /** + * Rescales the Guacamole.Display currently assigned to this.display + * such that it exactly fits within this component's available space. + * If no display is currently assigned or the assigned display is not + * at least 1x1 pixels in size, this function has no effect. + */ + fitDisplay() { + + // Ignore if no display is yet present + if (!this.display) + return; + + var displayWidth = this.display.getWidth(); + var displayHeight = this.display.getHeight(); + + // Ignore if the provided display is not at least 1x1 pixels + if (!displayWidth || !displayHeight) + return; + + // Fit display within available space + this.display.scale(Math.min(this.element.nativeElement.offsetWidth / displayWidth, + this.element.nativeElement.offsetHeight / displayHeight)); + + }; + + ngOnChanges(changes: SimpleChanges): void { + + if (changes['display']) { + // Automatically add/remove the Guacamole.Display as this.display is + // updated + const display = changes['display'].currentValue as Guacamole.Display; + const oldDisplay = changes['display'].previousValue as Guacamole.Display; + + // Clear out old display, if any + if (oldDisplay) { + this.container.nativeElement.innerHTML = ''; + // @ts-ignore + oldDisplay.onresize = null; + } + + this.addDisplayToContainer(display); + } + } + + /** + * If a new display is provided, add it to the container, keeping + * its scale in sync with changes to available space and display + * size. + * + * @private + */ + private addDisplayToContainer(display: Guacamole.Display | undefined) { + if (display && this.container?.nativeElement) { + this.container.nativeElement.appendChild(display.getElement()); + display.onresize = this.fitDisplay; + this.fitDisplay(); + } + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.html new file mode 100644 index 0000000000..e6be291c71 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.html @@ -0,0 +1,66 @@ + + + + + + +
      + + + + + + + + + + + + + + + + {{ formatTime(playbackPosition) }} / {{ formatTime(recording?.getDuration() || 0) || '???' }} + + +
      + + +
      + + +

      {{ operationMessage }}

      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts new file mode 100644 index 0000000000..c4d905a207 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PlayerComponent } from './player.component'; +import { PlayerModule } from "./player.module"; + +describe('PlayerComponent', () => { + let component: PlayerComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [PlayerComponent], + imports: [PlayerModule], + }); + fixture = TestBed.createComponent(PlayerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts new file mode 100644 index 0000000000..41bcd3ef30 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts @@ -0,0 +1,362 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + ChangeDetectorRef, + Component, + Input, + OnChanges, + OnDestroy, + SimpleChanges, + ViewEncapsulation +} from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../events/types/GuacFrontendEventArguments'; + +/** + * Component which plays back session recordings. This directive emits the + * following events based on state changes within the current recording: + * + * "guacPlayerLoading": + * A new recording has been selected and is now loading. + * + * "guacPlayerError": + * The current recording cannot be loaded or played due to an error. + * The recording may be unreadable (lack of permissions) or corrupt + * (protocol error). + * + * "guacPlayerProgress" + * Additional data has been loaded for the current recording and the + * recording's duration has changed. The new duration in milliseconds + * and the number of bytes loaded so far are passed to the event. + * + * "guacPlayerLoaded" + * The current recording has finished loading. + * + * "guacPlayerPlay" + * Playback of the current recording has started or has been resumed. + * + * "guacPlayerPause" + * Playback of the current recording has been paused. + * + * "guacPlayerSeek" + * The playback position of the current recording has changed. The new + * position within the recording is passed to the event as the number + * of milliseconds since the start of the recording. + */ +@Component({ + selector: 'guac-player', + templateUrl: './player.component.html', + encapsulation: ViewEncapsulation.None +}) +export class PlayerComponent implements OnChanges, OnDestroy { + + /** + * A Blob containing the Guacamole session recording to load. + */ + @Input('guacSrc') src?: Blob | Guacamole.Tunnel; + + /** + * Guacamole.SessionRecording instance to be used to playback the + * session recording given via $scope.src. If the recording has not + * yet been loaded, this will be null. + */ + recording: Guacamole.SessionRecording | null = null; + + /** + * The current playback position, in milliseconds. If a seek request is + * in progress, this will be the desired playback position of the + * pending request. + */ + playbackPosition: number = 0; + + /** + * The key of the translation string that describes the operation + * currently running in the background, or null if no such operation is + * running. + */ + operationMessage: string | null = null; + + /** + * The current progress toward completion of the operation running in + * the background, where 0 represents no progress and 1 represents full + * completion. If no such operation is running, this value has no + * meaning. + */ + operationProgress: number = 0; + + /** + * The position within the recording of the current seek operation, in + * milliseconds. If a seek request is not in progress, this will be + * undefined. + */ + seekPosition: number | null = null; + + /** + * Whether a seek request is currently in progress. A seek request is + * in progress if the user is attempting to change the current playback + * position (the user is manipulating the playback position slider). + */ + pendingSeekRequest: boolean = false; + + /** + * Whether playback should be resumed (play() should be invoked on the + * recording) once the current seek request is complete. This value + * only has meaning if a seek request is pending. + */ + resumeAfterSeekRequest: boolean = false; + + /** + * The operation that should be performed when the cancel button is + * clicked. + */ + cancelOperation: () => void = () => { + }; + + /** + * Inject required services. + */ + constructor(private guacEventService: GuacEventService, + private cdr: ChangeDetectorRef) { + } + + /** + * Formats the given number as a decimal string, adding leading zeroes + * such that the string contains at least two digits. The given number + * MUST NOT be negative. + * + * @param value + * The number to format. + * + * @returns + * The decimal string representation of the given value, padded + * with leading zeroes up to a minimum length of two digits. + */ + zeroPad(value: number): string { + return value > 9 ? value.toString() : '0' + value; + } + + /** + * Formats the given quantity of milliseconds as days, hours, minutes, + * and whole seconds, separated by colons (DD:HH:MM:SS). Hours are + * included only if the quantity is at least one hour, and days are + * included only if the quantity is at least one day. All included + * groups are zero-padded to two digits with the exception of the + * left-most group. + * + * @param value + * The time to format, in milliseconds. + * + * @returns + * The given quantity of milliseconds formatted as "DD:HH:MM:SS". + */ + formatTime(value: number): string { + + // Round provided value down to whole seconds + value = Math.floor((value || 0) / 1000); + + // Separate seconds into logical groups of seconds, minutes, + // hours, etc. + const groups: (number | string)[] = [1, 24, 60, 60]; + for (let i = groups.length - 1; i >= 0; i--) { + const placeValue = groups[i]; + groups[i] = this.zeroPad(value % (placeValue as number)); + value = Math.floor(value / (placeValue as number)); + } + + // Format groups separated by colons, stripping leading zeroes and + // groups which are entirely zeroes, leaving at least minutes and + // seconds + const formatted = groups.join(':'); + return /^[0:]*([0-9]{1,2}(?::[0-9]{2})+)$/.exec(formatted)![1]; + + } + + /** + * Pauses playback and decouples the position slider from current + * playback position, allowing the user to manipulate the slider + * without interference. Playback state will be resumed following a + * call to commitSeekRequest(). + */ + beginSeekRequest(): void { + + // If a recording is present, pause and save state if we haven't + // already done so + if (this.recording && !this.pendingSeekRequest) { + this.resumeAfterSeekRequest = this.recording.isPlaying(); + this.recording.pause(); + } + + // Flag seek request as in progress + this.pendingSeekRequest = true; + + } + + /** + * Restores the playback state at the time beginSeekRequest() was + * called and resumes coupling between the playback position slider and + * actual playback position. + */ + commitSeekRequest(): void { + + // If a recording is present and there is an active seek request, + // restore the playback state at the time that request began and + // begin seeking to the requested position + if (this.recording && this.pendingSeekRequest) { + + this.seekPosition = null; + this.operationMessage = 'PLAYER.INFO_SEEK_IN_PROGRESS'; + this.operationProgress = 0; + + // Cancel seek when requested, updating playback position if + // that position changed + this.cancelOperation = () => { + this.recording?.cancel(); + this.playbackPosition = this.seekPosition || this.playbackPosition; + }; + + this.resumeAfterSeekRequest && this.recording.play(); + this.recording.seek(this.playbackPosition, () => { + this.operationMessage = null; + // TODO $scope.$evalAsync(); + this.cdr.detectChanges(); + + }); + + } + + // Flag seek request as completed + this.pendingSeekRequest = false; + + } + + /** + * Toggles the current playback state. If playback is currently paused, + * playback is resumed. If playback is currently active, playback is + * paused. If no recording has been loaded, this function has no + * effect. + */ + togglePlayback(): void { + if (this.recording) { + if (this.recording.isPlaying()) + this.recording.pause(); + else + this.recording.play(); + } + }; + + ngOnChanges(changes: SimpleChanges) { + if (changes['src']) { + + // Reset position and seek state + this.pendingSeekRequest = false; + this.playbackPosition = 0; + + // Stop loading the current recording, if any + if (this.recording) { + this.recording.pause(); + this.recording.abort(); + } + + // If no recording is provided, reset to empty + if (!this.src) + this.recording = null; + + // Otherwise, begin loading the provided recording + else { + + this.recording = new Guacamole.SessionRecording(this.src); + + // Begin downloading the recording + this.recording.connect(); + + // Notify listeners when the recording is completely loaded + this.recording.onload = () => { + this.operationMessage = null; + this.guacEventService.broadcast('guacPlayerLoaded'); + this.cdr.detectChanges(); + }; + + // Notify listeners if an error occurs + this.recording.onerror = (message) => { + this.operationMessage = null; + this.guacEventService.broadcast('guacPlayerError', {message}); + this.cdr.detectChanges(); + }; + + // Notify listeners when additional recording data has been + // loaded + this.recording.onprogress = (duration, current) => { + this.operationProgress = (this.src as unknown as any)?.size ? current / (this.src as unknown as any).size : 0; + this.guacEventService.broadcast('guacPlayerProgress', {duration, current}); + this.cdr.detectChanges(); + }; + + // Notify listeners when playback has started/resumed + this.recording.onplay = () => { + this.guacEventService.broadcast('guacPlayerPlay'); + this.cdr.detectChanges(); + }; + + // Notify listeners when playback has paused + this.recording.onpause = () => { + this.guacEventService.broadcast('guacPlayerPause'); + this.cdr.detectChanges(); + }; + + // Notify listeners when current position within the recording + // has changed + this.recording.onseek = (position, current, total) => { + + // Update current playback position while playing + if (this.recording?.isPlaying()) + this.playbackPosition = position; + + // Update seek progress while seeking + else { + this.seekPosition = position; + this.operationProgress = current / total; + } + + this.guacEventService.broadcast('guacPlayerSeek', {position}); + this.cdr.detectChanges(); + + }; + + this.operationMessage = 'PLAYER.INFO_LOADING_RECORDING'; + this.operationProgress = 0; + + this.cancelOperation = () => { + this.recording?.abort(); + this.operationMessage = null; + }; + + this.guacEventService.broadcast('guacPlayerLoading'); + } + } + } + + ngOnDestroy() { + this.recording?.pause(); + this.recording?.abort(); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts new file mode 100644 index 0000000000..1c313421b6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PlayerComponent } from './player.component'; +import { PlayerDisplayComponent } from './player-display/player-display.component'; +import { ProgressIndicatorComponent } from './progress-indicator/progress-indicator.component'; +import { FormsModule } from "@angular/forms"; +import { ElementModule } from "../element/element.module"; + + + +@NgModule({ + declarations: [ + PlayerComponent, + PlayerDisplayComponent, + ProgressIndicatorComponent + ], + imports: [ + CommonModule, + FormsModule, + ElementModule + ], + exports: [ + PlayerComponent, + PlayerDisplayComponent, + ProgressIndicatorComponent + ] +}) +export class PlayerModule { } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.html new file mode 100644 index 0000000000..4073e89986 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.html @@ -0,0 +1,30 @@ + +
      {{ percentage }}%
      +
      +
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.spec.ts new file mode 100644 index 0000000000..7da58ad86e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProgressIndicatorComponent } from './progress-indicator.component'; + +describe('ProgressIndicatorComponent', () => { + let component: ProgressIndicatorComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ProgressIndicatorComponent] + }); + fixture = TestBed.createComponent(ProgressIndicatorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts new file mode 100644 index 0000000000..b44da7dc84 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; + +/** + * Component which displays an indicator showing the current progress of an + * arbitrary operation. + */ +@Component({ + selector: 'guac-player-progress-indicator', + templateUrl: './progress-indicator.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ProgressIndicatorComponent implements OnChanges { + + /** + * A value between 0 and 1 inclusive which indicates current progress, + * where 0 represents no progress and 1 represents finished. + */ + @Input() progress?: number; + + /** + * The current progress of the operation as a percentage. This value is + * automatically updated as this.progress changes. + */ + percentage: number = 0; + + /** + * The CSS transform which should be applied to the bar portion of the + * progress indicator. This value is automatically updated as + * this.progress changes. + */ + barTransform?: string = undefined; + + ngOnChanges(changes: SimpleChanges): void { + if (changes['progress']) { + // Keep percentage and bar transform up-to-date with changes to + // progress value + const progress = this.progress || 0; + this.percentage = Math.floor(progress * 100); + this.barTransform = 'rotate(' + (360 * progress - 45) + 'deg)'; + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/player.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/player.css new file mode 100644 index 0000000000..86be70091d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/player.css @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +guac-player { + display: inline-block; + position: relative; +} + +guac-player .guac-player-display { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +guac-player .guac-player-controls { + + position: absolute; + left: 0; + bottom: 0; + width: 100%; + +} + +.guac-player-controls .guac-player-seek { + display: block; + width: 100%; +} + +.guac-player-controls .guac-player-play, +.guac-player-controls .guac-player-pause { + color: white; + background: transparent; + border: none; + width: 2em; + height: 2em; + min-width: 0; + padding: 0; + margin: 0; +} + +.guac-player-controls .guac-player-play:hover, +.guac-player-controls .guac-player-pause:hover { + background: rgba(255, 255, 255, 0.5); +} + +.guac-player-controls .pause-icon, +.guac-player-controls .play-icon { + display: inline-block; + width: 2em; + height: 2em; + background-size: contain; + background-position: center; + background-repeat: no-repeat; + vertical-align: middle; +} + +.guac-player-controls .play-icon { + background-image: url('^images/action-icons/guac-play.svg'); +} + +.guac-player-controls .pause-icon { + background-image: url('^images/action-icons/guac-pause.svg'); +} + +guac-player .guac-player-status { + + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + + background: rgba(0, 0, 0, 0.5); + z-index: 1; + + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + + -webkit-box-align: center; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; + + -webkit-box-pack: center; + -webkit-justify-content: center; + -moz-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -moz-box-orient: vertical; + -moz-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/playerDisplay.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/playerDisplay.css new file mode 100644 index 0000000000..1a9939b95f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/playerDisplay.css @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.guac-player-display { + + position: relative; + + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + + -webkit-box-align: center; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; + + -webkit-box-pack: center; + -webkit-justify-content: center; + -moz-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + +} + +.guac-player-display .guac-player-display-container { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -moz-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/progressIndicator.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/progressIndicator.css new file mode 100644 index 0000000000..9763d9cd0c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/progressIndicator.css @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +guac-player-progress-indicator { + + width: 128px; + height: 128px; + + position: relative; + + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + + -webkit-box-align: center; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; + + -webkit-box-pack: center; + -webkit-justify-content: center; + -moz-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + +} + +guac-player-progress-indicator .guac-player-progress-text { + font-size: 2em; + font-weight: bold; +} + +guac-player-progress-indicator .guac-player-progress-bar-container { + + position: absolute; + right: 0; + top: 0; + width: 50%; + height: 100%; + overflow: hidden; + +} + +guac-player-progress-indicator .guac-player-progress-bar-container.past-halfway { + overflow: visible; +} + +guac-player-progress-indicator .guac-player-progress-bar-container.past-halfway::before, +guac-player-progress-indicator .guac-player-progress-bar { + + position: absolute; + left: -64px; + top: 0; + width: 128px; + height: 128px; + + -webkit-border-radius: 128px; + -moz-border-radius: 128px; + border-radius: 128px; + + border: 12px solid #5AF; + border-bottom-color: transparent; + border-right-color: transparent; + +} + +guac-player-progress-indicator .guac-player-progress-bar-container.past-halfway::before { + + content: ' '; + display: block; + box-sizing: border-box; + + -webkit-transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -o-transform: rotate(135deg); + transform: rotate(135deg); + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/seek.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/seek.css new file mode 100644 index 0000000000..2811e840e4 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/styles/seek.css @@ -0,0 +1,143 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * General (not browser-specific) + */ + +input[type="range"] { + background: transparent; + width: 100%; + margin: 0; +} + +input[type="range"]:focus { + outline: none; +} + +/* + * WebKit + */ + +input[type="range"] { + -webkit-appearance: none; +} + +input[type="range"]::-webkit-slider-runnable-track { + + border: none; + border-radius: 0; + background: #5AF; + + width: 100%; + height: 0.5em; + + cursor: pointer; + +} + +input[type="range"]::-webkit-slider-thumb { + + border: none; + border-radius: 0; + background: white; + + width: 3px; + height: 0.5em; + + -webkit-appearance: none; + cursor: pointer; + +} + +input[type="range"]:focus::-webkit-slider-runnable-track { + background: #5AF; +} + +/* + * Firefox + */ + +input[type="range"]::-moz-range-track { + + border: none; + border-radius: 0; + background: #5AF; + + width: 100%; + height: 0.5em; + + cursor: pointer; + +} + +input[type="range"]::-moz-range-thumb { + + border: none; + border-radius: 0; + background: white; + + width: 3px; + height: 0.5em; + + cursor: pointer; + +} + +/* + * Internet Explorer + */ + +input[type="range"]::-ms-track { + + width: 100%; + height: 0.5em; + margin: 0; + + border: none; + border-radius: 0; + background: transparent; + color: transparent; + + cursor: pointer; + +} + +input[type="range"]::-ms-thumb { + + border: none; + border-radius: 0; + background: white; + + width: 3px; + height: 0.5em; + margin: 0; + + cursor: pointer; + +} + +input[type="range"]::-ms-fill-lower, +input[type="range"]::-ms-fill-upper, +input[type="range"]:focus::-ms-fill-lower, +input[type="range"]:focus::-ms-fill-upper { + border: none; + border-radius: 0; + background: #5AF; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.spec.ts new file mode 100644 index 0000000000..2109599925 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.spec.ts @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; +import { ErrorHandlingInterceptor } from './error-handling.interceptor'; + +describe('ErrorHandlingInterceptor', () => { + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + ErrorHandlingInterceptor + ], + }); + + + } + ); + + it('should be created', () => { + const interceptor: ErrorHandlingInterceptor = TestBed.inject(ErrorHandlingInterceptor); + expect(interceptor).toBeTruthy(); + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.ts new file mode 100644 index 0000000000..2dd0277435 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/interceptor/error-handling.interceptor.ts @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { catchError, Observable, throwError } from 'rxjs'; +import { InterceptorService } from '../../util/interceptor.service'; +import { Error } from '../types/Error'; + +/** + * TODO + */ +@Injectable() +export class ErrorHandlingInterceptor implements HttpInterceptor { + + /** + * Inject required services. + */ + constructor(private interceptorService: InterceptorService) { + } + + /** + * If an HTTP error response is received from the REST API, this interceptor will + * map the response to an Observable that will throw an error strictly with an + * instance of an {@link Error} object. + */ + intercept(request: HttpRequest, next: HttpHandler): Observable> { + + // Skip this interceptor if the corresponding HttpContextToken is set + if (this.interceptorService.skipErrorHandlingInterceptor(request)) { + return next.handle(request); + } + + return next.handle(request) + .pipe( + // Catch any errors and map them to an Error object if the + // received error originates from the REST API + catchError(this.handleError) + ); + } + + /** + * Wraps a HttpErrorResponse into an Error object. + * + * @param error + * The HttpErrorResponse to wrap. + * + * @returns + * An Observable that will emit a single Error object wrapping the given HttpErrorResponse. + */ + private handleError(error: HttpErrorResponse) { + + // Wrap true error responses within REST Error objects + if (error.status !== 0) { + return throwError(() => new Error(error.error)); + } + + // Fall back to a generic internal error if the request couldn't + // even be issued (webapp is down, etc.) + return throwError(() => new Error({message: 'Unknown failure sending HTTP request'})); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/rest.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/rest.module.ts new file mode 100644 index 0000000000..330a8d2b95 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/rest.module.ts @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { StorageModule } from '../storage/storage.module'; + +/** + * The module for code relating to communication with the REST API of the + * Guacamole web application. + */ +@NgModule({ + declarations: [], + imports: [ + CommonModule, + StorageModule + ] +}) +export class RestModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/active-connection.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/active-connection.service.ts new file mode 100644 index 0000000000..ad3e3f8cc0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/active-connection.service.ts @@ -0,0 +1,165 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { ActiveConnection } from '../types/ActiveConnection'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { UserCredentials } from '../types/UserCredentials'; +import { Observable } from 'rxjs'; + +/** + * Service for operating on active connections via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class ActiveConnectionService { + + /** + * Required services + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get a single active connection, + * returning an Observable that provides the corresponding + * {@link ActiveConnection} if successful. + * + * @param dataSource + * The identifier of the data source to retrieve the active connection + * from. + * + * @param id + * The identifier of the active connection. + * + * @returns + * An Observable which will emit a @link{ActiveConnection} upon + * success. + */ + getActiveConnection(dataSource: string, id: string): Observable { + + // Retrieve active connection + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections/' + encodeURIComponent(id) + ); + } + + /** + * Makes a request to the REST API to get the list of active tunnels, + * returning an Observable that provides a map of @link{ActiveConnection} + * objects if successful. + * + * @param dataSource + * The identifier of the data source to retrieve the active connections + * from. + * + * @param permissionTypes + * The set of permissions to filter with. A user must have one or more + * of these permissions for an active connection to appear in the + * result. If null, no filtering will be performed. Valid values are + * listed within PermissionSet.ObjectType. + * + * @returns + * An Observable which will emit a map of {@link ActiveConnection} + * objects, where each key is the identifier of the corresponding + * active connection. + */ + getActiveConnections(dataSource: string, permissionTypes?: string[]): Observable> { + + // Add permission filter if specified + let httpParameters = new HttpParams(); + if (permissionTypes) + httpParameters = httpParameters.appendAll({permission: permissionTypes}); + + // Retrieve tunnels + return this.http.get>( + 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections', + {params: httpParameters} + ); + + } + + /** + * Makes a request to the REST API to delete the active connections having + * the given identifiers, effectively disconnecting them, returning an + * Observable that can be used for processing the results of the call. + * + * @param dataSource + * The identifier of the data source to delete the active connections + * from. + * + * @param identifiers + * The identifiers of the active connections to delete. + * + * @returns + * An Observable for the HTTP call which will succeed if and only if the + * delete operation is successful. + */ + deleteActiveConnections(dataSource: string, identifiers: string[]): Observable { + + // Convert provided array of identifiers to a patch + const activeConnectionPatch: any[] = []; + identifiers.forEach(function addActiveConnectionPatch(identifier) { + activeConnectionPatch.push({ + op: 'remove', + path: '/' + identifier + }); + }); + + // Perform active connection deletion via PATCH + return this.http.patch( + 'api/session/data/' + encodeURIComponent(dataSource) + '/activeConnections', + activeConnectionPatch + ); + + } + + /** + * Makes a request to the REST API to generate credentials which have + * access strictly to the given active connection, using the restrictions + * defined by the given sharing profile, returning an Observable that provides + * the resulting @link{UserCredentials} object if successful. + * + * @param dataSource + * The identifier of the data source to retrieve the active connection + * from. + * + * @param id + * The identifier of the active connection being shared. + * + * @param sharingProfile + * The identifier of the sharing profile dictating the + * semantics/restrictions which apply to the shared session. + * + * @returns + * An Observable which will emit a {@link UserCredentials} object + * upon success. + */ + getSharingCredentials(dataSource: string, id: string, sharingProfile: string): Observable { + + // Generate sharing credentials + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + + '/activeConnections/' + encodeURIComponent(id) + + '/sharingCredentials/' + encodeURIComponent(sharingProfile) + ); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection-group.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection-group.service.ts new file mode 100644 index 0000000000..1928f203ac --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection-group.service.ts @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { map, Observable, tap } from 'rxjs'; +import { ConnectionGroup } from '../types/ConnectionGroup'; +import { HttpClient, HttpParams } from '@angular/common/http'; + +/** + * Service for operating on connection groups via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class ConnectionGroupService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get an individual connection group + * and all descendants, returning an observable that provides the corresponding + * {@link ConnectionGroup} if successful. Descendant groups and connections + * will be stored as children of that connection group. If a permission + * type is specified, the result will be filtering by that permission. + * + * @param connectionGroupID + * The ID of the connection group to retrieve. If not provided, the + * root connection group will be retrieved by default. + * + * @param permissionTypes + * The set of permissions to filter with. A user must have one or more + * of these permissions for a connection to appear in the result. + * If null, no filtering will be performed. Valid values are listed + * within PermissionSet.ObjectType. + * + * @returns + * An observable which will emit a {@link ConnectionGroup} upon + * success. + */ + getConnectionGroupTree(dataSource: string, connectionGroupID: string = ConnectionGroup.ROOT_IDENTIFIER, permissionTypes?: string[]): Observable { + + // Add permission filter if specified + let httpParameters = new HttpParams(); + if (permissionTypes) + httpParameters = httpParameters.appendAll({'permission': permissionTypes}); + + // TODO: cache: cacheService.connections, + // Retrieve connection group + return this.http.get('api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroupID) + '/tree', + { + params: httpParameters + }); + + } + + /** + * Makes a request to the REST API to get an individual connection group, + * returning an observable that provides the corresponding + * {@link ConnectionGroup} if successful. + * + * @param {String} [connectionGroupID=ConnectionGroup.ROOT_IDENTIFIER] + * The ID of the connection group to retrieve. If not provided, the + * root connection group will be retrieved by default. + * + * @returns + * An observable which will emit a {@link ConnectionGroup} upon + * success. + */ + getConnectionGroup(dataSource: string, connectionGroupID: string = ConnectionGroup.ROOT_IDENTIFIER): Observable { + + // TODO cache: cacheService.connections, + // Retrieve connection group + return this.http.get('api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroupID)); + + } + + /** + * Makes a request to the REST API to save a connection group, returning a + * promise that can be used for processing the results of the call. If the + * connection group is new, and thus does not yet have an associated + * identifier, the identifier will be automatically set in the provided + * connection group upon success. + * + * @param connectionGroup + * The connection group to update. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * save operation is successful. + */ + saveConnectionGroup(dataSource: string, connectionGroup: ConnectionGroup): Observable { + + // If connection group is new, add it and set the identifier automatically + if (!connectionGroup.identifier) { + return this.http.post( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups', + connectionGroup + ) + + // Set the identifier on the new connection group and clear the cache + .pipe( + map((newConnectionGroup: ConnectionGroup) => { + connectionGroup.identifier = newConnectionGroup.identifier; + // TODO: cacheService.connections.removeAll(); + + // Clear users cache to force reload of permissions for this + // newly created connection group + // TODO cacheService.users.removeAll(); + }) + ); + } + + // Otherwise, update the existing connection group + else { + return this.http.put( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroup.identifier), + connectionGroup + ) + + // Clear the cache + .pipe( + tap(() => { + // TODO: cacheService.connections.removeAll(); + + // Clear users cache to force reload of permissions for this + // newly updated connection group + // TODO: cacheService.users.removeAll(); + }) + ); + } + + } + + /** + * Makes a request to the REST API to delete a connection group, returning + * an observable that can be used for processing the results of the call. + * + * @param {ConnectionGroup} connectionGroup + * The connection group to delete. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * delete operation is successful. + */ + deleteConnectionGroup(dataSource: string, connectionGroup: ConnectionGroup): Observable { + + // Delete connection group + return this.http.delete('api/session/data/' + encodeURIComponent(dataSource) + '/connectionGroups/' + encodeURIComponent(connectionGroup.identifier || '')) + + // Clear the cache + .pipe( + tap(() => { + // TODO: cacheService.connections.removeAll(); + }) + ); + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection.service.ts new file mode 100644 index 0000000000..c63b10b983 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/connection.service.ts @@ -0,0 +1,237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { map, Observable, tap } from 'rxjs'; +import { Connection } from '../types/Connection'; +import { ConnectionHistoryEntry } from '../types/ConnectionHistoryEntry'; +import { DirectoryPatch } from '../types/DirectoryPatch'; +import { DirectoryPatchResponse } from '../types/DirectoryPatchResponse'; + +/** + * Service for operating on connections via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class ConnectionService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get a single connection, returning an + * observable that provides the corresponding @link{Connection} if successful. + * + * @param id + * The ID of the connection. + * + * @returns + * An observable which will emit a @link{Connection} upon success. + * + * @example + * + * connectionService.getConnection('myConnection').subscribe(connection => { + * // Do something with the connection + * }); + */ + getConnection(dataSource: string, id: string): Observable { + + // Retrieve connection + // TODO: cache : cacheService.connections, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) + ); + + } + + /** + * Makes a request to the REST API to get the usage history of a single + * connection, returning an observable that provides the corresponding + * array of @link{ConnectionHistoryEntry} objects if successful. + * + * @param id + * The identifier of the connection. + * + * @returns + * An observable which will emit an array of + * @link{ConnectionHistoryEntry} objects upon success. + */ + getConnectionHistory(dataSource: string, id: string): Observable { + + // Retrieve connection history + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) + '/history' + ); + + } + + /** + * Makes a request to the REST API to get the parameters of a single + * connection, returning an observable that provides the corresponding + * map of parameter name/value pairs if successful. + * + * @param id + * The identifier of the connection. + * + * @returns + * An observable which will emit an map of parameter name/value + * pairs upon success. + */ + getConnectionParameters(dataSource: string, id: string): Observable> { + + // Retrieve connection parameters + // TODO: cache: cacheService.connections, + return this.http.get>( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(id) + '/parameters' + ); + + } + + /** + * Makes a request to the REST API to save a connection, returning an + * observable that can be used for processing the results of the call. If the + * connection is new, and thus does not yet have an associated identifier, + * the identifier will be automatically set in the provided connection + * upon success. + * + * @param connection + * The connection to update. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * save operation is successful. + */ + saveConnection(dataSource: string, connection: Connection): Observable { + + // If connection is new, add it and set the identifier automatically + if (!connection.identifier) { + return this.http.post( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connections', + connection + ) + + // Set the identifier on the new connection and clear the cache + .pipe( + map(newConnection => { + connection.identifier = newConnection.identifier; + // TODO: cacheService.connections.removeAll(); + + // Clear users cache to force reload of permissions for this + // newly created connection + // TODO: cacheService.users.removeAll(); + }) + ); + } + + // Otherwise, update the existing connection + else { + return this.http.put( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(connection.identifier), + connection + ) + + // Clear the cache + .pipe( + tap(() => { + // TODO: cacheService.connections.removeAll(); + + // Clear users cache to force reload of permissions for this + // newly updated connection + // TODO: cacheService.users.removeAll(); + }) + ); + } + + } + + /** + * Makes a request to the REST API to apply a supplied list of connection + * patches, returning an observable that can be used for processing the results + * of the call. + * + * This operation is atomic - if any errors are encountered during the + * connection patching process, the entire request will fail, and no + * changes will be persisted. + * + * @param dataSource + * The identifier of the data source associated with the connections to + * be patched. + * + * @param patches + * An array of patches to apply. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * patch operation is successful. + */ + patchConnections(dataSource: string, patches: DirectoryPatch[]): Observable { + + // Make the PATCH request + return this.http.patch( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connections', + patches + ) + + // Clear the cache + .pipe( + tap(patchResponse => { + // TODO: cacheService.connections.removeAll(); + + // Clear users cache to force reload of permissions for any + // newly created or replaced connections + // TODO: cacheService.users.removeAll(); + + }) + ); + + } + + /** + * Makes a request to the REST API to delete a connection, + * returning an observable that can be used for processing the results of the call. + * + * @param connection + * The connection to delete. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * delete operation is successful. + */ + deleteConnection(dataSource: string, connection: Connection): Observable { + + // Delete connection + return this.http.delete( + 'api/session/data/' + encodeURIComponent(dataSource) + '/connections/' + encodeURIComponent(connection.identifier!) + ) + + // Clear the cache + .pipe( + tap(() => { + // TODO: cacheService.connections.removeAll(); + }) + ); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/data-source-service.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/data-source-service.service.ts new file mode 100644 index 0000000000..c34be65a5e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/data-source-service.service.ts @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { RequestService } from './request.service'; +import { Error } from '../types/Error'; +import { Observable } from 'rxjs'; + +/** + * Service which contains all REST API response caches. + */ +@Injectable({ + providedIn: 'root' +}) +export class DataSourceService { + + constructor(private requestService: RequestService) { + } + + /** + * Invokes the given function once for each of the given data sources, + * passing that data source as the first argument to each invocation, + * followed by any additional arguments passed to apply(). The results of + * each invocation are aggregated into a map by data source identifier, + * and handled through a single promise which is resolved or rejected + * depending on the success/failure of each resulting REST call. Any error + * results in rejection of the entire apply() operation, except 404 ("NOT + * FOUND") errors, which are ignored. + * + * @param fn + * The function to call for each of the given data sources. The data + * source identifier will be given as the first argument, followed by + * the rest of the arguments given to apply(), in order. The function + * must return a Promise which is resolved or rejected depending on the + * result of the REST call. + * + * @param dataSources + * The array or data source identifiers against which the given + * function should be called. + * + * @param args + * Any additional arguments to pass to the given function each time it + * is called. + * + * @returns + * A Promise which resolves with a map of data source identifier to + * corresponding result. The result will be the exact object or value + * provided as the resolution to the Promise returned by calls to the + * given function. + */ + apply(fn: (dataSource: string, ...args: any[]) => Observable, dataSources: string[], ...args: any[]): Promise> { + + return new Promise((resolve, reject) => { + + const requests: Promise[] = []; + const results: Record = {}; + + // Retrieve the root group from all data sources + dataSources.forEach(dataSource => { + + // Add promise to list of pending requests + let deferredRequestResolve: () => void; + let deferredRequestReject: (reason: any) => void; + const deferredRequest = new Promise((resolve, reject) => { + deferredRequestResolve = resolve; + deferredRequestReject = reject; + }); + + requests.push(deferredRequest); + + // Retrieve root group from data source + fn(dataSource, ...args) + + // Store result on success + .subscribe({ + next: (data: TData) => { + results[dataSource] = data; + deferredRequestResolve(); + }, + + // Fail on any errors (except "NOT FOUND") + error: this.requestService.createPromiseErrorCallback(function immediateRequestFailed(error: any) { + + if (error.type === Error.Type.NOT_FOUND) + deferredRequestResolve(); + + // Explicitly abort for all other errors + else + deferredRequestReject(error); + + }) + }); + + }); + + // Resolve if all requests succeed + Promise.all(requests).then(() => { + resolve(results); + }, + + // Reject if at least one request fails + this.requestService.createPromiseErrorCallback((error: any) => { + reject(error); + })); + + }); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/history.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/history.service.ts new file mode 100644 index 0000000000..0957fdaf0e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/history.service.ts @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { ConnectionHistoryEntry } from '../types/ConnectionHistoryEntry'; + +/** + * Service for operating on history records via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class HistoryService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get the usage history of all + * accessible connections, returning an Observable that provides the + * corresponding array of @link{ConnectionHistoryEntry} objects if + * successful. + * + * @param dataSource + * The unique identifier of the data source containing the connection + * history records to be retrieved. This identifier corresponds to an + * AuthenticationProvider within the Guacamole web application. + * + * @param requiredContents + * The set of arbitrary strings to filter with. A ConnectionHistoryEntry + * must contain each of these values within the associated username, + * connection name, start date, or end date to appear in the result. If + * null, no filtering will be performed. + * + * @param sortPredicates + * The set of predicates to sort against. The resulting array of + * ConnectionHistoryEntry objects will be sorted according to the + * properties and sort orders defined by each predicate. If null, the + * order of the resulting entries is undefined. Valid values are listed + * within ConnectionHistoryEntry.SortPredicate. + * + * @returns + * An Observable which will emit an array of + * @link{ConnectionHistoryEntry} objects upon success. + */ + getConnectionHistory(dataSource: string, requiredContents?: string[], sortPredicates?: string[]): Observable { + + let httpParameters = new HttpParams(); + + // Filter according to contents if restrictions are specified + if (requiredContents) + httpParameters = httpParameters.appendAll({contains: requiredContents}); + + // Sort according to provided predicates, if any + if (sortPredicates) + httpParameters = httpParameters.appendAll({sort: sortPredicates}); + + // Retrieve connection history + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/history/connections', + {params: httpParameters} + ); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/language.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/language.service.ts new file mode 100644 index 0000000000..701ee2628d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/language.service.ts @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { HttpClient } from '@angular/common/http'; + +/** + * Service for operating on language metadata via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class LanguageService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get the list of languages, returning + * an observable that provides a map of language names by language key if + * successful. + * + * @returns + * An observable which will emit a map of language names by + * language key upon success. + */ + getLanguages(): Observable> { + + // Retrieve available languages + // return authenticationService.request({ + // TODO cache : cacheService.languages, + // method : 'GET', + // url : 'api/languages' + // }); + return this.http.get>('api/languages'); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/membership.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/membership.service.ts new file mode 100644 index 0000000000..c9f40b1b16 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/membership.service.ts @@ -0,0 +1,341 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { RelatedObjectPatch } from '../types/RelatedObjectPatch'; +import { AuthenticationService } from '../../auth/service/authentication.service'; +import { Observable, tap } from 'rxjs'; + +/** + * Service for operating on user group memberships via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class MembershipService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient, private authenticationService: AuthenticationService) { + } + + /** + * Creates a new array of patches which represents the given changes to an + * arbitrary set of objects sharing some common relation. + * + * @param identifiersToAdd + * The identifiers of all objects which should be added to the + * relation, if any. + * + * @param identifiersToRemove + * The identifiers of all objects which should be removed from the + * relation, if any. + * + * @returns + * A new array of patches which represents the given changes. + */ + private getRelatedObjectPatch(identifiersToAdd?: string[], identifiersToRemove?: string[]): RelatedObjectPatch[] { + + const patch: RelatedObjectPatch[] = []; + + identifiersToAdd?.forEach(identifier => { + patch.push(new RelatedObjectPatch({ + op: RelatedObjectPatch.Operation.ADD, + value: identifier + })); + }); + + identifiersToRemove?.forEach(identifier => { + patch.push(new RelatedObjectPatch({ + op: RelatedObjectPatch.Operation.REMOVE, + value: identifier + })); + }); + + return patch; + + } + + /** + * Returns the URL for the REST resource most appropriate for accessing + * the parent user groups of the user or group having the given identifier. + * + * It is important to note that a particular data source can authenticate + * and provide user groups for a user, even if that user does not exist + * within that data source (and thus cannot be found beneath + * "api/session/data/{dataSource}/users") + * + * @param dataSource + * The unique identifier of the data source containing the user or + * group whose parent user groups should be retrieved. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @param identifier + * The identifier of the user or group for which the URL of the proper + * REST resource should be derived. + * + * @param group + * Whether the provided identifier refers to a user group. If false or + * omitted, the identifier given is assumed to refer to a user. + * + * @returns + * The URL for the REST resource representing the parent user groups of + * the user or group having the given identifier. + */ + private getUserGroupsResourceURL(dataSource: string, identifier: string, group?: boolean): string { + + // Create base URL for data source + const base = 'api/session/data/' + encodeURIComponent(dataSource); + + // Access parent groups directly (there is no "self" for user groups + // as there is for users) + if (group) + return base + '/userGroups/' + encodeURIComponent(identifier) + '/userGroups'; + + // If the username is that of the current user, do not rely on the + // user actually existing (they may not). Access their parent groups via + // "self" rather than the collection of defined users. + if (identifier === this.authenticationService.getCurrentUsername()) + return base + '/self/userGroups'; + + // Otherwise, the user must exist for their parent groups to be + // accessible. Use the collection of defined users. + return base + '/users/' + encodeURIComponent(identifier) + '/userGroups'; + + } + + /** + * Makes a request to the REST API to retrieve the identifiers of all + * parent user groups of which a given user or group is a member, returning + * an observable that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user or + * group whose parent user groups should be retrieved. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @param identifier + * The identifier of the user or group to retrieve the parent user + * groups of. + * + * @param group + * Whether the provided identifier refers to a user group. If false or + * omitted, the identifier given is assumed to refer to a user. + * + * @returns + * An observable for the HTTP call which will emit an array + * containing the requested identifiers upon success. + */ + getUserGroups(dataSource: string, identifier: string, group?: boolean): Observable { + + // Retrieve parent groups + // TODO: cache : cacheService.users, + return this.http.get(this.getUserGroupsResourceURL(dataSource, identifier, group)); + + } + + /** + * Makes a request to the REST API to modify the parent user groups of + * which a given user or group is a member, returning an observable that can be + * used for processing the results of the call. + * + * @param {String} dataSource + * The unique identifier of the data source containing the user or + * group whose parent user groups should be modified. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @param identifier + * The identifier of the user or group to modify the parent user + * groups of. + * + * @param addToUserGroups + * The identifier of all parent user groups to which the given user or + * group should be added as a member, if any. + * + * @param removeFromUserGroups + * The identifier of all parent user groups from which the given member + * user or group should be removed, if any. + * + * @param group + * Whether the provided identifier refers to a user group. If false or + * omitted, the identifier given is assumed to refer to a user. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * patch operation is successful. + */ + patchUserGroups(dataSource: string, identifier: string, addToUserGroups?: string[], removeFromUserGroups?: string[], group?: boolean): Observable { + + // Update parent user groups + return this.http.patch( + this.getUserGroupsResourceURL(dataSource, identifier, group), + this.getRelatedObjectPatch(addToUserGroups, removeFromUserGroups) + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + /** + * Makes a request to the REST API to retrieve the identifiers of all + * users which are members of the given user group, returning an observable + * that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user group + * whose member users should be retrieved. This identifier corresponds + * to an AuthenticationProvider within the Guacamole web application. + * + * @param identifier + * The identifier of the user group to retrieve the member users of. + * + * @returns + * An observable for the HTTP call which will emit an array + * containing the requested identifiers upon success. + */ + getMemberUsers(dataSource: string, identifier: string): Observable { + + // Retrieve member users + // TODO: cache : cacheService.users, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUsers' + ); + + } + + /** + * Makes a request to the REST API to modify the member users of a given + * user group, returning an observable that can be used for processing the + * results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user group + * whose member users should be modified. This identifier corresponds + * to an AuthenticationProvider within the Guacamole web application. + * + * @param identifier + * The identifier of the user group to modify the member users of. + * + * @param usersToAdd + * The identifier of all users to add as members of the given user + * group, if any. + * + * @param usersToRemove + * The identifier of all users to remove from the given user group, + * if any. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * patch operation is successful. + */ + patchMemberUsers(dataSource: string, identifier: string, usersToAdd?: string[], usersToRemove?: string[]): Observable { + + // Update member users + return this.http.patch( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUsers', + this.getRelatedObjectPatch(usersToAdd, usersToRemove) + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + /** + * Makes a request to the REST API to retrieve the identifiers of all + * user groups which are members of the given user group, returning an + * observable that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user group + * whose member user groups should be retrieved. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @param identifier + * The identifier of the user group to retrieve the member user + * groups of. + * + * @returns + * An observable for the HTTP call which will emit an array + * containing the requested identifiers upon success. + */ + getMemberUserGroups(dataSource: string, identifier: string): Observable { + + // Retrieve member user groups + // TODO: cache: cacheService.users, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUserGroups' + ); + + } + + /** + * Makes a request to the REST API to modify the member user groups of a + * given user group, returning an observable that can be used for processing + * the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user group + * whose member user groups should be modified. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @param identifier + * The identifier of the user group to modify the member user groups of. + * + * @param userGroupsToAdd + * The identifier of all user groups to add as members of the given + * user group, if any. + * + * @param userGroupsToRemove + * The identifier of all member user groups to remove from the given + * user group, if any. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * patch operation is successful. + */ + patchMemberUserGroups(dataSource: string, identifier: string, userGroupsToAdd?: string[], userGroupsToRemove?: string[]): Observable { + + // Update member user groups + return this.http.patch( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + '/memberUserGroups', + this.getRelatedObjectPatch(userGroupsToAdd, userGroupsToRemove) + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/patch.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/patch.service.ts new file mode 100644 index 0000000000..b24bd67671 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/patch.service.ts @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +/** + * Service for operating on HTML patches via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class PatchService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get the list of patches, returning + * an observable that provides the array of all applicable patches if + * successful. Each patch is a string of raw HTML with meta information + * describing the patch operation stored within meta tags. + * + * @returns + * An observable which will emit an array of HTML patches upon + * success. + */ + getPatches(): Observable { + + // Retrieve all applicable HTML patches + return this.http.get('api/patches'); + // TODO cache : cacheService.patches, + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts new file mode 100644 index 0000000000..cf4a4058b8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts @@ -0,0 +1,337 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { AuthenticationService } from '../../auth/service/authentication.service'; +import { Observable, tap } from 'rxjs'; +import { PermissionSet } from '../types/PermissionSet'; +import { PermissionPatch } from '../types/PermissionPatch'; + +/** + * Service for operating on user permissions via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class PermissionService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient, private authenticationService: AuthenticationService) { + } + + /** + * Makes a request to the REST API to get the list of effective permissions + * for a given user, returning an observable that provides a + * {@link PermissionSet} objects if successful. Effective permissions differ + * from the permissions returned via getPermissions() in that permissions + * which are not directly granted to the user are included. + * + * NOTE: Unlike getPermissions(), getEffectivePermissions() CANNOT be + * applied to user groups. Only users have retrievable effective + * permissions as far as the REST API is concerned. + * + * @param dataSource + * The unique identifier of the data source containing the user whose + * permissions should be retrieved. This identifier corresponds to an + * AuthenticationProvider within the Guacamole web application. + * + * @param userID + * The ID of the user to retrieve the permissions for. + * + * @returns + * An observable which will emit a {@link PermissionSet} upon + * success. + */ + getEffectivePermissions(dataSource: string, userID: string): Observable { + + // Retrieve user permissions + //TODO cache : cacheService.users, + return this.http.get(this.getEffectivePermissionsResourceURL(dataSource, userID)); + + } + + /** + * Returns the URL for the REST resource most appropriate for accessing + * the effective permissions of the user having the given username. + * Effective permissions differ from the permissions returned via + * getPermissions() in that permissions which are not directly granted to + * the user are included. + * + * It is important to note that a particular data source can authenticate + * and provide permissions for a user, even if that user does not exist + * within that data source (and thus cannot be found beneath + * "api/session/data/{dataSource}/users") + * + * NOTE: Unlike getPermissionsResourceURL(), + * getEffectivePermissionsResourceURL() CANNOT be applied to user groups. + * Only users have retrievable effective permissions as far as the REST API + * is concerned. + * + * @param dataSource + * The unique identifier of the data source containing the user whose + * permissions should be retrieved. This identifier corresponds to an + * AuthenticationProvider within the Guacamole web application. + * + * @param username + * The username of the user for which the URL of the proper REST + * resource should be derived. + * + * @returns + * The URL for the REST resource representing the user having the given + * username. + */ + private getEffectivePermissionsResourceURL(dataSource: string, username: string): string { + + // Create base URL for data source + const base = 'api/session/data/' + encodeURIComponent(dataSource); + + // If the username is that of the current user, do not rely on the + // user actually existing (they may not). Access their permissions via + // "self" rather than the collection of defined users. + if (username === this.authenticationService.getCurrentUsername()) + return base + '/self/effectivePermissions'; + + // Otherwise, the user must exist for their permissions to be + // accessible. Use the collection of defined users. + return base + '/users/' + encodeURIComponent(username) + '/effectivePermissions'; + + } + + /** + * Makes a request to the REST API to get the list of permissions for a + * given user or user group, returning a promise that provides a + * {@link PermissionSet} objects if successful. The permissions retrieved + * differ from effective permissions (those returned by + * getEffectivePermissions()) in that both users and groups may be queried, + * and only permissions which are directly granted to the user or group are + * included. + * + * @param dataSource + * The unique identifier of the data source containing the user or group + * whose permissions should be retrieved. This identifier corresponds to + * an AuthenticationProvider within the Guacamole web application. + * + * @param identifier + * The identifier of the user or group to retrieve the permissions for. + * + * @param group + * Whether the provided identifier refers to a user group. If false or + * omitted, the identifier given is assumed to refer to a user. + * + * @returns + * An observable which will emit a {@link PermissionSet} upon + * success. + */ + getPermissions(dataSource: string, identifier: string, group: boolean = false): Observable { + + // Retrieve user/group permissions + // TODO: cache : cacheService.users, + return this.http.get(this.getPermissionsResourceURL(dataSource, identifier, group)); + + } + + /** + * Returns the URL for the REST resource most appropriate for accessing + * the permissions of the user or group having the given identifier. The + * permissions retrieved differ from effective permissions (those returned + * by getEffectivePermissions()) in that only permissions which are directly + * granted to the user or group are included. + * + * It is important to note that a particular data source can authenticate + * and provide permissions for a user, even if that user does not exist + * within that data source (and thus cannot be found beneath + * "api/session/data/{dataSource}/users") + * + * @param dataSource + * The unique identifier of the data source containing the user whose + * permissions should be retrieved. This identifier corresponds to an + * AuthenticationProvider within the Guacamole web application. + * + * @param identifier + * The identifier of the user or group for which the URL of the proper + * REST resource should be derived. + * + * @param group + * Whether the provided identifier refers to a user group. If false or + * omitted, the identifier given is assumed to refer to a user. + * + * @returns + * The URL for the REST resource representing the user or group having + * the given identifier. + */ + private getPermissionsResourceURL(dataSource: string, identifier: string, group: boolean = false): string { + + // Create base URL for data source + const base = 'api/session/data/' + encodeURIComponent(dataSource); + + // Access group permissions directly (there is no "self" for user groups + // as there is for users) + if (group) + return base + '/userGroups/' + encodeURIComponent(identifier) + '/permissions'; + + // If the username is that of the current user, do not rely on the + // user actually existing (they may not). Access their permissions via + // "self" rather than the collection of defined users. + if (identifier === this.authenticationService.getCurrentUsername()) + return base + '/self/permissions'; + + // Otherwise, the user must exist for their permissions to be + // accessible. Use the collection of defined users. + return base + '/users/' + encodeURIComponent(identifier) + '/permissions'; + + } + + /** + * Adds patches for modifying any permission that can be stored within a + * @link{PermissionSet}. + * + * @param patch + * The array of patches to add new patches to. + * + * @param operation + * The operation to specify within each of the patches. Valid values + * for this are defined within PermissionPatch.Operation. + * + * @param permissions + * The set of permissions for which patches should be added. + */ + private addPatchOperations(patch: PermissionPatch[], operation: PermissionPatch.Operation, permissions: PermissionSet = new PermissionSet()): void { + + // Add connection permission operations to patch + this.addObjectPatchOperations(patch, operation, '/connectionPermissions', + permissions.connectionPermissions); + + // Add connection group permission operations to patch + this.addObjectPatchOperations(patch, operation, '/connectionGroupPermissions', + permissions.connectionGroupPermissions); + + // Add sharing profile permission operations to patch + this.addObjectPatchOperations(patch, operation, '/sharingProfilePermissions', + permissions.sharingProfilePermissions); + + // Add active connection permission operations to patch + this.addObjectPatchOperations(patch, operation, '/activeConnectionPermissions', + permissions.activeConnectionPermissions); + + // Add user permission operations to patch + this.addObjectPatchOperations(patch, operation, '/userPermissions', + permissions.userPermissions); + + // Add user group permission operations to patch + this.addObjectPatchOperations(patch, operation, '/userGroupPermissions', + permissions.userGroupPermissions); + + // Add system operations to patch + permissions.systemPermissions.forEach(function addSystemPatch(type) { + patch.push({ + op: operation, + path: '/systemPermissions', + value: type + }); + }); + + }; + + /** + * Adds patches for modifying the permissions associated with specific + * objects to the given array of patches. + * + * @param patch + * The array of patches to add new patches to. + * + * @param operation + * The operation to specify within each of the patches. Valid values + * for this are defined within PermissionPatch.Operation. + * + * @param path + * The path of the permissions being patched. The path is a JSON path + * describing the position of the permissions within a PermissionSet. + * + * @param permissions + * A map of object identifiers to arrays of permission type strings, + * where each type string is a value from + * PermissionSet.ObjectPermissionType. + */ + private addObjectPatchOperations(patch: PermissionPatch[], operation: PermissionPatch.Operation, path: string, permissions: Record): void { + + // Add object permission operations to patch + for (let identifier in permissions) { + permissions[identifier].forEach(function addObjectPatch(type) { + patch.push({ + op: operation, + path: path + '/' + identifier, + value: type + }); + }); + } + + } + + /** + * Makes a request to the REST API to modify the permissions for a given + * user or group, returning a promise that can be used for processing the + * results of the call. This request affects only the permissions directly + * granted to the user or group, and may not affect permissions inherited + * through other means (effective permissions). + * + * @param {String} dataSource + * The unique identifier of the data source containing the user or group + * whose permissions should be modified. This identifier corresponds to + * an AuthenticationProvider within the Guacamole web application. + * + * @param {String} identifier + * The identifier of the user or group to modify the permissions of. + * + * @param {PermissionSet} [permissionsToAdd] + * The set of permissions to add, if any. + * + * @param {PermissionSet} [permissionsToRemove] + * The set of permissions to remove, if any. + * + * @param {Boolean} [group] + * Whether the provided identifier refers to a user group. If false or + * omitted, the identifier given is assumed to refer to a user. + * + * @returns {Promise} + * A promise for the HTTP call which will succeed if and only if the + * patch operation is successful. + */ + patchPermissions(dataSource: string, identifier: string, permissionsToAdd?: PermissionSet, permissionsToRemove?: PermissionSet, group?: boolean): Observable { + + const permissionPatch: PermissionPatch[] = []; + + // Add all the add operations to the patch + this.addPatchOperations(permissionPatch, PermissionPatch.Operation.ADD, permissionsToAdd); + + // Add all the remove operations to the patch + this.addPatchOperations(permissionPatch, PermissionPatch.Operation.REMOVE, permissionsToRemove); + + // Patch user/group permissions + return this.http.patch(this.getPermissionsResourceURL(dataSource, identifier, group), permissionPatch) + + // Clear the cache + .pipe(tap(() => { + // TODO: this.cacheService.users.removeAll(); + }) + ); + }; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts new file mode 100644 index 0000000000..71b0673982 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { catchError, throwError } from 'rxjs'; +import { RequestService } from './request.service'; +import { TestBed } from '@angular/core/testing'; + +import { Error } from '../types/Error'; +import { testScheduler } from '../../util/test-helper'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import Type = Error.Type; + +describe('RequestService', () => { + let service: RequestService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + }); + service = TestBed.inject(RequestService); + }); + + describe('createErrorCallback', () => { + it('should invoke the given callback if the error is a REST Error', () => { + testScheduler.run(({expectObservable}) => { + + const restError = new Error({type: Type.NOT_FOUND}); + const defaultValue = 'foo'; + + const observable = throwError(() => restError).pipe( + catchError(service.defaultValue(defaultValue)) + ); + + expectObservable(observable).toBe('(a|)', {a: defaultValue}); + }); + }); + + it('should rethrow all other errors', () => { + testScheduler.run(({expectObservable}) => { + const otherError = 'Other Error'; + const defaultValue = 'foo'; + + const observable = throwError(() => otherError).pipe( + catchError(service.defaultValue(defaultValue)) + ); + + expectObservable(observable).toBe('#', undefined, otherError); + + }); + }); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts new file mode 100644 index 0000000000..7b2eb3976f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts @@ -0,0 +1,200 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { GuacEventService } from "guacamole-frontend-lib"; +import { Observable, of, throwError } from 'rxjs'; +import { + GuacFrontendEventArguments +} from "../../events/types/GuacFrontendEventArguments"; +import { LogService } from '../../util/log.service'; +import { Error } from '../types/Error'; + +/** + * Service for converting observables from the HttpService that pass the entire response into + * promises that pass only the data from that response. + */ +@Injectable({ + providedIn: 'root' +}) +export class RequestService { + + constructor(private log: LogService, + private guacEventService: GuacEventService) { + } + + /** + * Creates a Observable error callback which invokes the given callback only + * if the Observable failed with a REST @link{Error} object. If the + * Observable failed without an @link{Error} object, such as when a + * JavaScript error occurs within a callback earlier in the Observable chain, + * the error is logged without invoking the given callback and rethrown. + * + * @param callback + * The callback to invoke if the Observable failed with an + * @link{Error} object. + * + * @returns + * A function which can be provided as the catchError callback for an + * Observable. + */ + createErrorCallback(callback: (error: any) => Observable): (error: any) => Observable { + return (error: any): Observable => { + + // Invoke given callback ONLY if due to a legitimate REST error + if (error instanceof Error) + return callback(error); + + // Log all other errors + this.log.error(error); + return throwError(() => error) + }; + } + + /** + * Creates a promise error callback which invokes the given callback only + * if the promise was rejected with a REST @link{Error} object. If the + * promise is rejected without an @link{Error} object, such as when a + * JavaScript error occurs within a callback earlier in the promise chain, + * the rejection is logged without invoking the given callback. + * + * @param {Function} callback + * The callback to invoke if the promise is rejected with an + * @link{Error} object. + * + * @returns {Function} + * A function which can be provided as the error callback for a + * promise. + */ + createPromiseErrorCallback(callback: Function): ((reason: any) => (PromiseLike) | null | undefined) { + return ((error: any) => { + + // Invoke given callback ONLY if due to a legitimate REST error + if (error instanceof Error) + return callback(error); + + // Log all other errors + this.log.error(error); + + }); + } + + /** + * Creates an observable error callback which emits the + * given default value only if the @link{Error} is a NOT_FOUND error. + * All other errors are passed through and must be handled as yet more errors. + * + * @param value + * The default value to use to emit if the observable failed with a + * NOT_FOUND error. + * + * @returns + * A function which can be provided as the error callback for an + * observable. + */ + defaultValue(value: T): (error: any) => Observable { + return this.createErrorCallback((error: any) => { + + // Return default value only if not found + if (error.type === Error.Type.NOT_FOUND) + return of(value); + + // Reject promise with original error otherwise + throw error; + + }); + } + + /** + * Creates a promise error callback which resolves the promise with the + * given default value only if the @link{Error} in the original rejection + * is a NOT_FOUND error. All other errors are passed through and must be + * handled as yet more rejections. + * + * @param value + * The default value to use to resolve the promise if the promise is + * rejected with a NOT_FOUND error. + * + * @returns + * A function which can be provided as the error callback for a + * promise. + */ + defaultPromiseValue(value: any): Function { + return this.createErrorCallback(function resolveIfNotFound(error: any) { + + // Return default value only if not found + if (error.type === Error.Type.NOT_FOUND) + return value; + + // Reject promise with original error otherwise + throw error; + + }); + } + + /** + * Promise error callback which ignores all rejections due to REST errors, + * but logs all other rejections, such as those due to JavaScript errors. + * This callback should be used in cases where + * a REST response is being handled but REST errors should be ignored. + * + * @constant + */ + readonly IGNORE: (error: any) => Observable = this.createErrorCallback((error: any): Observable => { + return of(void (0)); + }); + + /** + * Promise error callback which logs all rejections due to REST errors as + * warnings to the browser console, and logs all other rejections as + * errors. This callback should be used in favor of + * @link{IGNORE} if REST errors are simply not expected. + * + * @constant + */ + readonly WARN: (error: any) => Observable = this.createErrorCallback((error: any): Observable => { + this.log.warn(error.type, error.message || error.translatableMessage); + return of(void (0)); + }); + + /** + * Promise error callback which replaces the content of the page with a + * generic error message warning that the page could not be displayed. All + * rejections are logged to the browser console as errors. This callback + * should be used in favor of @link{WARN} if REST errors will result in the + * page being unusable. + * + * @constant + */ + readonly DIE: (error: any) => Observable = this.createErrorCallback((error: any): Observable => { + this.guacEventService.broadcast('guacFatalPageError', error); + this.log.error(error.type, error.message || error.translatableMessage); + return of(void (0)); + }); + + readonly PROMISE_DIE: ((reason: any) => (PromiseLike) | null | undefined) = this.createPromiseErrorCallback((error: any) => { + this.guacEventService.broadcast('guacFatalPageError', error); + this.log.error(error.type, error.message || error.translatableMessage); + }); + + readonly PROMISE_WARN: ((reason: any) => (PromiseLike) | null | undefined) = this.createPromiseErrorCallback((error: any) => { + this.log.warn(error.type, error.message || error.translatableMessage); + }); + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/schema.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/schema.service.ts new file mode 100644 index 0000000000..9aef578ad8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/schema.service.ts @@ -0,0 +1,224 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { Form } from '../types/Form'; +import { Protocol } from '../types/Protocol'; + +/** + * Service for operating on metadata via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class SchemaService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get the list of available attributes + * for user objects, returning an observable that provides an array of + * @link{Form} objects if successful. Each element of the array describes + * a logical grouping of possible attributes. + * + * @param dataSource + * The unique identifier of the data source containing the users whose + * available attributes are to be retrieved. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @returns + * An observable which will emit an array of @link{Form} + * objects, where each @link{Form} describes a logical grouping of + * possible attributes. + */ + getUserAttributes(dataSource: string): Observable { + + // Retrieve available user attributes + // TODO: cache : cacheService.schema, + return this.http.get('api/session/data/' + encodeURIComponent(dataSource) + '/schema/userAttributes'); + + } + + /** + * Makes a request to the REST API to get the list of available user preference + * attributes, returning an observable that provides an array of @link{Form} objects + * if successful. Each element of the array describes a logical grouping of + * possible user preference attributes. + * + * @param dataSource + * The unique identifier of the data source containing the users whose + * available user preference attributes are to be retrieved. This + * identifier corresponds to an AuthenticationProvider within the + * Guacamole web application. + * + * @returns + * An observable which will emit an array of @link{Form} + * objects, where each @link{Form} describes a logical grouping of + * possible attributes. + */ + getUserPreferenceAttributes(dataSource: string): Observable { + + // Retrieve available user attributes + // TODO: cache : cacheService.schema, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/userPreferenceAttributes' + ); + + } + + /** + * Makes a request to the REST API to get the list of available attributes + * for user group objects, returning an observable that provides an array of + * @link{Form} objects if successful. Each element of the array describes + * a logical grouping of possible attributes. + * + * @param dataSource + * The unique identifier of the data source containing the user groups + * whose available attributes are to be retrieved. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @returns + * An observable which will emit an array of @link{Form} + * objects, where each @link{Form} describes a logical grouping of + * possible attributes. + */ + getUserGroupAttributes(dataSource: string): Observable { + + // Retrieve available user group attributes + // TODO: cache : cacheService.schema, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/userGroupAttributes' + ); + + } + + /** + * Makes a request to the REST API to get the list of available attributes + * for connection objects, returning an observable that provides an array of + * @link{Form} objects if successful. Each element of the array describes + * a logical grouping of possible attributes. + * + * @param dataSource + * The unique identifier of the data source containing the connections + * whose available attributes are to be retrieved. This identifier + * corresponds to an AuthenticationProvider within the Guacamole web + * application. + * + * @returns + * An observable which will emit an array of @link{Form} + * objects, where each @link{Form} describes a logical grouping of + * possible attributes. + */ + getConnectionAttributes(dataSource: string): Observable { + + // Retrieve available connection attributes + // TODO: cache : cacheService.schema, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/connectionAttributes' + ); + + } + + /** + * Makes a request to the REST API to get the list of available attributes + * for sharing profile objects, returning an observable that provides an array + * of @link{Form} objects if successful. Each element of the array describes + * a logical grouping of possible attributes. + * + * @param dataSource + * The unique identifier of the data source containing the sharing + * profiles whose available attributes are to be retrieved. This + * identifier corresponds to an AuthenticationProvider within the + * Guacamole web application. + * + * @returns + * An observable which will emit an array of @link{Form} + * objects, where each @link{Form} describes a logical grouping of + * possible attributes. + */ + getSharingProfileAttributes(dataSource: string): Observable { + + // Retrieve available sharing profile attributes + // TODO: cache : cacheService.schema, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/sharingProfileAttributes' + ); + + } + + /** + * Makes a request to the REST API to get the list of available attributes + * for connection group objects, returning an observable that provides an array + * of @link{Form} objects if successful. Each element of the array + * a logical grouping of possible attributes. + * + * @param dataSource + * The unique identifier of the data source containing the connection + * groups whose available attributes are to be retrieved. This + * identifier corresponds to an AuthenticationProvider within the + * Guacamole web application. + * + * @returns + * An observable which will emit an array of @link{Form} + * objects, where each @link{Form} describes a logical grouping of + * possible attributes. + */ + getConnectionGroupAttributes(dataSource: string): Observable { + + // Retrieve available connection group attributes + // TODO: cache : cacheService.schema, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/connectionGroupAttributes' + ); + + } + + /** + * Makes a request to the REST API to get the list of protocols, returning + * an observable that provides a map of @link{Protocol} objects by protocol + * name if successful. + * + * @param dataSource + * The unique identifier of the data source defining available + * protocols. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @returns + * An observable which will emit a map of @link{Protocol} + * objects by protocol name upon success. + */ + getProtocols(dataSource: string): Observable> { + + // Retrieve available protocols + // TODO: cache : cacheService.schema, + return this.http.get>( + 'api/session/data/' + encodeURIComponent(dataSource) + '/schema/protocols' + ); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/sharing-profile.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/sharing-profile.service.ts new file mode 100644 index 0000000000..3464821a8c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/sharing-profile.service.ts @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable, tap } from 'rxjs'; +import { SharingProfile } from '../types/SharingProfile'; + +/** + * Service for operating on sharing profiles via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class SharingProfileService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + + } + + /** + * Makes a request to the REST API to get a single sharing profile, + * returning an observable that provides the corresponding @link{SharingProfile} + * if successful. + * + * @param id + * The ID of the sharing profile. + * + * @returns + * An observable which will emit a @link{SharingProfile} upon + * success. + * + * @example + * + * sharingProfileService.getSharingProfile('mySharingProfile').subscribe(sharingProfile => { + * // Do something with the sharing profile + * }); + */ + getSharingProfile(dataSource: string, id: string): Observable { + + // Retrieve sharing profile + // TODO: cache : cacheService.connections, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(id) + ); + + } + + /** + * Makes a request to the REST API to get the parameters of a single + * sharing profile, returning an observable that provides the corresponding + * map of parameter name/value pairs if successful. + * + * @param id + * The identifier of the sharing profile. + * + * @returns + * An observable which will emit a map of parameter name/value + * pairs upon success. + */ + getSharingProfileParameters(dataSource: string, id: string): Observable> { + + // Retrieve sharing profile parameters + // TODO: cache: cacheService.connections, + return this.http.get>( + 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(id) + '/parameters' + ); + + } + + /** + * Makes a request to the REST API to save a sharing profile, returning an + * observable that can be used for processing the results of the call. If the + * sharing profile is new, and thus does not yet have an associate + * identifier, the identifier will be automatically set in the provided + * sharing profile upon success. + * + * @param sharingProfile + * The sharing profile to update. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * save operation is successful. + */ + saveSharingProfile(dataSource: string, sharingProfile: SharingProfile): Observable { + + // If sharing profile is new, add it and set the identifier automatically + if (!sharingProfile.identifier) { + return this.http.post( + 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles', + sharingProfile + ).pipe(tap((newSharingProfile) => { + + // Set the identifier on the new sharing profile and clear the cache + sharingProfile.identifier = newSharingProfile.identifier; + // TODO: cacheService.connections.removeAll(); + + // Clear users cache to force reload of permissions for this + // newly created sharing profile + // TODO: cacheService.users.removeAll(); + })); + } + + // Otherwise, update the existing sharing profile + else { + return this.http.put( + 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(sharingProfile.identifier), + sharingProfile + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.connections.removeAll(); + + // Clear users cache to force reload of permissions for this + // newly updated sharing profile + // TODO: cacheService.users.removeAll(); + })); + } + + } + + /** + * Makes a request to the REST API to delete a sharing profile, + * returning an observable that can be used for processing the results of the call. + * + * @param sharingProfile + * The sharing profile to delete. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * delete operation is successful. + */ + deleteSharingProfile(dataSource: string, sharingProfile: SharingProfile): Observable { + + // Delete sharing profile + return this.http.delete( + 'api/session/data/' + encodeURIComponent(dataSource) + '/sharingProfiles/' + encodeURIComponent(sharingProfile.identifier) + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.connections.removeAll(); + })); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/tunnel.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/tunnel.service.ts new file mode 100644 index 0000000000..be2675904e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/tunnel.service.ts @@ -0,0 +1,390 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import { AuthenticationService } from '../../auth/service/authentication.service'; +import { DOCUMENT } from '@angular/common'; +import { Observable } from 'rxjs'; +import { HttpClient } from '@angular/common/http'; +import { Protocol } from '../types/Protocol'; +import { SharingProfile } from '../types/SharingProfile'; +import { UserCredentials } from '../types/UserCredentials'; +import { Error } from '../types/Error'; + +/** + * Service for operating on the tunnels of in-progress connections (and their + * underlying objects) via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class TunnelService { + + /** + * The number of milliseconds to wait after a stream download has completed + * before cleaning up related DOM resources, if the browser does not + * otherwise notify us that cleanup is safe. + */ + private readonly DOWNLOAD_CLEANUP_WAIT: number = 5000; + + /** + * The maximum size a chunk may be during uploadToStream() in bytes. + */ + private readonly CHUNK_SIZE: number = 1024 * 1024 * 4; + + /** + * Reference to the window object. + */ + private window: Window; + + /** + * Inject required services. + */ + constructor(private http: HttpClient, private authenticationService: AuthenticationService, @Inject(DOCUMENT) private document: Document) { + this.window = this.document.defaultView as Window; + } + + /** + * Makes a request to the REST API to get the list of all tunnels + * associated with in-progress connections, returning an Observable that + * provides an array of their UUIDs (strings) if successful. + * + * @returns + * An Observable which will emit an array of UUID strings, uniquely + * identifying each active tunnel. + */ + getTunnels(): Observable { + + // Retrieve tunnels + return this.http.get('api/session/tunnels'); + } + + /** + * Makes a request to the REST API to retrieve the underlying protocol of + * the connection associated with a particular tunnel, returning an Observable + * that provides a @link{Protocol} object if successful. + * + * @param tunnel + * The UUID of the tunnel associated with the Guacamole connection + * whose underlying protocol is being retrieved. + * + * @returns + * An Observable which will resolve with a @link{Protocol} object upon + * success. + */ + getProtocol(tunnel: string): Observable { + + return this.http.get('api/session/tunnels/' + encodeURIComponent(tunnel) + '/protocol'); + + } + + /** + * Retrieves the set of sharing profiles that the current user can use to + * share the active connection of the given tunnel. + * + * @param tunnel + * The UUID of the tunnel associated with the Guacamole connection + * whose sharing profiles are being retrieved. + * + * @returns + * An observable which will emit a map of @link{SharingProfile} + * objects where each key is the identifier of the corresponding + * sharing profile. + */ + getSharingProfiles(tunnel: string): Observable> { + + // Retrieve all associated sharing profiles + return this.http.get>('api/session/tunnels/' + encodeURIComponent(tunnel) + + '/activeConnection/connection/sharingProfiles'); + + } + + /** + * Makes a request to the REST API to generate credentials which have + * access strictly to the active connection associated with the given + * tunnel, using the restrictions defined by the given sharing profile, + * returning an observable that emits the resulting @link{UserCredentials} + * object if successful. + * + * @param tunnel + * The UUID of the tunnel associated with the Guacamole connection + * being shared. + * + * @param sharingProfile + * The identifier of the connection object dictating the + * semantics/restrictions which apply to the shared session. + * + * @returns + * An observable which will emit a @link{UserCredentials} object + * upon success. + */ + getSharingCredentials(tunnel: string, sharingProfile: string): Observable { + + // Generate sharing credentials + return this.http.get('api/session/tunnels/' + encodeURIComponent(tunnel) + + '/activeConnection/sharingCredentials/' + encodeURIComponent(sharingProfile)); + + } + + /** + * Sanitize a filename, replacing all URL path separators with safe + * characters. + * + * @param filename + * An unsanitized filename that may need cleanup. + * + * @returns + * The sanitized filename. + */ + sanitizeFilename(filename: string): string { + return filename.replace(/[\\\/]+/g, '_'); + } + + /** + * Makes a request to the REST API to retrieve the contents of a stream + * which has been created within the active Guacamole connection associated + * with the given tunnel. The contents of the stream will automatically be + * downloaded by the browser. + * + * WARNING: Like Guacamole's various reader implementations, this function + * relies on assigning an "onend" handler to the stream object for the sake + * of cleaning up resources after the stream closes. If the "onend" handler + * is overwritten after this function returns, resources may not be + * properly cleaned up. + * + * @param tunnel + * The UUID of the tunnel associated with the Guacamole connection + * whose stream should be downloaded as a file. + * + * @param stream + * The stream whose contents should be downloaded. + * + * @param mimetype + * The mimetype of the stream being downloaded. This is currently + * ignored, with the download forced by using + * "application/octet-stream". + * + * @param filename + * The filename that should be given to the downloaded file. + */ + downloadStream(tunnel: string, stream: Guacamole.InputStream, mimetype: string, filename: string): void { + + const streamOrigin = this.window.location.origin; + + // Build download URL + const url = streamOrigin + + this.window.location.pathname + + 'api/session/tunnels/' + encodeURIComponent(tunnel) + + '/streams/' + encodeURIComponent(stream.index) + + '/' + encodeURIComponent(this.sanitizeFilename(filename)) + + '?token=' + encodeURIComponent(this.authenticationService.getCurrentToken() || ''); + + // Create temporary hidden iframe to facilitate download + const iframe = document.createElement('iframe'); + iframe.style.position = 'fixed'; + iframe.style.border = 'none'; + iframe.style.width = '1px'; + iframe.style.height = '1px'; + iframe.style.left = '-1px'; + iframe.style.top = '-1px'; + + // The iframe MUST be part of the DOM for the download to occur + document.body.appendChild(iframe); + + // Automatically remove iframe from DOM when download completes, if + // browser supports tracking of iframe downloads via the "load" event + iframe.onload = () => { + document.body.removeChild(iframe); + }; + + // Acknowledge (and ignore) any received blobs + stream.onblob = () => { + stream.sendAck('OK', Guacamole.Status.Code.SUCCESS); + }; + + // Automatically remove iframe from DOM a few seconds after the stream + // ends, in the browser does NOT fire the "load" event for downloads + stream.onend = () => { + this.window.setTimeout(() => { + if (iframe.parentElement) { + document.body.removeChild(iframe); + } + }, this.DOWNLOAD_CLEANUP_WAIT); + }; + + // Begin download + iframe.src = url; + + } + + /** + * Makes a request to the REST API to send the contents of the given file + * along a stream which has been created within the active Guacamole + * connection associated with the given tunnel. The contents of the file + * will automatically be split into individual "blob" instructions, as if + * sent by the connected Guacamole client. + * + * @param tunnel + * The UUID of the tunnel associated with the Guacamole connection + * whose stream should receive the given file. + * + * @param stream + * The stream that should receive the given file. + * + * @param file + * The file that should be sent along the given stream. + * + * @param progressCallback + * An optional callback which, if provided, will be invoked as the + * file upload progresses. The current position within the file, in + * bytes, will be provided to the callback as the sole argument. + * + * @return + * A promise which resolves when the upload has completed, and is + * rejected with an Error if the upload fails. The Guacamole protocol + * status code describing the failure will be included in the Error if + * available. If the status code is available, the type of the Error + * will be STREAM_ERROR. + */ + uploadToStream(tunnel: string, stream: Guacamole.OutputStream, file: File, progressCallback?: (progress: number) => void): Promise { + + let resolve: () => void; + let reject: (error: Error) => void; + + const deferred: Promise = new Promise( + (resolveFn: () => void, rejectFn: (error: Error) => void) => { + resolve = resolveFn; + reject = rejectFn; + } + ); + + const streamOrigin = this.window.location.origin; + + // Build upload URL + const url = streamOrigin + + this.window.location.pathname + + 'api/session/tunnels/' + encodeURIComponent(tunnel) + + '/streams/' + encodeURIComponent(stream.index) + + '/' + encodeURIComponent(this.sanitizeFilename(file.name)) + + '?token=' + encodeURIComponent(this.authenticationService.getCurrentToken() || ''); + + /** + * Creates a chunk of the inputted file to be uploaded. + * + * @param offset + * The byte at which to begin the chunk. + * + * @return + * The file chunk created by this function. + */ + const createChunk = (offset: number): Blob => { + const chunkEnd = Math.min(offset + this.CHUNK_SIZE, file.size); + const chunk = file.slice(offset, chunkEnd); + return chunk; + }; + + /** + * POSTs the inputted chunks and recursively calls uploadHandler() + * until the upload is complete. + * + * @param chunk + * The chunk to be uploaded to the stream. + * + * @param offset + * The byte at which the inputted chunk begins. + */ + const uploadChunk = (chunk: Blob, offset: number): void => { + const xhr = new XMLHttpRequest(); + xhr.open('POST', url, true); + + // Invoke provided callback if upload tracking is supported. + if (progressCallback && xhr.upload) { + xhr.upload.addEventListener('progress', function updateProgress(e) { + progressCallback(e.loaded + offset); + }); + } + + // Continue to next chunk, resolve, or reject promise as appropriate + // once upload has stopped + xhr.onreadystatechange = () => { + + // Ignore state changes prior to completion. + if (xhr.readyState !== 4) + return; + + // Resolve if last chunk or begin next chunk if HTTP status + // code indicates success. + if (xhr.status >= 200 && xhr.status < 300) { + offset += this.CHUNK_SIZE; + + if (offset < file.size) + uploadHandler(offset); + else + resolve(); + } + + // Parse and reject with resulting JSON error + else if (xhr.getResponseHeader('Content-Type') === 'application/json') + reject(new Error(JSON.parse(xhr.responseText))); + + // Warn of lack of permission of a proxy rejects the upload + else if (xhr.status >= 400 && xhr.status < 500) + reject(new Error({ + type: Error.Type.STREAM_ERROR, + statusCode: Guacamole.Status.Code.CLIENT_FORBIDDEN, + message: 'HTTP ' + xhr.status + })); + + // Assume internal error for all other cases + else + reject(new Error({ + type: Error.Type.STREAM_ERROR, + statusCode: Guacamole.Status.Code.INTERNAL_ERROR, + message: 'HTTP ' + xhr.status + })); + + }; + + // Perform upload + xhr.send(chunk); + + }; + + /** + * Handles the recursive upload process. Each time it is called, a + * chunk is made with createChunk(), starting at the offset parameter. + * The chunk is then sent by uploadChunk(), which recursively calls + * this handler until the upload process is either completed and the + * promise is resolved, or fails and the promise is rejected. + * + * @param offset + * The byte at which to begin the chunk. + */ + const uploadHandler = (offset: number): void => { + uploadChunk(createChunk(offset), offset); + }; + + uploadHandler(0); + + return deferred; + + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-credential.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-credential.service.ts new file mode 100644 index 0000000000..fb38668c8a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-credential.service.ts @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Inject, Injectable } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { UserCredentials } from '../types/UserCredentials'; +import { Field } from '../types/Field'; + +/** + * Service which provides functions for working with UserCredentials + */ +@Injectable({ + providedIn: 'root' +}) +export class UserCredentialService { + + /** + * TODO: Document window + */ + private window: Window; + + /** + * TODO: Document + */ + constructor(@Inject(DOCUMENT) private document: Document) { + this.window = this.document.defaultView as Window; + } + + /** + * Generates a query string containing all QUERY_PARAMETER fields from the + * given UserCredentials object, along with their corresponding values. The + * parameter names and values will be appropriately URL-encoded and + * separated by ampersands. + * + * @param userCredentials + * The UserCredentials to retrieve all query parameters from. + * + * @returns + * A string containing all QUERY_PARAMETER fields as name/value pairs + * separated by ampersands, where each name is separated by the value + * by an equals sign. + */ + getQueryParameters(userCredentials: UserCredentials): string { + + // Build list of parameter name/value pairs + const parameters: string[] = []; + userCredentials.expected?.forEach(field => { + + // Only add query parameters + if (field.type !== Field.Type.QUERY_PARAMETER) + return; + + // Pull parameter name and value + const name = field.name; + const value = userCredentials.values?.[name] || ''; + + // Properly encode name/value pair + parameters.push(encodeURIComponent(name) + '=' + encodeURIComponent(value)); + + }); + + // Separate each name/value pair by an ampersand + return parameters.join('&'); + + } + + /** + * Returns a fully-qualified, absolute URL to Guacamole prepopulated with + * any query parameters dictated by the QUERY_PARAMETER fields defined in + * the given UserCredentials. + * + * @param userCredentials + * The UserCredentials to retrieve all query parameters from. + * + * @returns + * A fully-qualified, absolute URL to Guacamole prepopulated with the + * query parameters dictated by the given UserCredentials. + */ + getLink(userCredentials: UserCredentials): string { + + const linkOrigin = this.window.location.origin; + + // Build base link + let link = linkOrigin + + this.window.location.pathname + + '#/'; + + // Add any required parameters + const params = this.getQueryParameters(userCredentials); + if (params) + link += '?' + params; + + return link; + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-group.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-group.service.ts new file mode 100644 index 0000000000..ec4475c551 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user-group.service.ts @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable, tap } from 'rxjs'; +import { UserGroup } from '../types/UserGroup'; +import { DirectoryPatch } from '../types/DirectoryPatch'; +import { DirectoryPatchResponse } from '../types/DirectoryPatchResponse'; + +/** + * Service for operating on user groups via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class UserGroupService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get the list of user groups, + * returning an observable that provides an array of @link{UserGroup} objects if + * successful. + * + * @param dataSource + * The unique identifier of the data source containing the user groups + * to be retrieved. This identifier corresponds to an + * AuthenticationProvider within the Guacamole web application. + * + * @param permissionTypes + * The set of permissions to filter with. A user group must have one or + * more of these permissions for a user group to appear in the result. + * If null, no filtering will be performed. Valid values are listed + * within PermissionSet.ObjectType. + * + * @returns + * An observable which will emit a map of @link{UserGroup} objects + * where each key is the identifier of the corresponding user group. + */ + getUserGroups(dataSource: string, permissionTypes?: string[]): Observable> { + + // Add permission filter if specified + let httpParameters = new HttpParams(); + if (permissionTypes) + httpParameters = httpParameters.appendAll({permission: permissionTypes}); + + // Retrieve user groups + // TODO: cache: cacheService.users, + return this.http.get>( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups', + {params: httpParameters} + ); + + } + + /** + * Makes a request to the REST API to get the user group having the given + * identifier, returning an observable that provides the corresponding + * @link{UserGroup} if successful. + * + * @param dataSource + * The unique identifier of the data source containing the user group to + * be retrieved. This identifier corresponds to an + * AuthenticationProvider within the Guacamole web application. + * + * @param identifier + * The identifier of the user group to retrieve. + * + * @returns + * An observable which will emit a @link{UserGroup} upon success. + */ + getUserGroup(dataSource: string, identifier: string): Observable { + + // Retrieve user group + // TODO cache : cacheService.users, + return this.http.get( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(identifier) + ); + + } + + /** + * Makes a request to the REST API to delete a user group, returning an observable + * that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user group to + * be deleted. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param userGroup + * The user group to delete. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * delete operation is successful. + */ + deleteUserGroup(dataSource: string, userGroup: UserGroup): Observable { + + // Delete user group + return this.http.delete( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(userGroup.identifier!) + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + + } + + /** + * Makes a request to the REST API to create a user group, returning an observable + * that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source in which the user group + * should be created. This identifier corresponds to an + * AuthenticationProvider within the Guacamole web application. + * + * @param userGroup + * The user group to create. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * create operation is successful. + */ + createUserGroup(dataSource: string, userGroup: UserGroup): Observable { + + // Create user group + return this.http.post( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups', + userGroup + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + /** + * Makes a request to the REST API to save a user group, returning an observable + * that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user group to + * be updated. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param userGroup + * The user group to update. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * save operation is successful. + */ + saveUserGroup(dataSource: string, userGroup: UserGroup): Observable { + + // Update user group + return this.http.put( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups/' + encodeURIComponent(userGroup.identifier!), + userGroup + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + /** + * Makes a request to the REST API to apply a supplied list of user group + * patches, returning an observable that can be used for processing the results + * of the call. + * + * This operation is atomic - if any errors are encountered during the + * connection patching process, the entire request will fail, and no + * changes will be persisted. + * + * @param dataSource + * The identifier of the data source associated with the user groups to + * be patched. + * + * @param patches + * An array of patches to apply. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * patch operation is successful. + */ + patchUserGroups(dataSource: string, patches: DirectoryPatch[]): Observable { + + // Make the PATCH request + return this.http.patch( + 'api/session/data/' + encodeURIComponent(dataSource) + '/userGroups', + patches + ) + + // Clear the cache + .pipe(tap(patchResponse => { + // TODO: cacheService.users.removeAll(); + return patchResponse; + })); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user.service.ts new file mode 100644 index 0000000000..0f6cde36dd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/user.service.ts @@ -0,0 +1,256 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable, tap } from 'rxjs'; +import { User } from '../types/User'; +import { UserPasswordUpdate } from '../types/UserPasswordUpdate'; +import { DirectoryPatch } from '../types/DirectoryPatch'; +import { DirectoryPatchResponse } from '../types/DirectoryPatchResponse'; + +/** + * Service for operating on users via the REST API. + */ +@Injectable({ + providedIn: 'root' +}) +export class UserService { + + /** + * Inject required services. + */ + constructor(private http: HttpClient) { + } + + /** + * Makes a request to the REST API to get the list of users, + * returning an Observable that provides an object of User objects if + * successful. + * + * @param dataSource + * The unique identifier of the data source containing the users to be + * retrieved. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param permissionTypes + * The set of permissions to filter with. A user must have one or more + * of these permissions for a user to appear in the result. + * If null, no filtering will be performed. Valid values are listed + * within PermissionSet.ObjectType. + * + * @returns An Observable that will emit an object of User objects + * where each key is the identifier (username) of the corresponding user. + */ + getUsers(dataSource: string, permissionTypes?: string[]): Observable> { + const httpParameters = new HttpParams(); + + // Add permission filter if specified + if (permissionTypes) { + httpParameters.appendAll({permission: permissionTypes}); + } + + // Retrieve users + // TODO: cache : cacheService.users, + return this.http.get>(`api/session/data/${encodeURIComponent(dataSource)}/users`, {params: httpParameters}); + } + + + /** + * Makes a request to the REST API to get the user having the given + * username, returning an observable that provides the corresponding + * @link{User} if successful. + * + * @param dataSource + * The unique identifier of the data source containing the user to be + * retrieved. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param username + * The username of the user to retrieve. + * + * @returns + * An observable which will emit a @link{User} upon success. + */ + getUser(dataSource: string, username: string): Observable { + + // Retrieve user + // TODO: cache: cacheService.users, + return this.http.get('api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username)); + + } + + /** + * Makes a request to the REST API to delete a user, returning an observable + * that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user to be + * deleted. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param user + * The user to delete. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * delete operation is successful. + */ + deleteUser(dataSource: string, user: User): Observable { + + // Delete user + return this.http.delete('api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(user.username)) + + // Clear the cache + .pipe(tap(() => { + // TODO cacheService.users.removeAll(); + })); + + + } + + /** + * Makes a request to the REST API to create a user, returning an observable + * that can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source in which the user should be + * created. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param user + * The user to create. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * create operation is successful. + */ + createUser(dataSource: string, user: User): Observable { + + // Create user + return this.http.post('api/session/data/' + encodeURIComponent(dataSource) + '/users', user) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + /** + * Makes a request to the REST API to save a user, returning an observable that + * can be used for processing the results of the call. + * + * @param dataSource + * The unique identifier of the data source containing the user to be + * updated. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param user + * The user to update. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * save operation is successful. + */ + saveUser(dataSource: string, user: User): Observable { + + // Update user + return this.http.put('api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(user.username), user) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + /** + * Makes a request to the REST API to update the password for a user, + * returning an observable that can be used for processing the results of the call. + * + * @param {String} dataSource + * The unique identifier of the data source containing the user to be + * updated. This identifier corresponds to an AuthenticationProvider + * within the Guacamole web application. + * + * @param {String} username + * The username of the user to update. + * + * @param {String} oldPassword + * The exiting password of the user to update. + * + * @param {String} newPassword + * The new password of the user to update. + * + * @returns {Promise} + * An observable for the HTTP call which will succeed if and only if the + * password update operation is successful. + */ + updateUserPassword(dataSource: string, username: string, oldPassword: string, newPassword: string): Observable { + + // Update user password + return this.http.put( + 'api/session/data/' + encodeURIComponent(dataSource) + '/users/' + encodeURIComponent(username) + '/password', + new UserPasswordUpdate({ + oldPassword: oldPassword, + newPassword: newPassword + }) + ) + + // Clear the cache + .pipe(tap(() => { + // TODO: cacheService.users.removeAll(); + })); + + } + + + /** + * Makes a request to the REST API to apply a supplied list of user patches, + * returning an observable that can be used for processing the results of the + * call. + * + * This operation is atomic - if any errors are encountered during the + * connection patching process, the entire request will fail, and no + * changes will be persisted. + * + * @param dataSource + * The identifier of the data source associated with the users to be + * patched. + * + * @param patches + * An array of patches to apply. + * + * @returns + * An observable for the HTTP call which will succeed if and only if the + * patch operation is successful. + */ + patchUsers(dataSource: string, patches: DirectoryPatch[]): Observable { + + // Make the PATCH request + return this.http.patch('api/session/data/' + encodeURIComponent(dataSource) + '/users', patches) + + // Clear the cache + .pipe(tap(patchResponse => { + // TODO: cacheService.users.removeAll(); + })); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActiveConnection.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActiveConnection.ts new file mode 100644 index 0000000000..1e320b3ca7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActiveConnection.ts @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing the data + * associated with an active connection. Each active connection is + * effectively a pairing of a connection and the user currently using it, + * along with other information. + */ +export class ActiveConnection { + + /** + * The identifier which uniquely identifies this specific active + * connection. + */ + identifier?: string; + + /** + * The identifier of the connection associated with this active + * connection. + */ + connectionIdentifier?: string; + + /** + * The time that the connection began, in seconds since + * 1970-01-01 00:00:00 UTC, if known. + */ + startDate?: number; + + /** + * The remote host that initiated the connection, if known. + */ + remoteHost?: string; + + /** + * The username of the user associated with the connection, if known. + */ + username?: string; + + /** + * Whether this active connection may be connected to, just as a + * normal connection. + */ + connectable?: boolean; + + /** + * Creates a new ActiveConnection object. + * + * @param template + * The object whose properties should be copied within the new + * ActiveConnection. + */ + constructor(template: Partial = {}) { + this.identifier = template.identifier; + this.connectionIdentifier = template.connectionIdentifier; + this.startDate = template.startDate; + this.remoteHost = template.remoteHost; + this.username = template.username; + this.connectable = template.connectable; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActivityLog.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActivityLog.ts new file mode 100644 index 0000000000..fc0541fb42 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ActivityLog.ts @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TranslatableMessage } from './TranslatableMessage'; + +/** + * Returned by REST API calls when representing a log or + * recording associated with a connection's usage history, such as a + * session recording or typescript. + */ +export class ActivityLog { + + /** + * The type of this ActivityLog. + */ + type?: string; + + /** + * A human-readable description of this log. + */ + description?: TranslatableMessage; + + /** + * Creates a new ActivityLog object. + * + * @param template + * The object whose properties should be copied within the new + * ActivityLog. + */ + constructor(template: Partial = {}) { + this.type = template.type; + this.description = template.description; + } + + /** + * All possible types of ActivityLog. + */ + static Type = { + /** + * A Guacamole session recording in the form of a Guacamole protocol + * dump. + */ + GUACAMOLE_SESSION_RECORDING: 'GUACAMOLE_SESSION_RECORDING', + + /** + * A text log from a server-side process, such as the Guacamole web + * application or guacd. + */ + SERVER_LOG: 'SERVER_LOG', + + /** + * A text session recording in the form of a standard typescript. + */ + TYPESCRIPT: 'TYPESCRIPT', + + /** + * The timing file related to a typescript. + */ + TYPESCRIPT_TIMING: 'TYPESCRIPT_TIMING' + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Connection.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Connection.ts new file mode 100644 index 0000000000..c18629ef34 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Connection.ts @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SharingProfile } from './SharingProfile'; +import { Optional } from '../../util/utility-types'; + +/** + * Returned by REST API calls when representing the data + * associated with a connection. + */ +export class Connection { + + /** + * The unique identifier associated with this connection. + */ + identifier?: string; + + /** + * The unique identifier of the connection group that contains this + * connection. + */ + parentIdentifier?: string; + + /** + * The human-readable name of this connection, which is not necessarily + * unique. + */ + name?: string; + + /** + * The name of the protocol associated with this connection, such as + * "vnc" or "rdp". + */ + protocol: string; + + /** + * Connection configuration parameters, as dictated by the protocol in + * use, arranged as name/value pairs. This information may not be + * available until directly queried. If this information is + * unavailable, this property will be null or undefined. + */ + parameters?: Record; + + /** + * Arbitrary name/value pairs which further describe this connection. + * The semantics and validity of these attributes are dictated by the + * extension which defines them. + */ + attributes: Record; + + /** + * The count of currently active connections using this connection. + * This field will be returned from the REST API during a get + * operation, but manually setting this field will have no effect. + */ + activeConnections?: number; + + /** + * An array of all associated sharing profiles, if known. This property + * may be null or undefined if sharing profiles have not been queried, + * and thus the sharing profiles are unknown. + */ + sharingProfiles?: SharingProfile[]; + + /** + * The time that this connection was last used, in milliseconds since + * 1970-01-01 00:00:00 UTC. If this information is unknown or + * unavailable, this will be null. + */ + lastActive?: number; + + /** + * Creates a new Connection object. + * + * @param template + * The object whose properties should be copied within the new + * Connection. + */ + constructor(template: Optional) { + this.identifier = template.identifier; + this.parentIdentifier = template.parentIdentifier; + this.name = template.name; + this.protocol = template.protocol; + this.parameters = template.parameters; + this.attributes = template.attributes || {}; + this.activeConnections = template.activeConnections; + this.sharingProfiles = template.sharingProfiles; + this.lastActive = template.lastActive; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts new file mode 100644 index 0000000000..6a6bc4ceef --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Connection } from './Connection'; +import { Optional } from '../../util/utility-types'; + +/** + * Returned by REST API calls when representing the data + * associated with a connection group. + */ +export class ConnectionGroup { + + /** + * The unique identifier associated with this connection group. + */ + identifier: string; + + /** + * The unique identifier of the connection group that contains this + * connection group. + * + * @default ConnectionGroup.ROOT_IDENTIFIER + */ + parentIdentifier: string; + + /** + * The human-readable name of this connection group, which is not + * necessarily unique. + */ + name: string; + + /** + * The type of this connection group, which may be either + * ConnectionGroup.Type.ORGANIZATIONAL or + * ConnectionGroup.Type.BALANCING. + * + * @default ConnectionGroup.Type.ORGANIZATIONAL + */ + type: string; + + /** + * An array of all child connections, if known. This property may be + * null or undefined if children have not been queried, and thus the + * child connections are unknown. + */ + childConnections: Connection[] | null | undefined; + + /** + * An array of all child connection groups, if known. This property may + * be null or undefined if children have not been queried, and thus the + * child connection groups are unknown. + */ + childConnectionGroups: ConnectionGroup[] | null | undefined; + + /** + * Arbitrary name/value pairs which further describe this connection + * group. The semantics and validity of these attributes are dictated + * by the extension which defines them. + */ + attributes: Record; + + /** + * The count of currently active connections using this connection + * group. This field will be returned from the REST API during a get + * operation, but manually setting this field will have no effect. + */ + activeConnections: number; + + /** + * Creates a new ConnectionGroup object. + * + * @param template + * The object whose properties should be copied within the new + * ConnectionGroup. + */ + constructor(template: Optional) { + this.identifier = template.identifier; + this.parentIdentifier = template.parentIdentifier || ConnectionGroup.ROOT_IDENTIFIER; + this.name = template.name; + this.type = template.type || ConnectionGroup.Type.ORGANIZATIONAL; + this.childConnections = template.childConnections; + this.childConnectionGroups = template.childConnectionGroups; + this.attributes = template.attributes || {}; + this.activeConnections = template.activeConnections; + } + + /** + * The reserved identifier which always represents the root connection + * group. + */ + static ROOT_IDENTIFIER: string = 'ROOT'; + + /** + * All valid connection group types. + */ + static Type = { + + /** + * The type string associated with balancing connection groups. + */ + BALANCING: 'BALANCING', + + /** + * The type string associated with organizational connection groups. + */ + ORGANIZATIONAL: 'ORGANIZATIONAL' + + }; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionHistoryEntry.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionHistoryEntry.ts new file mode 100644 index 0000000000..a8cdd8f682 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionHistoryEntry.ts @@ -0,0 +1,213 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ActivityLog } from './ActivityLog'; + +export declare namespace ConnectionHistoryEntry { + + /** + * Value/unit pair representing the length of time that a connection was + * used. + */ + type Duration = typeof ConnectionHistoryEntry.Duration.prototype; +} + +/** + * Returned by REST API calls when representing the data + * associated with an entry in a connection's usage history. Each history + * entry represents the time at which a particular started using a + * connection and, if applicable, the time that usage stopped. + */ +export class ConnectionHistoryEntry { + + /** + * An arbitrary identifier that uniquely identifies this record + * relative to other records in the same set, or null if no such unique + * identifier exists. + */ + identifier?: string; + + /** + * A UUID that uniquely identifies this record, or null if no such + * unique identifier exists. + */ + uuid?: string; + + /** + * The identifier of the connection associated with this history entry. + */ + connectionIdentifier?: string; + + /** + * The name of the connection associated with this history entry. + */ + connectionName?: string; + + /** + * The time that usage began, in milliseconds since 1970-01-01 00:00:00 UTC. + */ + startDate?: number; + + /** + * The time that usage ended, in milliseconds since 1970-01-01 00:00:00 UTC. + * The absence of an endDate does NOT necessarily indicate that the + * connection is still in use, particularly if the server was shutdown + * or restarted before the history entry could be updated. To determine + * whether a connection is still active, check the active property of + * this history entry. + */ + endDate?: number; + + /** + * The remote host that initiated this connection, if known. + */ + remoteHost?: number; + + /** + * The username of the user associated with this particular usage of + * the connection. + */ + username?: string; + + /** + * Whether this usage of the connection is still active. Note that this + *? is the only accurate way to check for connection activity; the + * absence of endDate does not necessarily imply the connection is + * active, as the history entry may simply be incomplete. + */ + active?: boolean; + + /** + * Arbitrary name/value pairs which further describe this history + * entry. The semantics and validity of these attributes are dictated + * by the extension which defines them. + */ + attributes?: Record; + + /** + * All logs associated and accessible via this record, stored by their + * corresponding unique names. + */ + logs?: Record; + + /** + * Creates a new ConnectionHistoryEntry. + * + * @param template + * The object whose properties should be copied within the new + * ConnectionHistoryEntry. + */ + constructor(template: Partial = {}) { + this.identifier = template.identifier; + this.uuid = template.uuid; + this.connectionIdentifier = template.connectionIdentifier; + this.connectionName = template.connectionName; + this.startDate = template.startDate; + this.endDate = template.endDate; + this.remoteHost = template.remoteHost; + this.username = template.username; + this.active = template.active; + this.attributes = template.attributes; + this.logs = template.logs; + } + + /** + * All possible predicates for sorting ConnectionHistoryEntry objects using + * the REST API. By default, each predicate indicates ascending order. To + * indicate descending order, add "-" to the beginning of the predicate. + */ + static SortPredicate = { + /** + * The date and time that the connection associated with the history + * entry began (connected). + */ + START_DATE: 'startDate' + + }; + + /** + * Value/unit pair representing the length of time that a connection was + * used. + */ + static Duration = class Duration { + + /** + * The number of seconds (or minutes, or hours, etc.) that the + * connection was used. The units associated with this value are + * represented by the unit property. + */ + value: number; + + /** + * The units associated with the value of this duration. Valid + * units are 'second', 'minute', 'hour', and 'day'. + */ + unit: string; + + /** + * Creates a new Duration. + * + * @param milliseconds + * The number of milliseconds that the associated connection was used. + */ + constructor(milliseconds: number) { + + /** + * The provided duration in seconds. + */ + const seconds = milliseconds / 1000; + + /** + * Rounds the given value to the nearest tenth. + * + * @param value The value to round. + * @returns The given value, rounded to the nearest tenth. + */ + const round = (value: number): number => { + return Math.round(value * 10) / 10; + } + + // Days + if (seconds >= 86400) { + this.value = round(seconds / 86400); + this.unit = 'day'; + } + + // Hours + else if (seconds >= 3600) { + this.value = round(seconds / 3600); + this.unit = 'hour'; + } + + // Minutes + else if (seconds >= 60) { + this.value = round(seconds / 60); + this.unit = 'minute'; + } + + // Seconds + else { + this.value = round(seconds); + this.unit = 'second'; + } + } + + }; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatch.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatch.ts new file mode 100644 index 0000000000..e0c78b3436 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatch.ts @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Consumed by REST API calls when representing changes to an + * arbitrary set of directory-based objects. + */ +export class DirectoryPatch { + + /** + * The operation to apply to the objects indicated by the path. Valid + * operation values are defined within DirectoryPatch.Operation. + */ + op?: DirectoryPatch.Operation; + + /** + * The path of the objects to modify. For creation of new objects, this + * should be "/". Otherwise, it should be "/{identifier}", specifying + * the identifier of the existing object being modified. + * + * @default '/' + */ + path: string; + + /** + * The object being added/replaced, or undefined if deleting. + */ + value?: TData; + + /** + * Creates a new DirectoryPatch. + * + * @param template + * The object whose properties should be copied within the new + * DirectoryPatch. + */ + constructor(template: Partial> = {}) { + this.op = template.op; + this.path = template.path || '/'; + this.value = template.value; + } + +} + +export namespace DirectoryPatch { + + /** + * All valid patch operations for directory-based objects. + */ + export enum Operation { + + /** + * Adds the specified object to the relation. + */ + ADD = 'add', + + /** + * Replaces (updates) the specified object from the relation. + */ + REPLACE = 'replace', + + /** + * Removes the specified object from the relation. + */ + REMOVE = 'remove' + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchOutcome.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchOutcome.ts new file mode 100644 index 0000000000..da75652938 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchOutcome.ts @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { DirectoryPatch } from './DirectoryPatch'; +import { TranslatableMessage } from './TranslatableMessage'; + +/** + * Returned by a PATCH request to a directory REST API, + * representing the outcome associated with a particular patch in the + * request. This object can indicate either a successful or unsuccessful + * response. The error field is only meaningful for unsuccessful patches. + */ +export class DirectoryPatchOutcome { + + /** + * The operation to apply to the objects indicated by the path. Valid + * operation values are defined within DirectoryPatch.Operation. + */ + op?: DirectoryPatch.Operation; + + /** + * The path of the object operated on by the corresponding patch in the + * request. + */ + path?: string; + + /** + * The identifier of the object operated on by the corresponding patch + * in the request. If the object was newly created and the PATCH request + * did not fail, this will be the identifier of the newly created object. + */ + identifier?: string; + + /** + * The error message associated with the failure, if the patch failed to + * apply. + */ + error?: TranslatableMessage; + + /** + * Creates a new DirectoryPatchOutcome. + * + * @param template + * The object whose properties should be copied within the new + * DirectoryPatchOutcome. + */ + constructor(template: Partial = {}) { + this.op = template.op; + this.path = template.path; + this.identifier = template.identifier; + this.error = template.error; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchResponse.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchResponse.ts new file mode 100644 index 0000000000..d4d1e0eeb6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/DirectoryPatchResponse.ts @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { DirectoryPatchOutcome } from './DirectoryPatchOutcome'; + +/** + * Returned by a PATCH request to a directory REST API, + * representing the successful response to a patch request. + */ +export class DirectoryPatchResponse { + + /** + * An outcome for each patch in the corresponding patch request. + */ + patches?: DirectoryPatchOutcome[]; + + /** + * Creates a new DirectoryPatchResponse. + * + * @param template + * The object whose properties should be copied within the new + * DirectoryPatchResponse. + */ + constructor(template: DirectoryPatchResponse = {}) { + this.patches = template.patches; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Error.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Error.ts new file mode 100644 index 0000000000..12e4c1206d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Error.ts @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Field } from './Field'; +import { HttpErrorResponse } from '@angular/common/http'; +import { TranslatableMessage } from './TranslatableMessage'; +import { DirectoryPatchOutcome } from './DirectoryPatchOutcome'; + +/** + * Returned by REST API calls when an error occurs. + */ +export class Error { + + /** + * A human-readable message describing the error that occurred. + */ + message?: string; + + /** + * A message which can be translated using the translation service, + * consisting of a translation guac-key and optional set of substitution + * variables. + */ + translatableMessage?: TranslatableMessage; + + /** + * The Guacamole protocol status code associated with the error that + * occurred. This is only valid for errors of type STREAM_ERROR. + */ + statusCode?: number | null; + + /** + * The type string defining which values this parameter may contain, + * as well as what properties are applicable. Valid types are listed + * within Error.Type. + * + * @default Error.Type.INTERNAL_ERROR + */ + type: Error.Type; + + /** + * Any parameters which were expected in the original request, or are + * now expected as a result of the original request, if any. If no + * such information is available, this will be undefined. + */ + expected?: Field[]; + + /** + * The outcome for each patch that was submitted as part of the request + * that generated this error, if the request was a directory PATCH + * request. In all other cases, this will be undefined. + */ + patches?: DirectoryPatchOutcome[]; + + /** + * Creates a new Error. + * + * @param template + * The object whose properties should be copied within the new + * Error. + */ + constructor(template: Partial | HttpErrorResponse = {}) { + + if (template instanceof HttpErrorResponse) { + this.message = template.message; + this.statusCode = template.status; + this.type = Error.Type.INTERNAL_ERROR; + return; + } + + this.message = template.message; + this.translatableMessage = template.translatableMessage; + this.statusCode = template.statusCode; + this.type = template.type || Error.Type.INTERNAL_ERROR; + this.expected = template.expected; + this.patches = template.patches; + } +} + +export namespace Error { + + /** + * All valid error types. + */ + export enum Type { + /** + * The requested operation could not be performed because the request + * itself was malformed. + */ + BAD_REQUEST = 'BAD_REQUEST', + + /** + * The credentials provided were invalid. + */ + INVALID_CREDENTIALS = 'INVALID_CREDENTIALS', + + /** + * The credentials provided were not necessarily invalid, but were not + * sufficient to determine validity. + */ + INSUFFICIENT_CREDENTIALS = 'INSUFFICIENT_CREDENTIALS', + + /** + * An internal server error has occurred. + */ + INTERNAL_ERROR = 'INTERNAL_ERROR', + + /** + * An object related to the request does not exist. + */ + NOT_FOUND = 'NOT_FOUND', + + /** + * Permission was denied to perform the requested operation. + */ + PERMISSION_DENIED = 'PERMISSION_DENIED', + + /** + * An error occurred within an intercepted stream, terminating that + * stream. The Guacamole protocol status code of that error will be + * stored within statusCode. + */ + STREAM_ERROR = 'STREAM_ERROR' + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts new file mode 100644 index 0000000000..8ebc47d3ca --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TranslatableMessage } from './TranslatableMessage'; + +/** + * The object returned by REST API calls when representing the data + * associated with a field or configuration parameter. + */ +export class Field { + + /** + * The name which uniquely identifies this parameter. + */ + name: string; + + /** + * The type string defining which values this parameter may contain, + * as well as what properties are applicable. Valid types are listed + * within Field.Type. + * + * @default Field.Type.TEXT + */ + type: Field.Type; + + /** + * All possible legal values for this parameter. + */ + options?: string[]; + + /** + * A message which can be translated using the translation service, + * consisting of a translation key and optional set of substitution + * variables. + */ + translatableMessage?: TranslatableMessage; + + /** + * The URL to which the user should be redirected when a field of type + * REDIRECT is displayed. + */ + redirectUrl?: string; + + /** + * Creates a new Field instance. + * + * @param template + * The object whose properties should be copied within the new + * Field. + */ + constructor(template: { name: string, type?: Field.Type, options?: string[] }) { + this.name = template.name; + this.type = template.type || Field.Type.TEXT; + this.options = template.options; + } + +} + +export namespace Field { + + /** + * All valid field types. + */ + export enum Type { + /** + * The type string associated with parameters that may contain a single + * line of arbitrary text. + */ + TEXT = 'TEXT', + + /** + * The type string associated with parameters that may contain an email + * address. + */ + EMAIL = 'EMAIL', + + /** + * The type string associated with parameters that may contain an + * arbitrary string, where that string represents the username of the + * user authenticating with the remote desktop service. + */ + USERNAME = 'USERNAME', + + /** + * The type string associated with parameters that may contain an + * arbitrary string, where that string represents the password of the + * user authenticating with the remote desktop service. + */ + PASSWORD = 'PASSWORD', + + /** + * The type string associated with parameters that may contain only + * numeric values. + */ + NUMERIC = 'NUMERIC', + + /** + * The type string associated with parameters that may contain only a + * single possible value, where that value enables the parameter's + * effect. It is assumed that each BOOLEAN field will provide exactly + * one possible value (option), which will be the value if that field + * is true. + */ + BOOLEAN = 'BOOLEAN', + + /** + * The type string associated with parameters that may contain a + * strictly-defined set of possible values. + */ + ENUM = 'ENUM', + + /** + * The type string associated with parameters that may contain any + * number of lines of arbitrary text. + */ + MULTILINE = 'MULTILINE', + + /** + * Field type which allows selection of languages. The languages + * displayed are the set of languages supported by the Guacamole web + * application. Legal values are valid language IDs, as dictated by + * the filenames of Guacamole's available translations. + */ + LANGUAGE = 'LANGUAGE', + + /** + * The type string associated with parameters that may contain timezone + * IDs. Valid timezone IDs are dictated by Java= + * http=//docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#getAvailableIDs%28%29 + */ + TIMEZONE = 'TIMEZONE', + + /** + * The type string associated with parameters that may contain dates. + * The format of the date is standardized as YYYY-MM-DD, zero-padded. + */ + DATE = 'DATE', + + /** + * The type string associated with parameters that may contain times. + * The format of the time is stnadardized as HH:MM:DD, zero-padded, + * 24-hour. + */ + TIME = 'TIME', + + /** + * An HTTP query parameter which is expected to be embedded in the URL + * given to a user. + */ + QUERY_PARAMETER = 'QUERY_PARAMETER', + + /** + * The type string associated with parameters that may contain color + * schemes accepted by the Guacamole server terminal emulator and + * protocols which leverage it. + */ + TERMINAL_COLOR_SCHEME = 'TERMINAL_COLOR_SCHEME', + + /** + * Field type that supports redirecting the client browser to another + * URL. + */ + REDIRECT = 'REDIRECT' + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts new file mode 100644 index 0000000000..5bc602d313 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Field } from "./Field"; + +/** + * The object returned by REST API calls when representing the data + * associated with a form or set of configuration parameters. + */ +export class Form { + /** + * The name which uniquely identifies this form, or null if this form + * has no name. + */ + name?: string; + + /** + * All fields contained within this form. + */ + fields: Field[]; + + /** + * Create a new Form. + * + * @param template + * The object whose properties should be copied within the new + * Form. + */ + constructor(template: Partial
      = {}) { + this.name = template.name; + this.fields = template.fields || []; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts new file mode 100644 index 0000000000..17e83de8f1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts @@ -0,0 +1,239 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { PermissionSet } from './PermissionSet'; + +/** + * Alternative view of a @link{PermissionSet} which allows manipulation of + * each permission through the setting (or retrieval) of boolean property + * values. + */ +export class PermissionFlagSet { + + /** + * The granted state of each system permission, as a map of system + * permission type string to boolean value. A particular permission is + * granted if its corresponding boolean value is set to true. Valid + * permission type strings are defined within + * PermissionSet.SystemPermissionType. Permissions which are not + * granted may be set to false, but this is not required. + */ + systemPermissions: Record; + + /** + * The granted state of each permission for each connection, as a map + * of object permission type string to permission map. The permission + * map is, in turn, a map of connection identifier to boolean value. A + * particular permission is granted if its corresponding boolean value + * is set to true. Valid permission type strings are defined within + * PermissionSet.ObjectPermissionType. Permissions which are not + * granted may be set to false, but this is not required. + */ + connectionPermissions: Record>; + + /** + * The granted state of each permission for each connection group, as a + * map of object permission type string to permission map. The + * permission map is, in turn, a map of connection group identifier to + * boolean value. A particular permission is granted if its + * corresponding boolean value is set to true. Valid permission type + * strings are defined within PermissionSet.ObjectPermissionType. + * Permissions which are not granted may be set to false, but this is + * not required. + */ + connectionGroupPermissions: Record>; + + /** + * The granted state of each permission for each sharing profile, as a + * map of object permission type string to permission map. The + * permission map is, in turn, a map of sharing profile identifier to + * boolean value. A particular permission is granted if its + * corresponding boolean value is set to true. Valid permission type + * strings are defined within PermissionSet.ObjectPermissionType. + * Permissions which are not granted may be set to false, but this is + * not required. + */ + sharingProfilePermissions: Record>; + + /** + * The granted state of each permission for each active connection, as + * a map of object permission type string to permission map. The + * permission map is, in turn, a map of active connection identifier to + * boolean value. A particular permission is granted if its + * corresponding boolean value is set to true. Valid permission type + * strings are defined within PermissionSet.ObjectPermissionType. + * Permissions which are not granted may be set to false, but this is + * not required. + */ + activeConnectionPermissions: Record>; + + /** + * The granted state of each permission for each user, as a map of + * object permission type string to permission map. The permission map + * is, in turn, a map of username to boolean value. A particular + * permission is granted if its corresponding boolean value is set to + * true. Valid permission type strings are defined within + * PermissionSet.ObjectPermissionType. Permissions which are not + * granted may be set to false, but this is not required. + */ + userPermissions: Record>; + + /** + * The granted state of each permission for each user group, as a map of + * object permission type string to permission map. The permission map + * is, in turn, a map of group identifier to boolean value. A particular + * permission is granted if its corresponding boolean value is set to + * true. Valid permission type strings are defined within + * PermissionSet.ObjectPermissionType. Permissions which are not + * granted may be set to false, but this is not required. + */ + userGroupPermissions: Record>; + + /** + * Creates a new PermissionFlagSet. + * + * @param template + * The object whose properties should be copied within the new + * PermissionFlagSet. + */ + constructor(template: Partial = {}) { + + this.systemPermissions = template.systemPermissions || {}; + + this.connectionPermissions = template.connectionPermissions || { + 'READ': {}, + 'UPDATE': {}, + 'DELETE': {}, + 'ADMINISTER': {} + }; + + this.connectionGroupPermissions = template.connectionGroupPermissions || { + 'READ': {}, + 'UPDATE': {}, + 'DELETE': {}, + 'ADMINISTER': {} + }; + + this.sharingProfilePermissions = template.sharingProfilePermissions || { + 'READ': {}, + 'UPDATE': {}, + 'DELETE': {}, + 'ADMINISTER': {} + }; + + this.activeConnectionPermissions = template.activeConnectionPermissions || { + 'READ': {}, + 'UPDATE': {}, + 'DELETE': {}, + 'ADMINISTER': {} + }; + + this.userPermissions = template.userPermissions || { + 'READ': {}, + 'UPDATE': {}, + 'DELETE': {}, + 'ADMINISTER': {} + }; + + this.userGroupPermissions = template.userGroupPermissions || { + 'READ': {}, + 'UPDATE': {}, + 'DELETE': {}, + 'ADMINISTER': {} + }; + } + + /** + * Creates a new PermissionFlagSet, populating it with all the permissions + * indicated as granted within the given PermissionSet. + * + * @param permissionSet + * The PermissionSet containing the permissions to be copied into a new + * PermissionFlagSet. + * + * @returns + * A new PermissionFlagSet containing flags representing all granted + * permissions from the given PermissionSet. + */ + static fromPermissionSet(permissionSet: PermissionSet): PermissionFlagSet { + + const permissionFlagSet = new PermissionFlagSet(); + + // Add all granted system permissions + permissionSet.systemPermissions.forEach(function addSystemPermission(type) { + permissionFlagSet.systemPermissions[type] = true; + }); + + // Add all granted connection permissions + PermissionFlagSet.addObjectPermissions(permissionSet.connectionPermissions, permissionFlagSet.connectionPermissions); + + // Add all granted connection group permissions + PermissionFlagSet.addObjectPermissions(permissionSet.connectionGroupPermissions, permissionFlagSet.connectionGroupPermissions); + + // Add all granted sharing profile permissions + PermissionFlagSet.addObjectPermissions(permissionSet.sharingProfilePermissions, permissionFlagSet.sharingProfilePermissions); + + // Add all granted active connection permissions + PermissionFlagSet.addObjectPermissions(permissionSet.activeConnectionPermissions, permissionFlagSet.activeConnectionPermissions); + + // Add all granted user permissions + PermissionFlagSet.addObjectPermissions(permissionSet.userPermissions, permissionFlagSet.userPermissions); + + // Add all granted user group permissions + PermissionFlagSet.addObjectPermissions(permissionSet.userGroupPermissions, permissionFlagSet.userGroupPermissions); + + return permissionFlagSet; + + } + + /** + * Iterates through all permissions in the given permission map, setting + * the corresponding permission flags in the given permission flag map. + * + * @param permMap + * Map of object identifiers to the set of granted permissions. Each + * permission is represented by a string listed within + * PermissionSet.ObjectPermissionType. + * + * @param flagMap + * Map of permission type strings to identifier/flag pairs representing + * whether the permission of that type is granted for the object having + * the associated identifier. + */ + private static addObjectPermissions(permMap: Record, flagMap: Record>): void { + + // For each defined identifier in the permission map + for (let identifier in permMap) { + + // Pull the permission array and loop through each permission + const permissions = permMap[identifier]; + permissions.forEach(function addObjectPermission(type) { + + // Get identifier/flag mapping, creating first if necessary + const objectFlags = flagMap[type] = flagMap[type] || {}; + + // Set flag for current permission + objectFlags[identifier] = true; + + }); + + } + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionPatch.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionPatch.ts new file mode 100644 index 0000000000..574ddd226d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionPatch.ts @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing changes to the + * permissions granted to a specific user. + */ +export class PermissionPatch { + + /** + * The operation to apply to the permissions indicated by the path. + * Valid operation values are defined within PermissionPatch.Operation. + */ + op?: PermissionPatch.Operation; + + /** + * The path of the permissions to modify. Depending on the type of the + * permission, this will be either "/connectionPermissions/ID", + * "/connectionGroupPermissions/ID", "/userPermissions/ID", or + * "/systemPermissions", where "ID" is the identifier of the object + * to which the permissions apply, if any. + */ + path?: string; + + /** + * The permissions being added or removed. If the permission applies to + * an object, such as a connection or connection group, this will be a + * value from PermissionSet.ObjectPermissionType. If the permission + * applies to the system as a whole (the path is "/systemPermissions"), + * this will be a value from PermissionSet.SystemPermissionType. + */ + value?: string; + + /** + * Creates a new PermissionPatch. + * + * @param template + * The object whose properties should be copied within the new + * PermissionPatch. + */ + constructor(template: PermissionPatch = {}) { + this.op = template.op; + this.path = template.path; + this.value = template.value; + } + +} + +export namespace PermissionPatch { + + /** + * All valid patch operations for permissions. Currently, only add and + * remove are supported. + */ + export enum Operation { + + /** + * Adds (grants) the specified permission. + */ + ADD = 'add', + + /** + * Removes (revokes) the specified permission. + */ + REMOVE = 'remove' + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts new file mode 100644 index 0000000000..abe74a9fee --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts @@ -0,0 +1,804 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing the permissions + * granted to a specific user. + */ +export class PermissionSet { + + /** + * Map of connection identifiers to the corresponding array of granted + * permissions. Each permission is represented by a string listed + * within PermissionSet.ObjectPermissionType. + */ + connectionPermissions: Record; + + /** + * Map of connection group identifiers to the corresponding array of + * granted permissions. Each permission is represented by a string + * listed within PermissionSet.ObjectPermissionType. + */ + connectionGroupPermissions: Record; + + /** + * Map of sharing profile identifiers to the corresponding array of + * granted permissions. Each permission is represented by a string + * listed within PermissionSet.ObjectPermissionType. + */ + sharingProfilePermissions: Record; + + /** + * Map of active connection identifiers to the corresponding array of + * granted permissions. Each permission is represented by a string + * listed within PermissionSet.ObjectPermissionType. + */ + activeConnectionPermissions: Record; + + /** + * Map of user identifiers to the corresponding array of granted + * permissions. Each permission is represented by a string listed + * within PermissionSet.ObjectPermissionType. + */ + userPermissions: Record; + + /** + * Map of user group identifiers to the corresponding array of granted + * permissions. Each permission is represented by a string listed + * within PermissionSet.ObjectPermissionType. + */ + userGroupPermissions: Record; + + /** + * Array of granted system permissions. Each permission is represented + * by a string listed within PermissionSet.SystemPermissionType. + */ + systemPermissions: string[]; + + /** + * Creates a new PermissionSet. + * + * @param template + * The object whose properties should be copied within the new + * PermissionSet. + */ + constructor(template: Partial = {}) { + this.connectionPermissions = template.connectionPermissions || {}; + this.connectionGroupPermissions = template.connectionGroupPermissions || {}; + this.sharingProfilePermissions = template.sharingProfilePermissions || {}; + this.activeConnectionPermissions = template.activeConnectionPermissions || {}; + this.userPermissions = template.userPermissions || {}; + this.userGroupPermissions = template.userGroupPermissions || {}; + this.systemPermissions = template.systemPermissions || []; + } + + /** + * Returns whether the given permission is granted for at least one + * arbitrary object, regardless of ID. + * + * @param permMap + * The permission map to check, where each entry maps an object + * identifer to the array of granted permissions. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + private static containsPermission(permMap: Record, type: PermissionSet.ObjectPermissionType): boolean { + + // Search all identifiers for given permission + for (let identifier in permMap) { + + // If permission is granted, then no further searching is necessary + if (permMap[identifier].indexOf(type) !== -1) + return true; + + } + + // No such permission exists + return false; + } + + /** + * Returns whether the given permission is granted for the arbitrary + * object having the given ID. If no ID is given, this function determines + * whether the permission is granted at all for any such arbitrary object. + * + * @param permMap + * The permission map to check, where each entry maps an object + * identifier to the array of granted permissions. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the object to which the permission applies. + * + * @returns {Boolean} + * true if the permission is present (granted), false otherwise. + */ + private static hasPermission(permMap: Record, type: PermissionSet.ObjectPermissionType, identifier?: string): boolean { + + // No permission if no permission map at all + if (!permMap) + return false; + + // If no identifier given, search ignoring the identifier + if (!identifier) + return PermissionSet.containsPermission(permMap, type); + + // If identifier not present at all, there are no such permissions + if (!(identifier in permMap)) + return false; + + return permMap[identifier].indexOf(type) !== -1; + + } + + /** + * Returns whether the given permission is granted for the connection + * having the given ID. + * + * @param permSet + * The permission set to check. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the connection to which the permission applies. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + static hasConnectionPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier?: string): boolean { + return PermissionSet.hasPermission(permSet.connectionPermissions, type, identifier); + } + + /** + * Returns whether the given permission is granted for the connection group + * having the given ID. + * + * @param permSet + * The permission set to check. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the connection group to which the permission + * applies. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + static hasConnectionGroupPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier?: string): boolean { + return PermissionSet.hasPermission(permSet.connectionGroupPermissions, type, identifier); + } + + /** + * Returns whether the given permission is granted for the sharing profile + * having the given ID. + * + * @param permSet + * The permission set to check. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the sharing profile to which the permission + * applies. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + static hasSharingProfilePermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier?: string): boolean { + return PermissionSet.hasPermission(permSet.sharingProfilePermissions, type, identifier); + } + + /** + * Returns whether the given permission is granted for the active + * connection having the given ID. + * + * @param permSet + * The permission set to check. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the active connection to which the permission + * applies. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + static hasActiveConnectionPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier?: string): boolean { + return PermissionSet.hasPermission(permSet.activeConnectionPermissions, type, identifier); + } + + /** + * Returns whether the given permission is granted for the user having the + * given ID. + * + * @param permSet + * The permission set to check. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user to which the permission applies. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + static hasUserPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier?: string): boolean { + return PermissionSet.hasPermission(permSet.userPermissions, type, identifier); + } + + /** + * Returns whether the given permission is granted for the user group having + * the given identifier. + * + * @param permSet + * The permission set to check. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user group to which the permission applies. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + static hasUserGroupPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier?: string): boolean { + return PermissionSet.hasPermission(permSet.userGroupPermissions, type, identifier); + } + + /** + * Returns whether the given permission is granted at the system level. + * + * @param permSet + * The permission set to check. + * + * @param type + * The permission to search for, as defined by + * PermissionSet.SystemPermissionType. + * + * @returns + * true if the permission is present (granted), false otherwise. + */ + static hasSystemPermission(permSet: PermissionSet, type: PermissionSet.SystemPermissionType): boolean { + if (!permSet.systemPermissions) return false; + return permSet.systemPermissions.indexOf(type) !== -1; + } + + /** + * Adds the given system permission to the given permission set, if not + * already present. If the permission is already present, this function has + * no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to add, as defined by + * PermissionSet.SystemPermissionType. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addSystemPermission(permSet: PermissionSet, type: PermissionSet.SystemPermissionType): boolean { + + permSet.systemPermissions = permSet.systemPermissions || []; + + // Add permission, if it doesn't already exist + if (permSet.systemPermissions.indexOf(type) === -1) { + permSet.systemPermissions.push(type); + return true; + } + + // Permission already present + return false; + } + + /** + * Removes the given system permission from the given permission set, if + * present. If the permission is not present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.SystemPermissionType. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeSystemPermission(permSet: PermissionSet, type: PermissionSet.SystemPermissionType): boolean { + + permSet.systemPermissions = permSet.systemPermissions || []; + + // Remove permission, if it exists + const permLocation = permSet.systemPermissions.indexOf(type); + if (permLocation !== -1) { + permSet.systemPermissions.splice(permLocation, 1); + return true; + } + + // Permission not present + return false; + + } + + /** + * Adds the given permission applying to the arbitrary object with the + * given ID to the given permission set, if not already present. If the + * permission is already present, this function has no effect. + * + * @param permMap + * The permission map to modify, where each entry maps an object + * identifier to the array of granted permissions. + * + * @param type + * The permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the arbitrary object to which the permission + * applies. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addObjectPermission(permMap: Record, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + + // Pull array of permissions, creating it if necessary + const permArray = permMap[identifier] = permMap[identifier] || []; + + // Add permission, if it doesn't already exist + if (permArray.indexOf(type) === -1) { + permArray.push(type); + return true; + } + + // Permission already present + return false; + + } + + /** + * Removes the given permission applying to the arbitrary object with the + * given ID from the given permission set, if present. If the permission is + * not present, this function has no effect. + * + * @param permMap + * The permission map to modify, where each entry maps an object + * identifier to the array of granted permissions. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the arbitrary object to which the permission + * applies. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeObjectPermission(permMap: Record, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + + // Pull array of permissions + const permArray = permMap[identifier]; + + // If no permissions present at all, nothing to remove + if (!(identifier in permMap)) + return false; + + // Remove permission, if it exists + const permLocation = permArray.indexOf(type); + if (permLocation !== -1) { + permArray.splice(permLocation, 1); + return true; + } + + // Permission not present + return false; + + } + + /** + * Adds the given connection permission applying to the connection with + * the given ID to the given permission set, if not already present. If the + * permission is already present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the connection to which the permission applies. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addConnectionPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.connectionPermissions = permSet.connectionPermissions || {}; + return PermissionSet.addObjectPermission(permSet.connectionPermissions, type, identifier); + } + + /** + * Removes the given connection permission applying to the connection with + * the given ID from the given permission set, if present. If the + * permission is not present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the connection to which the permission applies. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeConnectionPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.connectionPermissions = permSet.connectionPermissions || {}; + return PermissionSet.removeObjectPermission(permSet.connectionPermissions, type, identifier); + } + + /** + * Adds the given connection group permission applying to the connection + * group with the given ID to the given permission set, if not already + * present. If the permission is already present, this function has no + * effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the connection group to which the permission + * applies. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addConnectionGroupPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.connectionGroupPermissions = permSet.connectionGroupPermissions || {}; + return PermissionSet.addObjectPermission(permSet.connectionGroupPermissions, type, identifier); + } + + /** + * Removes the given connection group permission applying to the connection + * group with the given ID from the given permission set, if present. If + * the permission is not present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the connection group to which the permission + * applies. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeConnectionGroupPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.connectionGroupPermissions = permSet.connectionGroupPermissions || {}; + return PermissionSet.removeObjectPermission(permSet.connectionGroupPermissions, type, identifier); + } + + /** + * Adds the given sharing profile permission applying to the sharing profile + * with the given ID to the given permission set, if not already present. If + * the permission is already present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the sharing profile to which the permission + * applies. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addSharingProfilePermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.sharingProfilePermissions = permSet.sharingProfilePermissions || {}; + return PermissionSet.addObjectPermission(permSet.sharingProfilePermissions, type, identifier); + } + + /** + * Removes the given sharing profile permission applying to the sharing + * profile with the given ID from the given permission set, if present. If + * the permission is not present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the sharing profile to which the permission + * applies. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeSharingProfilePermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.sharingProfilePermissions = permSet.sharingProfilePermissions || {}; + return PermissionSet.removeObjectPermission(permSet.sharingProfilePermissions, type, identifier); + } + + /** + * Adds the given active connection permission applying to the connection + * group with the given ID to the given permission set, if not already + * present. If the permission is already present, this function has no + * effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the active connection to which the permission + * applies. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addActiveConnectionPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.activeConnectionPermissions = permSet.activeConnectionPermissions || {}; + return PermissionSet.addObjectPermission(permSet.activeConnectionPermissions, type, identifier); + } + + /** + * Removes the given active connection permission applying to the + * connection group with the given ID from the given permission set, if + * present. If the permission is not present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the active connection to which the permission + * applies. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeActiveConnectionPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.activeConnectionPermissions = permSet.activeConnectionPermissions || {}; + return PermissionSet.removeObjectPermission(permSet.activeConnectionPermissions, type, identifier); + } + + /** + * Adds the given user permission applying to the user with the given ID to + * the given permission set, if not already present. If the permission is + * already present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user to which the permission applies. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addUserPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.userPermissions = permSet.userPermissions || {}; + return PermissionSet.addObjectPermission(permSet.userPermissions, type, identifier); + } + + /** + * Removes the given user permission applying to the user with the given ID + * from the given permission set, if present. If the permission is not + * present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user to whom the permission applies. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeUserPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.userPermissions = permSet.userPermissions || {}; + return PermissionSet.removeObjectPermission(permSet.userPermissions, type, identifier); + } + + /** + * Adds the given user group permission applying to the user group with the + * given identifier to the given permission set, if not already present. If + * the permission is already present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to add, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user group to which the permission applies. + * + * @returns + * true if the permission was added, false if the permission was + * already present in the given permission set. + */ + static addUserGroupPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.userGroupPermissions = permSet.userGroupPermissions || {}; + return PermissionSet.addObjectPermission(permSet.userGroupPermissions, type, identifier); + } + + /** + * Removes the given user group permission applying to the user group with + * the given identifier from the given permission set, if present. If the + * permission is not present, this function has no effect. + * + * @param permSet + * The permission set to modify. + * + * @param type + * The permission to remove, as defined by + * PermissionSet.ObjectPermissionType. + * + * @param identifier + * The identifier of the user group to whom the permission applies. + * + * @returns + * true if the permission was removed, false if the permission was not + * present in the given permission set. + */ + static removeUserGroupPermission(permSet: PermissionSet, type: PermissionSet.ObjectPermissionType, identifier: string): boolean { + permSet.userGroupPermissions = permSet.userGroupPermissions || {}; + return PermissionSet.removeObjectPermission(permSet.userGroupPermissions, type, identifier); + } + +} + +export namespace PermissionSet { + + /** + * Valid object permission type strings. + */ + export enum ObjectPermissionType { + /** + * Permission to read from the specified object. + */ + READ = 'READ', + + /** + * Permission to update the specified object. + */ + UPDATE = 'UPDATE', + + /** + * Permission to delete the specified object. + */ + DELETE = 'DELETE', + + /** + * Permission to administer the specified object + */ + ADMINISTER = 'ADMINISTER' + } + + /** + * Valid system permission type strings. + */ + export enum SystemPermissionType { + /** + * Permission to administer the entire system. + */ + ADMINISTER = 'ADMINISTER', + + /** + * Permission to create new users. + */ + CREATE_USER = 'CREATE_USER', + + /** + * Permission to create new user groups. + */ + CREATE_USER_GROUP = 'CREATE_USER_GROUP', + + /** + * Permission to create new connections. + */ + CREATE_CONNECTION = 'CREATE_CONNECTION', + + /** + * Permission to create new connection groups. + */ + CREATE_CONNECTION_GROUP = 'CREATE_CONNECTION_GROUP', + + /** + * Permission to create new sharing profiles. + */ + CREATE_SHARING_PROFILE = 'CREATE_SHARING_PROFILE' + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Protocol.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Protocol.ts new file mode 100644 index 0000000000..084bd64fed --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Protocol.ts @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Form } from './Form'; +import { canonicalize } from '../../form/components/form-field-base/form-field-base.component'; + +/** + * Returned by REST API calls when representing the data + * associated with a supported remote desktop protocol. + */ +export class Protocol { + + /** + * The name which uniquely identifies this protocol. + */ + name?: string; + + /** + * An array of forms describing all known parameters for a connection + * using this protocol, including their types and other information. + * + * @default [] + */ + connectionForms: Form[]; + + /** + * An array of forms describing all known parameters relevant to a + * sharing profile whose primary connection uses this protocol, + * including their types, and other information. + * + * @default [] + */ + sharingProfileForms: Form[]; + + /** + * Creates a new Protocol. + * + * @param template + * The object whose properties should be copied within the new + * Protocol. + */ + constructor(template: Partial = {}) { + this.name = template.name; + this.connectionForms = template.connectionForms || []; + this.sharingProfileForms = template.sharingProfileForms || []; + } + + /** + * Returns the translation string namespace for the protocol having the + * given name. The namespace will be of the form: + * + * PROTOCOL_NAME + * + * where NAME is the protocol name transformed via + * canonicalize(). + * + * @param protocolName + * The name of the protocol. + * + * @returns + * The translation namespace for the protocol specified, or undefined if no + * namespace could be generated. + */ + static getNamespace(protocolName: string): string | undefined { + + // Do not generate a namespace if no protocol is selected + if (!protocolName) + return undefined; + + return 'PROTOCOL_' + canonicalize(protocolName); + + } + + /** + * Given the internal name of a protocol, produces the translation string + * for the localized version of that protocol's name. The translation + * string will be of the form: + * + * NAMESPACE.NAME + * + * where NAMESPACE is the namespace generated from + * Protocol.getNamespace(). + * + * @param protocolName + * The name of the protocol. + * + * @returns + * The translation string which produces the localized name of the + * protocol specified. + */ + static getName(protocolName: string): string | undefined { + return Protocol.getNamespace(protocolName) + '.NAME'; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/RelatedObjectPatch.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/RelatedObjectPatch.ts new file mode 100644 index 0000000000..837e9cb081 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/RelatedObjectPatch.ts @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing changes to an + * arbitrary set of objects which share some common relation. + */ +export class RelatedObjectPatch { + + /** + * The operation to apply to the objects indicated by the path. Valid + * operation values are defined within RelatedObjectPatch.Operation. + */ + op?: RelatedObjectPatch.Operation; + + /** + * The path of the objects to modify. This will always be "/". + * + * @default '/' + */ + path: string; + + /** + * The identifier of the object being added or removed from the + * relation. + */ + value?: string; + + /** + * Creates a new RelatedObjectPatch. + * + * @param template + * The object whose properties should be copied within the new + * RelatedObjectPatch. + */ + constructor(template: Partial = {}) { + this.op = template.op; + this.path = template.path || '/'; + this.value = template.value; + } + +} + +export namespace RelatedObjectPatch { + + /** + * All valid patch operations for objects sharing some common relation. + * Currently, only add and remove are supported. + */ + export enum Operation { + + /** + * Adds the specified object to the relation. + */ + ADD = 'add', + + /** + * Removes the specified object from the relation. + */ + REMOVE = 'remove' + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/SharingProfile.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/SharingProfile.ts new file mode 100644 index 0000000000..f58a1739ee --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/SharingProfile.ts @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing the data + * associated with a sharing profile. + */ +export class SharingProfile { + + /** + * The unique identifier associated with this sharing profile. + */ + identifier: string; + + /** + * The unique identifier of the connection that this sharing profile + * can be used to share. + */ + primaryConnectionIdentifier?: string; + + /** + * The human-readable name of this sharing profile, which is not + * necessarily unique. + */ + name?: string; + + /** + * Connection configuration parameters, as dictated by the protocol in + * use by the primary connection, arranged as name/value pairs. This + * information may not be available until directly queried. If this + * information is unavailable, this property will be null or undefined. + */ + parameters?: Record; + + /** + * Arbitrary name/value pairs which further describe this sharing + * profile. The semantics and validity of these attributes are dictated + * by the extension which defines them. + */ + attributes: Record; + + /** + * Creates a new SharingProfile object. + * + * @param template + * The object whose properties should be copied within the new + * SharingProfile. + */ + constructor(template: Partial = {}) { + this.identifier = template.identifier || ''; + this.primaryConnectionIdentifier = template.primaryConnectionIdentifier; + this.name = template.name; + this.parameters = template.parameters; + this.attributes = template.attributes || {}; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/TranslatableMessage.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/TranslatableMessage.ts new file mode 100644 index 0000000000..0d82273364 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/TranslatableMessage.ts @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing a message which + * can be translated using the translation service, providing a translation + * key and optional set of values to be substituted into the translation + * string associated with that key. + */ +export class TranslatableMessage { + + /** + * The key associated with the translation string that used when + * displaying this message. + */ + key?: string; + + /** + * The object which should be passed through to the translation service + * for the sake of variable substitution. Each property of the provided + * object will be substituted for the variable of the same name within + * the translation string. + */ + variables?: object; + + /** + * Creates a new TranslatableMessage. + * + * @param template + * The object whose properties should be copied within the new + * TranslatableMessage. + */ + constructor(template: TranslatableMessage = {}) { + this.key = template.key; + this.variables = template.variables; + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/User.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/User.ts new file mode 100644 index 0000000000..914b701ffe --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/User.ts @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing the data + * associated with a user. + */ +export class User { + + /** + * The name which uniquely identifies this user. + */ + username: string; + + /** + * This user's password. Note that the REST API may not populate this + * property for the sake of security. In most cases, it's not even + * possible for the authentication layer to retrieve the user's true + * password. + */ + password: string; + + /** + * The time that this user was last logged in, in milliseconds since + * 1970-01-01 00:00:00 UTC. If this information is unknown or + * unavailable, this will be null. + */ + lastActive?: number; + + /** + * Arbitrary name/value pairs which further describe this user. The + * semantics and validity of these attributes are dictated by the + * extension which defines them. + * + * @default {} + */ + attributes: Record; + + /** + * Creates a new User object. + * + * @param template + * The object whose properties should be copied within the new + * User. + */ + constructor(template: Partial = {}) { + this.username = template.username || ''; + this.password = template.password || ''; + this.lastActive = template.lastActive; + this.attributes = template.attributes || {}; + } + +} + +export namespace User { + + /** + * All standard attribute names with semantics defined by the Guacamole web + * application. Extensions may additionally define their own attributes + * with completely arbitrary names and semantics, so long as those names do + * not conflict with the names listed here. All standard attribute names + * have a "guac-" prefix to avoid such conflicts. + */ + export enum Attributes { + + /** + * The user's full name. + */ + FULL_NAME = 'guac-full-name', + + /** + * The email address of the user. + */ + EMAIL_ADDRESS = 'guac-email-address', + + /** + * The organization, company, group, etc. that the user belongs to. + */ + ORGANIZATION = 'guac-organization', + + /** + * The role that the user has at the organization, company, group, etc. + * they belong to. + */ + ORGANIZATIONAL_ROLE = 'guac-organizational-role' + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserCredentials.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserCredentials.ts new file mode 100644 index 0000000000..b03f769c85 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserCredentials.ts @@ -0,0 +1,124 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Field } from './Field'; +import { inject } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; + +/** + * Returned by REST API calls to define a full set of valid + * credentials, including field definitions and corresponding expected + * values. + */ +export class UserCredentials { + + /** + * Any parameters which should be provided when these credentials are + * submitted. If no such information is available, this will be undefined. + */ + expected: Field[]; + + /** + * A map of all field values by field name. The fields having the names + * used within this map should be defined within the @link{Field} array + * stored under the @link{expected} property. + */ + values: Record; + + /** + * Creates a new UserCredentials object. + * + * @param template + * The object whose properties should be copied within the new + * UserCredentials. + */ + constructor(template: UserCredentials) { + this.expected = template.expected; + this.values = template.values; + } + + /** + * Generates a query string containing all QUERY_PARAMETER fields from the + * given UserCredentials object, along with their corresponding values. The + * parameter names and values will be appropriately URL-encoded and + * separated by ampersands. + * + * @param userCredentials + * The UserCredentials to retrieve all query parameters from. + * + * @returns + * A string containing all QUERY_PARAMETER fields as name/value pairs + * separated by ampersands, where each name is separated by the value + * by an equals sign. + */ + static getQueryParameters(userCredentials: UserCredentials): string { + + // Build list of parameter name/value pairs + const parameters: string[] = []; + userCredentials.expected?.forEach(field => { + + // Only add query parameters + if (field.type !== Field.Type.QUERY_PARAMETER) + return; + + // Pull parameter name and value + const name = field.name; + const value = userCredentials.values[name]; + + // Properly encode name/value pair + parameters.push(encodeURIComponent(name) + '=' + encodeURIComponent(value)); + + }); + + // Separate each name/value pair by an ampersand + return parameters.join('&'); + + } + + /** + * Returns a fully-qualified, absolute URL to Guacamole prepopulated with + * any query parameters dictated by the QUERY_PARAMETER fields defined in + * the given UserCredentials. + * + * @param userCredentials + * The UserCredentials to retrieve all query parameters from. + * + * @returns + * A fully-qualified, absolute URL to Guacamole prepopulated with the + * query parameters dictated by the given UserCredentials. + */ + static getLink(userCredentials: UserCredentials): string { + + const window = inject(DOCUMENT).defaultView as Window; + const linkOrigin = window.location.origin; + + // Build base link + let link = linkOrigin + + window.location.pathname + + '#/'; + + // Add any required parameters + const params = UserCredentials.getQueryParameters(userCredentials); + if (params) + link += '?' + params; + + return link; + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserGroup.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserGroup.ts new file mode 100644 index 0000000000..c7609c4823 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserGroup.ts @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Returned by REST API calls when representing the data + * associated with a user group. + */ +export class UserGroup { + + /** + * The name which uniquely identifies this user group. + */ + identifier?: string; + + /** + * Arbitrary name/value pairs which further describe this user group. + * The semantics and validity of these attributes are dictated by the + * extension which defines them. + * + * @default {} + */ + attributes: Record; + + /** + * Creates a new UserGroup object. + * + * @param template + * The object whose properties should be copied within the new + * UserGroup. + */ + constructor(template: Partial = {}) { + this.identifier = template.identifier; + this.attributes = template.attributes || {}; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserPasswordUpdate.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserPasswordUpdate.ts new file mode 100644 index 0000000000..cd7f62fd20 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/UserPasswordUpdate.ts @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * The object sent to the REST API when representing the data + * associated with a user password update. + */ +export class UserPasswordUpdate { + + /** + * This user's current password. Required for authenticating the user + * as part of to the password update operation. + */ + oldPassword?: string; + + /** + * The new password to set for the user. + */ + newPassword?: string; + + /** + * Creates a new UserPasswordUpdate object. + * + * @param template + * The object whose properties should be copied within the new + * UserPasswordUpdate. + */ + constructor(template: Partial = {}) { + this.oldPassword = template.oldPassword; + this.newPassword = template.newPassword; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.html new file mode 100644 index 0000000000..ecdba35846 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.html @@ -0,0 +1,28 @@ + + + + +
      + + + {{item.name}} + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.ts new file mode 100644 index 0000000000..e15c60dad3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection-group/connection-group.component.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * A component which displays a single connection group within the + * list of accessible connections and groups. + */ +@Component({ + selector: 'guac-connection-group', + templateUrl: './connection-group.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ConnectionGroupComponent { + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.html new file mode 100644 index 0000000000..12e40edce2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.html @@ -0,0 +1,34 @@ + + + + +
      + + + {{item.name}} + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.ts new file mode 100644 index 0000000000..99def60c4e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/connection/connection.component.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * A component which displays a single connection entry within the + * list of accessible connections and groups. + */ +@Component({ + selector: 'guac-connection', + templateUrl: './connection.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ConnectionComponent { + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.html new file mode 100644 index 0000000000..1da1541cad --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.html @@ -0,0 +1,104 @@ + +
      + + +

      {{'SETTINGS_CONNECTION_HISTORY.HELP_CONNECTION_HISTORY' | transloco}}

      + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_USERNAME' | transloco}} + + {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_STARTDATE' | transloco}} + + {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_DURATION' | transloco}} + + {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_CONNECTION_NAME' | transloco}} + + {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_REMOTEHOST' | transloco}} + + {{'SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_LOGS' | transloco}} +
      + + {{historyEntryWrapper.entry.startDate || 0 | date : dateFormat || undefined}}{{historyEntryWrapper.entry.connectionName}}{{historyEntryWrapper.entry.remoteHost}} + + {{'SETTINGS_CONNECTION_HISTORY.ACTION_VIEW_RECORDING' | transloco}} + +
      + + +

      + {{'SETTINGS_CONNECTION_HISTORY.INFO_NO_HISTORY' | transloco}} +

      + + + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts new file mode 100644 index 0000000000..f36e69e8ee --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts @@ -0,0 +1,300 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { HistoryService } from '../../../rest/service/history.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { CsvService } from '../../services/csv.service'; +import { TranslocoService } from '@ngneat/transloco'; +import { SortOrder } from '../../../list/types/SortOrder'; +import { BehaviorSubject, combineLatest, take } from 'rxjs'; +import { NonNullableProperties } from '../../../util/utility-types'; +import { FilterToken } from '../../../list/types/FilterToken'; +import { ConnectionHistoryEntryWrapper } from '../../types/ConnectionHistoryEntryWrapper'; +import { SortService } from '../../../list/services/sort.service'; +import { formatDate } from '@angular/common'; +import { saveAs } from 'file-saver'; +import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; +import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; +import { DataSource } from '../../../list/types/DataSource'; + +/** + * A component for viewing connection history records. + */ +@Component({ + selector: 'guac-settings-connection-history', + templateUrl: './guac-settings-connection-history.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacSettingsConnectionHistoryComponent implements OnInit { + + /** + * The identifier of the currently-selected data source. + */ + @Input({required: true}) dataSource!: string; + + /** + * Reference to the instance of the pager component. + */ + @ViewChild(GuacPagerComponent, {static: true}) pager!: GuacPagerComponent; + + /** + * All wrapped matching connection history entries, or null if these + * entries have not yet been retrieved. + */ + historyEntryWrappers: ConnectionHistoryEntryWrapper[] | null = null; + + /** + * The initial SortOrder instance which stores the sort order of the history + * records. + */ + readonly initialOrder = new SortOrder([ + '-entry.startDate', + '-duration', + 'entry.username', + 'entry.connectionName', + 'entry.remoteHost' + ]); + + /** + * Observable of the current SortOrder instance which stores the sort order of the history + * records. The value is updated by the GuacSortOrderDirective. + */ + order: BehaviorSubject = new BehaviorSubject(this.initialOrder); + + /** + * The search terms to use when filtering the history records. + */ + searchString: string = ''; + + /** + * TODO: Document + */ + dataSourceView: DataSource | null = null; + + /** + * The date format for use for start/end dates. + */ + dateFormat: string | null = null; + + /** + * The names of sortable properties supported by the REST API that + * correspond to the properties that may be stored within + * $scope.order. + */ + private readonly apiSortProperties: Record = { + 'entry.startDate': 'startDate', + '-entry.startDate': '-startDate' + }; + + /** + * Inject required services. + */ + constructor(private csvService: CsvService, + private historyService: HistoryService, + private requestService: RequestService, + private translocoService: TranslocoService, + private sortService: SortService, + private ds: DataSourceBuilderService) { + } + + ngOnInit(): void { + + // Get session date format + this.translocoService.selectTranslate('SETTINGS_CONNECTION_HISTORY.FORMAT_DATE') + .pipe(take(1)) + .subscribe(retrievedDateFormat => { + + // Store received date format + this.dateFormat = retrievedDateFormat; + + }); + + // Build a view on the history entries + this.dataSourceView = + this.ds.getBuilder() + // Start with an empty list + .source([]) + .sort(this.order) + .paginate(this.pager.page) + .build(); + + // Initialize search results + this.search(); + + } + + /** + * Converts the given sort predicate to a corresponding array of + * sortable properties supported by the REST API. Any properties + * within the predicate that are not supported will be dropped. + * + * @param predicate + * The sort predicate to convert, as exposed by the predicate + * property of SortOrder. + * + * @returns + * A corresponding array of sortable properties, omitting any + * properties not supported by the REST API. + */ + private toAPISortPredicate(predicate: string[]): string[] { + return predicate + .map((name) => this.apiSortProperties[name]) + .filter((name) => !!name); + } + + /** + * Returns true if the connection history records have been loaded, + * indicating that information needed to render the page is fully + * loaded. + * + * @returns + * true if the history records have been loaded, false + * otherwise. + * + */ + isLoaded(): this is NonNullableProperties { + return this.historyEntryWrappers !== null + && this.dateFormat !== null + && this.dataSourceView !== null; + } + + /** + * Returns whether the search has completed but contains no history + * records. This function will return false if there are history + * records in the results OR if the search has not yet completed. + * + * @returns + * true if the search results have been loaded but no history + * records are present, false otherwise. + */ + isHistoryEmpty(): boolean { + return this.isLoaded() && this.historyEntryWrappers.length === 0; + } + + /** + * Query the API for the connection record history, filtered by + * searchString, and ordered by order. + */ + search(): void { + + // Clear current results + this.historyEntryWrappers = null; + + // Tokenize search string + const tokens = FilterToken.tokenize(this.searchString); + + // Transform tokens into list of required string contents + const requiredContents: any[] = []; + + tokens.forEach(token => { + + // Transform depending on token type + switch (token.type) { + + // For string literals, use parsed token value + case 'LITERAL': + requiredContents.push(token.value); + break; + + // Ignore whitespace + case 'WHITESPACE': + break; + + // For all other token types, use the relevant portion + // of the original search string + default: + requiredContents.push(token.consumed); + + } + + }); + + this.historyService.getConnectionHistory( + this.dataSource, + requiredContents, + this.toAPISortPredicate(this.order.getValue().predicate) + ) + .subscribe({ + next: historyEntries => { + + // Wrap all history entries for sake of display + this.historyEntryWrappers = []; + historyEntries.forEach(historyEntry => { + this.historyEntryWrappers!.push(new ConnectionHistoryEntryWrapper(this.dataSource, historyEntry)); + }); + + if (this.dataSourceView) { + this.dataSourceView.updateSource(this.historyEntryWrappers); + } + + }, error: this.requestService.DIE + + }); + + } + + /** + * Initiates a download of a CSV version of the displayed history + * search results. + */ + downloadCSV(): void { + + // Translate CSV header + const tableHeaderSessionUsername = this.translocoService.selectTranslate('SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_USERNAME'); + const tableHeaderSessionStartdate = this.translocoService.selectTranslate('SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_STARTDATE'); + const tableHeaderSessionDuration = this.translocoService.selectTranslate('SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_DURATION'); + const tableHeaderSessionConnectionName = this.translocoService.selectTranslate('SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_CONNECTION_NAME'); + const tableHeaderSessionRemotehost = this.translocoService.selectTranslate('SETTINGS_CONNECTION_HISTORY.TABLE_HEADER_SESSION_REMOTEHOST'); + const filenameHistoryCsv = this.translocoService.selectTranslate('SETTINGS_CONNECTION_HISTORY.FILENAME_HISTORY_CSV'); + + combineLatest([tableHeaderSessionUsername, tableHeaderSessionStartdate, tableHeaderSessionDuration, tableHeaderSessionConnectionName, tableHeaderSessionRemotehost, filenameHistoryCsv]) + .pipe(take(1)) + .subscribe(([tableHeaderSessionUsername, tableHeaderSessionStartdate, tableHeaderSessionDuration, tableHeaderSessionConnectionName, tableHeaderSessionRemotehost, filenameHistoryCsv]) => { + + // Initialize records with translated header row + const records: any[][] = [[ + tableHeaderSessionUsername, + tableHeaderSessionStartdate, + tableHeaderSessionDuration, + tableHeaderSessionConnectionName, + tableHeaderSessionRemotehost, + ]]; + + // Add rows for all history entries, using the same sort + // order as the displayed table + this.sortService.orderByPredicate(this.historyEntryWrappers, this.order.getValue().predicate).forEach(historyEntryWrapper => { + records.push([ + historyEntryWrapper.entry.username, + formatDate(historyEntryWrapper.entry.startDate || 0, this.dateFormat!, 'en-US'), + historyEntryWrapper.duration / 1000, + historyEntryWrapper.entry.connectionName, + historyEntryWrapper.entry.remoteHost + ]); + } + ); + + // Save the result + saveAs(this.csvService.toBlob(records), filenameHistoryCsv); + + }); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.html new file mode 100644 index 0000000000..24c114b1b8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.html @@ -0,0 +1,100 @@ + + +
      +
      + +
      + +

      {{'SETTINGS_CONNECTIONS.HELP_CONNECTIONS' | transloco}}

      + + + + + +
      + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.ts new file mode 100644 index 0000000000..110e541126 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connections/guac-settings-connections.component.ts @@ -0,0 +1,441 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, OnInit, signal, ViewEncapsulation } from '@angular/core'; +import { RequestService } from '../../../rest/service/request.service'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { ConnectionGroupService } from '../../../rest/service/connection-group.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { GuacNotificationService } from '../../../notification/services/guac-notification.service'; +import { Router } from '@angular/router'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { NonNullableProperties } from '../../../util/utility-types'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * A component for managing all connections and connection groups in the system. + */ +@Component({ + selector: 'guac-settings-connections', + templateUrl: './guac-settings-connections.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacSettingsConnectionsComponent implements OnInit { + + /** + * The identifier of the current user. + */ + private currentUsername: string | null = this.authenticationService.getCurrentUsername(); + + /** + * The identifier of the currently-selected data source. + */ + @Input({required: true}) dataSource!: string; + + /** + * The root connection group of the connection group hierarchy. + */ + rootGroups: Record | null = null; + + /** + * Signal that contains the result of filtering the root groups. + */ + filteredRootGroups = signal>({}) + + /** + * All permissions associated with the current user, or null if the + * user's permissions have not yet been loaded. + */ + permissions: PermissionSet | null = null; + + /** + * Array of all connection properties that are filterable. + */ + filteredConnectionProperties: string[] = [ + 'name', + 'protocol' + ]; + + /** + * Array of all connection group properties that are filterable. + */ + filteredConnectionGroupProperties: string[] = [ + 'name' + ]; + + constructor(private authenticationService: AuthenticationService, + private connectionGroupService: ConnectionGroupService, + private dataSourceService: DataSourceService, + private guacNotification: GuacNotificationService, + private permissionService: PermissionService, + private requestService: RequestService, + private router: Router) { + } + + ngOnInit(): void { + // Retrieve current permissions + this.permissionService.getEffectivePermissions(this.dataSource, this.currentUsername!) + .subscribe({ + next: permissions => { + + // Store retrieved permissions + this.permissions = permissions; + + // Ignore permission to update root group + PermissionSet.removeConnectionGroupPermission(this.permissions, PermissionSet.ObjectPermissionType.UPDATE, ConnectionGroup.ROOT_IDENTIFIER); + + // Return to home if there's nothing to do here + if (!this.canManageConnections()) + this.router.navigate(['/']); + + // Retrieve all connections for which we have UPDATE or DELETE permission + this.dataSourceService.apply( + (dataSource: string, connectionGroupID?: string, permissionTypes?: string[] | undefined) => + this.connectionGroupService.getConnectionGroupTree(dataSource, connectionGroupID, permissionTypes), + [this.dataSource], + ConnectionGroup.ROOT_IDENTIFIER, + [PermissionSet.ObjectPermissionType.UPDATE, PermissionSet.ObjectPermissionType.DELETE] + ) + .then(rootGroups => { + this.rootGroups = rootGroups; + // TODO: Remove the next line once the filter component sets the filteredRootGroups + this.filteredRootGroups.set(rootGroups); + }, this.requestService.PROMISE_DIE); + + }, error: this.requestService.DIE + }); // end retrieve permissions + } + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user interface + * to be useful, false otherwise. + */ + isLoaded(): this is NonNullableProperties { + + return this.rootGroups !== null + && this.permissions !== null; + + } + + /** + * Returns whether the current user has the ADMINISTER system + * permission (i.e. they are an administrator). + * + * @return + * true if the current user is an administrator. + */ + canAdminister(): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Return whether the current user is an administrator + return PermissionSet.hasSystemPermission( + this.permissions, PermissionSet.SystemPermissionType.ADMINISTER); + } + + /** + * Returns whether the current user can create new connections + * within the current data source. + * + * @return + * true if the current user can create new connections within + * the current data source, false otherwise. + */ + canCreateConnections(): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Can create connections if adminstrator or have explicit permission + if (PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION)) + return true; + + // No data sources allow connection creation + return false; + + } + + /** + * Returns whether the current user can create new connection + * groups within the current data source. + * + * @return + * true if the current user can create new connection groups + * within the current data source, false otherwise. + */ + canCreateConnectionGroups(): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Can create connections groups if adminstrator or have explicit permission + if (PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.CREATE_CONNECTION_GROUP)) + return true; + + // No data sources allow connection group creation + return false; + + } + + /** + * Returns whether the current user can create new sharing profiles + * within the current data source. + * + * @return + * true if the current user can create new sharing profiles + * within the current data source, false otherwise. + */ + canCreateSharingProfiles(): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Can create sharing profiles if adminstrator or have explicit permission + if (PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.CREATE_SHARING_PROFILE)) + return true; + + // Current data source does not allow sharing profile creation + return false; + + } + + /** + * Returns whether the current user can create new connections or + * connection groups or make changes to existing connections or + * connection groups within the current data source. The + * connection management interface as a whole is useless if this + * function returns false. + * + * @return + * true if the current user can create new connections/groups + * or make changes to existing connections/groups within the + * current data source, false otherwise. + */ + canManageConnections(): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Creating connections/groups counts as management + if (this.canCreateConnections() + || this.canCreateConnectionGroups() + || this.canCreateSharingProfiles()) + return true; + + // Can manage connections if granted explicit update or delete + if (PermissionSet.hasConnectionPermission(this.permissions, PermissionSet.ObjectPermissionType.UPDATE) + || PermissionSet.hasConnectionPermission(this.permissions, PermissionSet.ObjectPermissionType.DELETE)) + return true; + + // Can manage connections groups if granted explicit update or delete + if (PermissionSet.hasConnectionGroupPermission(this.permissions, PermissionSet.ObjectPermissionType.UPDATE) + || PermissionSet.hasConnectionGroupPermission(this.permissions, PermissionSet.ObjectPermissionType.DELETE)) + return true; + + // No data sources allow management of connections or groups + return false; + + } + + /** + * Returns whether the current user can update the connection having + * the given identifier within the current data source. + * + * @param identifier + * The identifier of the connection to check. + * + * @return + * true if the current user can update the connection having the + * given identifier within the current data source, false + * otherwise. + */ + canUpdateConnection(identifier: string): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Can update the connection if adminstrator or have explicit permission + if (PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasConnectionPermission(this.permissions, PermissionSet.ObjectPermissionType.UPDATE, identifier)) + return true; + + // Current data sources does not allow the connection to be updated + return false; + + } + + /** + * Returns whether the current user can update the connection group + * having the given identifier within the current data source. + * + * @param identifier + * The identifier of the connection group to check. + * + * @return + * true if the current user can update the connection group + * having the given identifier within the current data source, + * false otherwise. + */ + canUpdateConnectionGroup(identifier: string): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Can update the connection if adminstrator or have explicit permission + if (PermissionSet.hasSystemPermission(this.permissions, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasConnectionGroupPermission(this.permissions, PermissionSet.ObjectPermissionType.UPDATE, identifier)) + return true; + + // Current data sources does not allow the connection group to be updated + return false; + + } + + /** + * Adds connection-group-specific contextual actions to the given + * array of GroupListItems. Each contextual action will be + * represented by a new GroupListItem. + * + * @param items + * The array of GroupListItems to which new GroupListItems + * representing connection-group-specific contextual actions + * should be added. + * + * @param parent + * The GroupListItem representing the connection group which + * contains the given array of GroupListItems, if known. + */ + private addConnectionGroupActions(items: GroupListItem[], parent?: GroupListItem): void { + + // Do nothing if we lack permission to modify the parent at all + if (parent && !this.canUpdateConnectionGroup(parent.identifier!)) + return; + + // Add action for creating a child connection, if the user has + // permission to do so + if (this.canCreateConnections()) + items.push(new GroupListItem({ + type: 'new-connection', + dataSource: this.dataSource, + weight: 1, + wrappedItem: parent + })); + + // Add action for creating a child connection group, if the user + // has permission to do so + if (this.canCreateConnectionGroups()) + items.push(new GroupListItem({ + type: 'new-connection-group', + dataSource: this.dataSource, + weight: 1, + wrappedItem: parent + })); + + } + + /** + * Adds connection-specific contextual actions to the given array of + * GroupListItems. Each contextual action will be represented by a + * new GroupListItem. + * + * @param items + * The array of GroupListItems to which new GroupListItems + * representing connection-specific contextual actions should + * be added. + * + * @param parent + * The GroupListItem representing the connection which contains + * the given array of GroupListItems, if known. + */ + private addConnectionActions(items: GroupListItem[], parent?: GroupListItem): void { + + // Do nothing if we lack permission to modify the parent at all + if (parent && !this.canUpdateConnection(parent.identifier!)) + return; + + // Add action for creating a child sharing profile, if the user + // has permission to do so + if (this.canCreateSharingProfiles()) + items.push(new GroupListItem({ + type: 'new-sharing-profile', + dataSource: this.dataSource, + weight: 1, + wrappedItem: parent + })); + + } + + /** + * Decorates the given GroupListItem, including all descendants, + * adding contextual actions. + * + * @param item + * The GroupListItem which should be decorated with additional + * GroupListItems representing contextual actions. + */ + private decorateItem(item: GroupListItem): void { + + // If the item is a connection group, add actions specific to + // connection groups + if (item.type === GroupListItem.Type.CONNECTION_GROUP) + this.addConnectionGroupActions(item.children, item); + + // If the item is a connection, add actions specific to + // connections + else if (item.type === GroupListItem.Type.CONNECTION) { + this.addConnectionActions(item.children, item); + } + + // Decorate all children + item.children.forEach(child => this.decorateItem(child)); + + } + + /** + * Callback which decorates all items within the given array of + * GroupListItems, including their descendants, adding contextual + * actions. + * + * @param items + * The array of GroupListItems which should be decorated with + * additional GroupListItems representing contextual actions. + */ + rootItemDecorator(items: GroupListItem[]): void { + + // Decorate each root-level item + items.forEach(item => this.decorateItem(item)); + + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.html new file mode 100644 index 0000000000..e13bfba30e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.html @@ -0,0 +1,135 @@ + +
      + + +
      +

      {{'SETTINGS_PREFERENCES.HELP_LOCALE' | transloco}}

      + +
      + + +

      {{'SETTINGS_PREFERENCES.SECTION_HEADER_UPDATE_PASSWORD' | transloco}}

      +
      +

      {{'SETTINGS_PREFERENCES.HELP_UPDATE_PASSWORD' | transloco}}

      + + +
      + + + + + + + + + + + + + +
      {{'SETTINGS_PREFERENCES.FIELD_HEADER_PASSWORD_OLD' | transloco}}
      {{'SETTINGS_PREFERENCES.FIELD_HEADER_PASSWORD_NEW' | transloco}}
      {{'SETTINGS_PREFERENCES.FIELD_HEADER_PASSWORD_NEW_AGAIN' | transloco}}
      +
      + + +
      + +
      +
      + + +

      {{'SETTINGS_PREFERENCES.SECTION_HEADER_DEFAULT_INPUT_METHOD' | transloco}}

      +
      +

      {{'SETTINGS_PREFERENCES.HELP_DEFAULT_INPUT_METHOD' | transloco}}

      +
      + + +
      + +

      +
      + + +
      + +

      +
      + + +
      + +

      +
      + +
      +
      + + +

      {{'SETTINGS_PREFERENCES.SECTION_HEADER_DEFAULT_MOUSE_MODE' | transloco}}

      +
      +

      {{'SETTINGS_PREFERENCES.HELP_DEFAULT_MOUSE_MODE' | transloco}}

      +
      + + +
      + +
      + +

      +
      +
      + + +
      + +
      + +

      +
      +
      + +
      +
      + + +
      + + + + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.ts new file mode 100644 index 0000000000..cf0edba88a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-preferences/guac-settings-preferences.component.ts @@ -0,0 +1,313 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, DestroyRef, OnInit, ViewEncapsulation } from '@angular/core'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { PreferenceService } from '../../services/preference.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { SchemaService } from '../../../rest/service/schema.service'; +import { UserService } from '../../../rest/service/user.service'; +import { GuacNotificationService } from '../../../notification/services/guac-notification.service'; +import { NotificationAction } from '../../../notification/types/NotificationAction'; +import { User } from '../../../rest/types/User'; +import { Form } from '../../../rest/types/Form'; +import { Field } from '../../../rest/types/Field'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { EMPTY, forkJoin } from 'rxjs'; +import { FormGroup } from '@angular/forms'; +import { FormService } from '../../../form/service/form.service'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { TranslocoService } from '@ngneat/transloco'; + +/** + * A component for managing preferences local to the current user. + */ +@Component({ + selector: 'guac-settings-preferences', + templateUrl: './guac-settings-preferences.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacSettingsPreferencesComponent implements OnInit { + + /** + * The user being modified. + */ + user: User | null = null; + + /** + * The username of the current user. + */ + private username: string | null = this.authenticationService.getCurrentUsername(); + + /** + * The identifier of the data source which authenticated the + * current user. + */ + private dataSource: string | null = this.authenticationService.getDataSource(); + + /** + * All available user attributes. This is only the set of attribute + * definitions, organized as logical groupings of attributes, not attribute + * values. + */ + attributes: Form[] | null = null; + + /** + * The fields which should be displayed for choosing locale + * preferences. Each field name must be a property on + * $scope.preferences. + */ + localeFields: Field[] = [ + {type: Field.Type.LANGUAGE, name: 'language'}, + {type: Field.Type.TIMEZONE, name: 'timezone'} + ]; + + /** + * The new password for the user. + */ + newPassword: string | null = null; + + /** + * The password match for the user. The update password action will + * fail if $scope.newPassword !== $scope.passwordMatch. + */ + newPasswordMatch: string | null = null; + + /** + * The old password of the user. + */ + oldPassword: string | null = null; + + /** + * Whether the current user can edit themselves - i.e. update their + * password or change user preference attributes, or null if this + * is not yet known. + */ + canUpdateSelf: boolean | null = null; + + /** + * Form group for editing locale settings. + */ + preferencesFormGroup: FormGroup = new FormGroup({}); + + /** + * Form group for editing user attributes. + */ + userAttributesFormGroup: FormGroup = new FormGroup({}); + + /** + * An action to be provided along with the object sent to + * showStatus which closes the currently-shown status dialog. + */ + private readonly ACKNOWLEDGE_ACTION: NotificationAction = { + name: 'SETTINGS_PREFERENCES.ACTION_ACKNOWLEDGE', + // Handle action + callback: () => { + this.guacNotification.showStatus(false); + } + }; + + /** + * An action which closes the current dialog, and refreshes + * the user data on dialog close. + */ + private readonly ACKNOWLEDGE_ACTION_RELOAD = { + name: 'SETTINGS_PREFERENCES.ACTION_ACKNOWLEDGE', + // Handle action + callback: () => { + this.userService.getUser(this.dataSource!, this.username!) + .subscribe(user => { + this.user = user; + this.guacNotification.showStatus(false); + }); + } + }; + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private guacNotification: GuacNotificationService, + private permissionService: PermissionService, + protected preferenceService: PreferenceService, + private requestService: RequestService, + private schemaService: SchemaService, + private userService: UserService, + private formService: FormService, + private translocoService: TranslocoService, + private destroyRef: DestroyRef) { + } + + ngOnInit(): void { + + // Retrieve current permissions + this.permissionService.getEffectivePermissions(this.dataSource!, this.username!) + .subscribe({ + next: permissions => { + + // Add action for updating password or user preferences if permission is granted + this.canUpdateSelf = ( + + // If permission is explicitly granted + PermissionSet.hasUserPermission(permissions, + PermissionSet.ObjectPermissionType.UPDATE, this.username!) + + // Or if implicitly granted through being an administrator + || PermissionSet.hasSystemPermission(permissions, + PermissionSet.SystemPermissionType.ADMINISTER)); + + }, + error: this.requestService.createErrorCallback(error => { + this.canUpdateSelf = false; + return EMPTY + }) + }); + + // Fetch the user record + const user = this.userService.getUser(this.dataSource!, this.username!); + + // Fetch all user preference attribute forms defined + const attributes = this.schemaService.getUserPreferenceAttributes(this.dataSource!); + + forkJoin([user, attributes]) + .subscribe(([user, attributes]) => { + // Store the fetched data + this.attributes = attributes; + this.user = user; + + // Create form group for editing user attributes + this.userAttributesFormGroup = this.formService.getFormGroup(attributes); + this.userAttributesFormGroup.patchValue(user.attributes); + this.userAttributesFormGroup.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + if (this.user) + this.user.attributes = value; + }); + }); + + // Create form group for editing locale settings + const localeForm = this.formService.asFormArray(this.localeFields); + this.preferencesFormGroup = this.formService.getFormGroup(localeForm); + this.preferencesFormGroup.patchValue(this.preferenceService.preferences); + this.preferencesFormGroup.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(value => { + //Automatically update applied translation when language preference is changed + if (this.preferenceService.preferences.language !== value.language) { + this.translocoService.setActiveLang(value.language); + } + + const newPreferences = {...this.preferenceService.preferences, ...value}; + this.preferenceService.preferences = newPreferences; + }); + + } + + /** + * Update the current user's password to the password currently set within + * the password change dialog. + */ + updatePassword(): void { + + // Verify passwords match + if (this.newPasswordMatch !== this.newPassword) { + this.guacNotification.showStatus({ + className: 'error', + title: 'SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR', + text: { + key: 'SETTINGS_PREFERENCES.ERROR_PASSWORD_MISMATCH' + }, + actions: [this.ACKNOWLEDGE_ACTION] + }); + return; + } + + // Verify that the new password is not blank + if (!this.newPassword) { + this.guacNotification.showStatus({ + className: 'error', + title: 'SETTINGS_PREFERENCES.DIALOG_HEADER_ERROR', + text: { + key: 'SETTINGS_PREFERENCES.ERROR_PASSWORD_BLANK' + }, + actions: [this.ACKNOWLEDGE_ACTION] + }); + return; + } + + // Save the user with the new password + this.userService.updateUserPassword(this.dataSource!, this.username!, this.oldPassword!, this.newPassword) + .subscribe({ + next: () => { + + // Clear the password fields + this.oldPassword = null; + this.newPassword = null; + this.newPasswordMatch = null; + + // Indicate that the password has been changed + this.guacNotification.showStatus({ + text: { + key: 'SETTINGS_PREFERENCES.INFO_PASSWORD_CHANGED' + }, + actions: [this.ACKNOWLEDGE_ACTION] + }); + }, + error: this.guacNotification.SHOW_REQUEST_ERROR + }); + + } + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user interface to be + * useful, false otherwise. + */ + isLoaded(): boolean { + + return this.canUpdateSelf !== null + // TODO: && this.languages !== null; + + } + + /** + * Saves the current user, displaying an acknowledgement message if + * saving was successful, or an error if the save failed. + */ + saveUser(): void { + this.userService.saveUser(this.dataSource!, this.user!) + .subscribe({ + next: () => this.guacNotification.showStatus({ + text: { + key: 'SETTINGS_PREFERENCES.INFO_PREFERENCE_ATTRIBUTES_CHANGED' + }, + + // Reload the user on successful save in case any attributes changed + actions: [this.ACKNOWLEDGE_ACTION_RELOAD] + }), + error: this.guacNotification.SHOW_REQUEST_ERROR + }); + } + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.html new file mode 100644 index 0000000000..2448853659 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.html @@ -0,0 +1,77 @@ + +
      + +

      {{'SETTINGS_SESSIONS.HELP_SESSIONS' | transloco}}

      + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + +
      + {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_USERNAME' | transloco}} + + {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_STARTDATE' | transloco}} + + {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_REMOTEHOST' | transloco}} + + {{'SETTINGS_SESSIONS.TABLE_HEADER_SESSION_CONNECTION_NAME' | transloco}} +
      + + + + {{wrapper.startDate}}{{wrapper.activeConnection.remoteHost}}{{wrapper.name}}
      + + +

      + {{'SETTINGS_SESSIONS.INFO_NO_SESSIONS' | transloco}} +

      + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts new file mode 100644 index 0000000000..585c64ae4e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts @@ -0,0 +1,459 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { ActiveConnectionService } from '../../../rest/service/active-connection.service'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { ConnectionGroupService } from '../../../rest/service/connection-group.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { GuacNotificationService } from '../../../notification/services/guac-notification.service'; +import { ActiveConnectionWrapper } from '../../types/ActiveConnectionWrapper'; +import { SortOrder } from '../../../list/types/SortOrder'; +import { ActiveConnection } from '../../../rest/types/ActiveConnection'; +import { Connection } from '../../../rest/types/Connection'; +import { formatDate } from '@angular/common'; +import { NonNullableProperties } from '../../../util/utility-types'; +import { NotificationAction } from '../../../notification/types/NotificationAction'; +import { BehaviorSubject, forkJoin, Observable, take } from 'rxjs'; +import { ClientIdentifier } from '../../../navigation/types/ClientIdentifier'; +import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; +import { TranslocoService } from '@ngneat/transloco'; +import { SortService } from '../../../list/services/sort.service'; +import { ClientIdentifierService } from '../../../navigation/service/client-identifier.service'; +import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; +import { GuacFilterComponent } from '../../../list/components/guac-filter/guac-filter.component'; +import { DataSource } from '../../../list/types/DataSource'; +import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; + +/** + * A component for managing all active Guacamole sessions. + */ +@Component({ + selector: 'guac-guac-settings-sessions', + templateUrl: './guac-settings-sessions.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacSettingsSessionsComponent implements OnInit { + + /** + * Reference to the instance of the pager component. + */ + @ViewChild(GuacPagerComponent, {static: true}) pager!: GuacPagerComponent; + + /** + * Reference to the instance of the filter component. + */ + @ViewChild(GuacFilterComponent, {static: true}) filter!: GuacFilterComponent; + + /** + * The identifiers of all data sources accessible by the current + * user. + */ + private dataSources: string[] = this.authenticationService.getAvailableDataSources(); + + /** + * TODO: document + */ + dataSourceView: DataSource | null = null; + + /** + * The ActiveConnectionWrappers of all active sessions accessible + * by the current user, or null if the active sessions have not yet + * been loaded. + */ + wrappers: ActiveConnectionWrapper[] | null = null; + + /** + * Initial SortOrder instance which maintains the sort order of the visible + * connection wrappers. + */ + readonly initialOrder = new SortOrder([ + 'activeConnection.username', + 'startDate', + 'activeConnection.remoteHost', + 'name' + ]); + + /** + * Observable of the current SortOrder instance which stores the sort order of the + * visible connection wrappers. The value is updated by the GuacSortOrderDirective. + */ + order: BehaviorSubject = new BehaviorSubject(this.initialOrder); + + /** + * Array of all wrapper properties that are filterable. + */ + filteredWrapperProperties: string[] = [ + 'activeConnection.username', + 'startDate', + 'activeConnection.remoteHost', + 'name' + ]; + + /** + * All active connections, if known, grouped by corresponding data + * source identifier, or null if active connections have not yet + * been loaded. + */ + private allActiveConnections: Record> | null = null; + + /** + * Map of all visible connections by data source identifier and + * object identifier, or null if visible connections have not yet + * been loaded. + */ + private allConnections: Record> | null = null; + + /** + * The date format for use for session-related dates. + */ + private sessionDateFormat: string | null = null; + + /** + * Map of all currently-selected active connection wrappers by + * data source and identifier. + */ + private allSelectedWrappers: Record> = {}; + + /** + * Inject required services. + */ + constructor(private activeConnectionService: ActiveConnectionService, + private authenticationService: AuthenticationService, + private connectionGroupService: ConnectionGroupService, + private dataSourceService: DataSourceService, + private guacNotification: GuacNotificationService, + private requestService: RequestService, + private translocoService: TranslocoService, + private sortService: SortService, + private clientIdentifierService: ClientIdentifierService, + private dataSourceBuilderService: DataSourceBuilderService) { + } + + ngOnInit(): void { + + // Build the data source for the connection list entries. + this.dataSourceView = this.dataSourceBuilderService.getBuilder() + .source([]) + .filter(this.filter.searchStringChange, this.filteredWrapperProperties) + .sort(this.order) + .paginate(this.pager.page) + .build(); + + // Retrieve all connections + this.dataSourceService.apply( + (dataSource: string, connectionGroupID: string) => this.connectionGroupService.getConnectionGroupTree(dataSource, connectionGroupID), + this.dataSources, + ConnectionGroup.ROOT_IDENTIFIER + ) + .then(rootGroups => { + + this.allConnections = {}; + + // Load connections from each received root group + for (let dataSource in rootGroups) { + const rootGroup = rootGroups[dataSource]; + this.allConnections[dataSource] = {}; + this.addDescendantConnections(dataSource, rootGroup); + } + + // Attempt to produce wrapped list of active connections + this.wrapAllActiveConnections(); + + }, this.requestService.PROMISE_DIE); + + // Query active sessions + this.dataSourceService.apply( + (dataSource: string) => this.activeConnectionService.getActiveConnections(dataSource), + this.dataSources + ) + .then(retrievedActiveConnections => { + + // Store received map of active connections + this.allActiveConnections = retrievedActiveConnections; + + // Attempt to produce wrapped list of active connections + this.wrapAllActiveConnections(); + + }, this.requestService.PROMISE_DIE); + + // Get session date format + this.translocoService.selectTranslate('SETTINGS_SESSIONS.FORMAT_STARTDATE') + .pipe(take(1)) + .subscribe(retrievedSessionDateFormat => { + + // Store received date format + this.sessionDateFormat = retrievedSessionDateFormat; + + // Attempt to produce wrapped list of active connections + this.wrapAllActiveConnections(); + + }); + + } + + + /** + * Adds the given connection to the internal set of visible + * connections. + * + * @param dataSource + * The identifier of the data source associated with the given + * connection. + * + * @param connection + * The connection to add to the internal set of visible + * connections. + */ + private addConnection(dataSource: string, connection: Connection): void { + + // Add given connection to set of visible connections + (this.allConnections!)[dataSource][connection.identifier!] = connection; + + } + + /** + * Adds all descendant connections of the given connection group to + * the internal set of connections. + * + * @param dataSource + * The identifier of the data source associated with the given + * connection group. + * + * @param connectionGroup + * The connection group whose descendant connections should be + * added to the internal set of connections. + */ + private addDescendantConnections(dataSource: string, connectionGroup: ConnectionGroup): void { + + // Add all child connections + connectionGroup.childConnections?.forEach(connection => { + this.addConnection(dataSource, connection); + }); + + // Add all child connection groups + connectionGroup.childConnectionGroups?.forEach(connectionGroup => { + this.addDescendantConnections(dataSource, connectionGroup); + }); + + } + + /** + * Wraps all loaded active connections, storing the resulting array + * within the scope. If required data has not yet finished loading, + * this function has no effect. + */ + private wrapAllActiveConnections(): void { + + // Abort if not all required data is available + if (!this.allActiveConnections || !this.allConnections || !this.sessionDateFormat) + return; + + // Wrap all active connections for sake of display + this.wrappers = []; + for (let dataSource in this.allActiveConnections) { + const activeConnections = this.allActiveConnections[dataSource]; + for (let identifier in activeConnections) { + const activeConnection = activeConnections[identifier]; + + // Retrieve corresponding connection + const connection = this.allConnections[dataSource][activeConnection.connectionIdentifier!]; + + // Add wrapper + if (activeConnection.username !== null) { + this.wrappers.push(new ActiveConnectionWrapper({ + dataSource: dataSource, + name: connection.name, + startDate: formatDate(activeConnection.startDate || 0, this.sessionDateFormat, 'en-US'), + activeConnection: activeConnection + })); + } + + } + + } + + this.dataSourceView?.updateSource(this.wrappers); + + } + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user interface + * to be useful, false otherwise. + */ + isLoaded(): this is NonNullableProperties { + return this.wrappers !== null + && this.dataSourceView !== null; + } + + /** + * An action to be provided along with the object sent to + * showStatus which closes the currently-shown status dialog. + */ + private readonly CANCEL_ACTION: NotificationAction = { + name: 'SETTINGS_SESSIONS.ACTION_CANCEL', + // Handle action + callback: () => { + this.guacNotification.showStatus(false); + } + }; + + /** + * An action to be provided along with the object sent to + * showStatus which immediately deletes the currently selected + * sessions. + */ + private readonly DELETE_ACTION: NotificationAction = { + name: 'SETTINGS_SESSIONS.ACTION_DELETE', + className: 'danger', + // Handle action + callback: () => { + this.deleteAllSessionsImmediately(); + this.guacNotification.showStatus(false); + } + }; + + /** + * Immediately deletes the selected sessions, without prompting the + * user for confirmation. + */ + private deleteAllSessionsImmediately(): void { + + const deletionRequests: Observable[] = []; + + // Perform deletion for each relevant data source + for (let dataSource in this.allSelectedWrappers) { + const selectedWrappers = this.allSelectedWrappers[dataSource]; + + // Delete sessions, if any are selected + const identifiers = Object.keys(selectedWrappers); + if (identifiers.length) + deletionRequests.push(this.activeConnectionService.deleteActiveConnections(dataSource, identifiers)); + + } + + // Update interface + forkJoin(deletionRequests) + .subscribe({ + next: () => { + // Remove deleted connections from wrapper array + this.wrappers = this.wrappers!.filter(wrapper => { + return !(wrapper.activeConnection.identifier! in (this.allSelectedWrappers[wrapper.dataSource] || {})); + }); + + // Clear selection + this.allSelectedWrappers = {}; + }, + error: this.guacNotification.SHOW_REQUEST_ERROR + }); + + } + + /** + * Delete all selected sessions, prompting the user first to + * confirm that deletion is desired. + */ + deleteSessions(): void { + // Confirm deletion request + this.guacNotification.showStatus({ + 'title': 'SETTINGS_SESSIONS.DIALOG_HEADER_CONFIRM_DELETE', + 'text': { + 'key': 'SETTINGS_SESSIONS.TEXT_CONFIRM_DELETE' + }, + 'actions': [this.DELETE_ACTION, this.CANCEL_ACTION] + }); + } + + /** + * Returns the relative URL of the client page which accesses the + * given active connection. If the active connection is not + * connectable, null is returned. + * + * @param dataSource + * The unique identifier of the data source containing the + * active connection. + * + * @param activeConnection + * The active connection to determine the relative URL of. + * + * @returns + * The relative URL of the client page which accesses the given + * active connection, or null if the active connection is not + * connectable. + */ + getClientURL(dataSource: string, activeConnection: ActiveConnection): string | null { + + if (!activeConnection.connectable) + return null; + + return '/client/' + encodeURIComponent(this.clientIdentifierService.getString({ + dataSource: dataSource, + type: ClientIdentifier.Types.ACTIVE_CONNECTION, + id: activeConnection.identifier + })); + + } + + /** + * Returns whether the selected sessions can be deleted. + * + * @returns + * true if selected sessions can be deleted, false otherwise. + */ + canDeleteSessions(): boolean { + + // We can delete sessions if at least one is selected + for (let dataSource in this.allSelectedWrappers) { + for (let identifier in this.allSelectedWrappers[dataSource]) + return true; + } + + return false; + + } + + /** + * Called whenever an active connection wrapper changes selected + * status. + * + * @param wrapper + * The wrapper whose selected status has changed. + */ + wrapperSelectionChange(wrapper: ActiveConnectionWrapper): void { + + // Get selection map for associated data source, creating if necessary + let selectedWrappers = this.allSelectedWrappers[wrapper.dataSource]; + if (!selectedWrappers) + selectedWrappers = this.allSelectedWrappers[wrapper.dataSource] = {}; + + // Add wrapper to map if selected + if (wrapper.checked) + selectedWrappers[wrapper.activeConnection.identifier!] = wrapper; + + // Otherwise, remove wrapper from map + else + delete selectedWrappers[wrapper.activeConnection.identifier!]; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.html new file mode 100644 index 0000000000..eedf013a00 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.html @@ -0,0 +1,62 @@ + +
      + +

      {{'SETTINGS_USER_GROUPS.HELP_USER_GROUPS' | transloco}}

      + + + + + + + + + + + + + + + + +
      + {{'SETTINGS_USER_GROUPS.TABLE_HEADER_USER_GROUP_NAME' | transloco}} +
      + +
      + {{manageableUserGroup.userGroup.identifier}} +
      +
      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts new file mode 100644 index 0000000000..d0c96ba7eb --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts @@ -0,0 +1,318 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { RequestService } from '../../../rest/service/request.service'; +import { UserGroupService } from '../../../rest/service/user-group.service'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { SortOrder } from '../../../list/types/SortOrder'; +import { ManageableUserGroup } from '../../../manage/types/ManageableUserGroup'; +import keys from 'lodash/keys'; +import { UserGroup } from '../../../rest/types/UserGroup'; +import { Router } from '@angular/router'; +import { NonNullableProperties } from '../../../util/utility-types'; +import { BehaviorSubject, of } from 'rxjs'; +import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; +import { DataSource } from '../../../list/types/DataSource'; +import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; +import { GuacFilterComponent } from '../../../list/components/guac-filter/guac-filter.component'; + +/** + * A component for managing all user groups in the system. + */ +@Component({ + selector: 'guac-settings-user-groups', + templateUrl: './guac-settings-user-groups.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacSettingsUserGroupsComponent implements OnInit { + + /** + * Reference to the instance of the pager component. + */ + @ViewChild(GuacPagerComponent, {static: true}) pager!: GuacPagerComponent; + + /** + * Reference to the instance of the filter component. + */ + @ViewChild(GuacFilterComponent, {static: true}) filter!: GuacFilterComponent; + + /** + * Identifier of the current user. + */ + private currentUsername: string | null = this.authenticationService.getCurrentUsername(); + + /** + * The identifiers of all data sources accessible by the current + * user. + */ + private dataSources: string[] = this.authenticationService.getAvailableDataSources(); + + /** + * TODO: document + */ + dataSourceView: DataSource | null = null; + + /** + * All visible user groups, along with their corresponding data + * sources. + */ + manageableUserGroups: ManageableUserGroup[] | null = null; + + /** + * Array of all user group properties that are filterable. + */ + filteredUserGroupProperties: string[] = [ + 'userGroup.identifier' + ]; + + /** + * The initial SortOrder which stores the sort order of the listed + * user groups. + */ + readonly initialOrder: SortOrder = new SortOrder([ + 'userGroup.identifier' + ]); + + /** + * Observable of the current SortOrder instance which stores the sort order of the listed + * user groups. The value is updated by the GuacSortOrderDirective. + */ + order: BehaviorSubject = new BehaviorSubject(this.initialOrder); + + /** + * Map of data source identifiers to all permissions associated + * with the current user within that data source, or null if the + * user's permissions have not yet been loaded. + */ + private permissions: Record | null = null; + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private dataSourceService: DataSourceService, + private permissionService: PermissionService, + private requestService: RequestService, + private userGroupService: UserGroupService, + private dataSourceBuilderService: DataSourceBuilderService, + private router: Router) { + } + + ngOnInit(): void { + + // Build the data source for the user group list entries. + this.dataSourceView = this.dataSourceBuilderService.getBuilder() + .source([]) + .filter(this.filter.searchStringChange, this.filteredUserGroupProperties) + .sort(this.order) + .paginate(this.pager.page) + .build(); + + // Retrieve current permissions + this.dataSourceService.apply( + (dataSource: string, userID: string) => this.permissionService.getEffectivePermissions(dataSource, userID), + this.dataSources, + this.currentUsername + ) + .then(retrievedPermissions => { + + // Store retrieved permissions + this.permissions = retrievedPermissions; + + // Return to home if there's nothing to do here + if (!this.canManageUserGroups()) + this.router.navigate(['/']); + + // If user groups can be created, list all readable user groups + if (this.canCreateUserGroups()) { + return this.dataSourceService.apply( + (dataSource: string) => this.userGroupService.getUserGroups(dataSource), + this.dataSources + ); + } + + // Otherwise, list only updateable/deletable users + return this.dataSourceService.apply( + (dataSource: string, permissionTypes: string[]) => this.userGroupService.getUserGroups(dataSource, permissionTypes), + this.dataSources, + [ + PermissionSet.ObjectPermissionType.UPDATE, + PermissionSet.ObjectPermissionType.DELETE + ] + ); + + }) + .then(userGroups => { + this.setDisplayedUserGroups(this.permissions!, userGroups); + }, this.requestService.PROMISE_WARN); + } + + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user group + * interface to be useful, false otherwise. + */ + isLoaded(): this is NonNullableProperties { + return this.manageableUserGroups !== null + && this.dataSourceView !== null; + } + + /** + * Returns the identifier of the data source that should be used by + * default when creating a new user group. + * + * @return + * The identifier of the data source that should be used by + * default when creating a new user group, or null if user group + * creation is not allowed. + */ + getDefaultDataSource(): string | null { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return null; + + // For each data source + const dataSources = keys(this.permissions).sort(); + for (let i = 0; i < dataSources.length; i++) { + + // Retrieve corresponding permission set + const dataSource = dataSources[i]; + const permissionSet = (this.permissions)[dataSource]; + + // Can create user groups if adminstrator or have explicit permission + if (PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.CREATE_USER_GROUP)) + return dataSource; + + } + + // No data sources allow user group creation + return null; + + } + + /** + * Returns whether the current user can create new user groups + * within at least one data source. + * + * @return + * true if the current user can create new user groups within at + * least one data source, false otherwise. + */ + canCreateUserGroups(): boolean { + return this.getDefaultDataSource() !== null; + } + + /** + * Returns whether the current user can create new user groups or + * make changes to existing user groups within at least one data + * source. The user group management interface as a whole is useless + * if this function returns false. + * + * @return {Boolean} + * true if the current user can create new user groups or make + * changes to existing user groups within at least one data + * source, false otherwise. + */ + private canManageUserGroups(): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Creating user groups counts as management + if (this.canCreateUserGroups()) + return true; + + // For each data source + for (let dataSource in this.permissions) { + + // Retrieve corresponding permission set + const permissionSet = (this.permissions)[dataSource]; + + // Can manage user groups if granted explicit update or delete + if (PermissionSet.hasUserGroupPermission(permissionSet, PermissionSet.ObjectPermissionType.UPDATE) + || PermissionSet.hasUserGroupPermission(permissionSet, PermissionSet.ObjectPermissionType.DELETE)) + return true; + + } + + // No data sources allow management of user groups + return false; + + } + + /** + * Sets the displayed list of user groups. If any user groups are + * already shown within the interface, those user groups are replaced + * with the given user groups. + * + * @param permissions + * A map of data source identifiers to all permissions associated + * with the current user within that data source. + * + * @param userGroups + * A map of all user groups which should be displayed, where each + * key is the data source identifier from which the user groups + * were retrieved and each value is a map of user group identifiers + * to their corresponding @link{UserGroup} objects. + */ + setDisplayedUserGroups(permissions: Record, userGroups: Record>): void { + + const addedUserGroups: Record = {}; + this.manageableUserGroups = []; + + // For each user group in each data source + this.dataSources.forEach(dataSource => { + for (let userGroupIdentifier in userGroups[dataSource]) { + const userGroup = userGroups[dataSource][userGroupIdentifier]; + + // Do not add the same user group twice + if (addedUserGroups[userGroup.identifier!]) + return; + + // Link to default creation data source if we cannot manage this user + if (!PermissionSet.hasSystemPermission(permissions[dataSource], PermissionSet.SystemPermissionType.ADMINISTER) + && !PermissionSet.hasUserGroupPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.UPDATE, userGroup.identifier) + && !PermissionSet.hasUserGroupPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.DELETE, userGroup.identifier)) + dataSource = this.getDefaultDataSource()!; + + // Add user group to overall list + addedUserGroups[userGroup.identifier!] = userGroup; + this.manageableUserGroups!.push(new ManageableUserGroup({ + 'dataSource': dataSource, + 'userGroup': userGroup + })); + + } + + this.dataSourceView?.updateSource(this.manageableUserGroups!); + }); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.html new file mode 100644 index 0000000000..cd39fca88b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.html @@ -0,0 +1,81 @@ + +
      + + +

      {{'SETTINGS_USERS.HELP_USERS' | transloco}}

      + + + + + + + + + + + + + + + + + + + + + + + +
      + {{'SETTINGS_USERS.TABLE_HEADER_USERNAME' | transloco}} + + {{'SETTINGS_USERS.TABLE_HEADER_ORGANIZATION' | transloco}} + + {{'SETTINGS_USERS.TABLE_HEADER_FULL_NAME' | transloco}} + + {{'SETTINGS_USERS.TABLE_HEADER_LAST_ACTIVE' | transloco}} +
      + +
      + {{manageableUser.user.username}} +
      +
      {{manageableUser.user.attributes['guac-organization']}}{{manageableUser.user.attributes['guac-full-name']}}{{(manageableUser.user.lastActive || 0) | date : dateFormat || undefined}}
      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts new file mode 100644 index 0000000000..831cd65acf --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts @@ -0,0 +1,340 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { ManageableUser } from '../../../manage/types/ManageableUser'; +import { PermissionSet } from '../../../rest/types/PermissionSet'; +import { SortOrder } from '../../../list/types/SortOrder'; +import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { TranslocoService } from '@ngneat/transloco'; +import { BehaviorSubject, take } from 'rxjs'; +import keys from 'lodash/keys'; +import { DataSourceService } from '../../../rest/service/data-source-service.service'; +import { Router } from '@angular/router'; +import { RequestService } from '../../../rest/service/request.service'; +import { PermissionService } from '../../../rest/service/permission.service'; +import { UserService } from '../../../rest/service/user.service'; +import { User } from '../../../rest/types/User'; +import { SortService } from '../../../list/services/sort.service'; +import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; +import { GuacFilterComponent } from '../../../list/components/guac-filter/guac-filter.component'; +import { DataSource } from '../../../list/types/DataSource'; +import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; + +/** + * A component for managing all users in the system. + */ +@Component({ + selector: 'guac-settings-users', + templateUrl: './guac-settings-users.component.html', + encapsulation: ViewEncapsulation.None +}) +export class GuacSettingsUsersComponent implements OnInit { + + /** + * Reference to the instance of the pager component. + */ + @ViewChild(GuacPagerComponent, {static: true}) pager!: GuacPagerComponent; + + /** + * Reference to the instance of the filter component. + */ + @ViewChild(GuacFilterComponent, {static: true}) filter!: GuacFilterComponent; + + /** + * Identifier of the current user + */ + private currentUsername: string | null = this.authenticationService.getCurrentUsername(); + + /** + * The identifiers of all data sources accessible by the current + * user. + */ + private readonly dataSources: string[] = this.authenticationService.getAvailableDataSources(); + + /** + * TODO: document + */ + dataSourceView: DataSource | null = null; + + /** + * All visible users, along with their corresponding data sources. + */ + manageableUsers: ManageableUser[] | null = null; + + /** + * The name of the new user to create, if any, when user creation + * is requested via newUser(). + */ + newUsername: string = ''; + + /** + * Map of data source identifiers to all permissions associated + * with the current user within that data source, or null if the + * user's permissions have not yet been loaded. + */ + permissions: Record | null = null; + + /** + * Array of all user properties that are filterable. + */ + readonly filteredUserProperties: string[] = [ + 'user.attributes["guac-full-name"]', + 'user.attributes["guac-organization"]', + 'user.lastActive', + 'user.username' + ]; + + /** + * The date format for use for the last active date. + */ + dateFormat: string | null = null; + + /** + * SortOrder instance which stores the sort order of the listed + * users. + */ + readonly initialOrder: SortOrder = new SortOrder([ + 'user.username', + '-user.lastActive', + 'user.attributes["guac-organization"]', + 'user.attributes["guac-full-name"]' + ]); + + /** + * Observable of the current SortOrder instance which stores the sort order of the listed + * users. The value is updated by the GuacSortOrderDirective. + */ + order: BehaviorSubject = new BehaviorSubject(this.initialOrder); + + /** + * Inject required services and initialize fields. + */ + constructor(private authenticationService: AuthenticationService, + private dataSourceService: DataSourceService, + private permissionService: PermissionService, + private requestService: RequestService, + private userService: UserService, + private translocoService: TranslocoService, + private sortService: SortService, + private dataSourceBuilderService: DataSourceBuilderService, + private router: Router) { + + + // Get session date format + this.translocoService.selectTranslate('SETTINGS_USERS.FORMAT_DATE') + .pipe(take(1)) + .subscribe((retrievedDateFormat: string) => { + // Store received date format + this.dateFormat = retrievedDateFormat; + }); + + } + + ngOnInit(): void { + + // Build the data source for the users list entries. + this.dataSourceView = this.dataSourceBuilderService.getBuilder() + .source([]) + .filter(this.filter.searchStringChange, this.filteredUserProperties) + .sort(this.order) + .paginate(this.pager.page) + .build(); + + // Retrieve current permissions + this.retrieveCurrentPermissions(); + } + + /** + * Retrieves the current permissions. + * @private + */ + private retrieveCurrentPermissions(): void { + + this.dataSourceService.apply( + (ds: string, username: string) => this.permissionService.getEffectivePermissions(ds, username), + this.dataSources, + this.currentUsername + ) + .then(permissions => { + + // Store retrieved permissions + this.permissions = permissions; + + // Return to home if there's nothing to do here + if (!this.canManageUsers()) { + this.router.navigate(['/']); + return; + } + + let userPromise: Promise>>; + + // If users can be created, list all readable users + if (this.canCreateUsers()) + userPromise = this.dataSourceService.apply((ds: string) => this.userService.getUsers(ds), this.dataSources); + + // Otherwise, list only updatable/deletable users + else + userPromise = this.dataSourceService.apply(this.userService.getUsers, this.dataSources, [ + PermissionSet.ObjectPermissionType.UPDATE, + PermissionSet.ObjectPermissionType.DELETE + ]); + + userPromise.then((allUsers) => { + + const addedUsers: Record = {}; + const manageableUsers: ManageableUser[] = []; + + // For each user in each data source + this.dataSources.forEach(dataSource => { + for (let username in allUsers[dataSource]) { + const user = allUsers[dataSource][username]; + + // Do not add the same user twice + if (addedUsers[user.username]) + return; + + // Link to default creation data source if we cannot manage this user + if (!PermissionSet.hasSystemPermission(permissions[dataSource], PermissionSet.SystemPermissionType.ADMINISTER) + && !PermissionSet.hasUserPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.UPDATE, user.username) + && !PermissionSet.hasUserPermission(permissions[dataSource], PermissionSet.ObjectPermissionType.DELETE, user.username)) + dataSource = this.getDefaultDataSource() || ''; + + // Add user to overall list + addedUsers[user.username] = user; + manageableUsers.push(new ManageableUser({ + dataSource: dataSource, + user: user + })); + + } + + }); + + this.manageableUsers = manageableUsers; + this.dataSourceView?.updateSource(this.manageableUsers); + + }, this.requestService.PROMISE_DIE); + + }, this.requestService.PROMISE_DIE); + } + + /** + * Returns whether critical data has completed being loaded. + * + * @returns + * true if enough data has been loaded for the user interface + * to be useful, false otherwise. + */ + isLoaded(): boolean { + + return this.dateFormat !== null + && this.manageableUsers !== null + && this.permissions !== null + && this.dataSourceView !== null; + + } + + /** + * Returns the identifier of the data source that should be used by + * default when creating a new user. + * + * @return + * The identifier of the data source that should be used by + * default when creating a new user, or null if user creation + * is not allowed. + */ + getDefaultDataSource(): string | null { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return null; + + // For each data source + const dataSources = keys(this.permissions).sort(); + for (let i = 0; i < dataSources.length; i++) { + + // Retrieve corresponding permission set + const dataSource = dataSources[i]; + const permissionSet = this.permissions[dataSource]; + + // Can create users if administrator or have explicit permission + if (PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.ADMINISTER) + || PermissionSet.hasSystemPermission(permissionSet, PermissionSet.SystemPermissionType.CREATE_USER)) + return dataSource; + + } + + // No data sources allow user creation + return null; + + } + + /** + * Returns whether the current user can create new users within at + * least one data source. + * + * @return + * true if the current user can create new users within at + * least one data source, false otherwise. + */ + canCreateUsers(): boolean { + return this.getDefaultDataSource() !== null; + } + + /** + * Returns whether the current user can create new users or make + * changes to existing users within at least one data source. The + * user management interface as a whole is useless if this function + * returns false. + * + * @return + * true if the current user can create new users or make + * changes to existing users within at least one data source, + * false otherwise. + */ + canManageUsers(): boolean { + + // Abort if permissions have not yet loaded + if (!this.permissions) + return false; + + // Creating users counts as management + if (this.canCreateUsers()) + return true; + + // For each data source + for (let dataSource in this.permissions) { + + // Retrieve corresponding permission set + const permissionSet = this.permissions[dataSource]; + + // Can manage users if granted explicit update or delete + if (PermissionSet.hasUserPermission(permissionSet, PermissionSet.ObjectPermissionType.UPDATE) + || PermissionSet.hasUserPermission(permissionSet, PermissionSet.ObjectPermissionType.DELETE)) + return true; + + } + + // No data sources allow management of users + return false; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.html new file mode 100644 index 0000000000..fd01062d6c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.html @@ -0,0 +1,23 @@ + + + {{'SETTINGS_CONNECTIONS.ACTION_NEW_CONNECTION_GROUP' | transloco}} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.ts new file mode 100644 index 0000000000..167d4b6a37 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection-group/new-connection-group.component.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * A component which displays a link to create a new connection group in a specific + * location within the list of accessible connections and groups. + */ +@Component({ + selector: 'guac-new-connection-group', + templateUrl: './new-connection-group.component.html', + encapsulation: ViewEncapsulation.None +}) +export class NewConnectionGroupComponent { + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.html new file mode 100644 index 0000000000..7f397fe423 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.html @@ -0,0 +1,23 @@ + + + {{'SETTINGS_CONNECTIONS.ACTION_NEW_CONNECTION' | transloco}} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.ts new file mode 100644 index 0000000000..61180edd44 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-connection/new-connection.component.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * A component which displays a link to create a new connection in a specific + * location within the list of accessible connections and groups. + */ +@Component({ + selector: 'guac-new-connection', + templateUrl: './new-connection.component.html', + encapsulation: ViewEncapsulation.None +}) +export class NewConnectionComponent { + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.html new file mode 100644 index 0000000000..e92f6e9c2c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.html @@ -0,0 +1,23 @@ + + + {{'SETTINGS_CONNECTIONS.ACTION_NEW_SHARING_PROFILE' | transloco}} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.ts new file mode 100644 index 0000000000..ab8fad137b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/new-sharing-profile/new-sharing-profile.component.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { GroupListItem } from '../../../group-list/types/GroupListItem'; + +/** + * A component which displays a link to create a new sharing profile for a specific + * connection within the list of accessible connections and groups. + */ +@Component({ + selector: 'guac-new-sharing-profile', + templateUrl: './new-sharing-profile.component.html', + encapsulation: ViewEncapsulation.None +}) +export class NewSharingProfileComponent { + @Input({required: true}) item!: GroupListItem; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.html new file mode 100644 index 0000000000..7ccb774b94 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.html @@ -0,0 +1,34 @@ + +
      + +
      +

      {{'SETTINGS.SECTION_HEADER_SETTINGS' | transloco}}

      + +
      + + +
      + +
      + + + + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.ts new file mode 100644 index 0000000000..1ab05449e2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/settings/settings.component.ts @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { PageDefinition } from '../../../navigation/types/PageDefinition'; +import { UserPageService } from '../../../manage/services/user-page.service'; + +/** + * The component for the general settings page. + */ +@Component({ + selector: 'guac-settings', + templateUrl: './settings.component.html', + encapsulation: ViewEncapsulation.None +}) +export class SettingsComponent implements OnInit { + + /** + * The array of settings pages available to the current user, or null if + * not yet known. + */ + settingsPages: PageDefinition[] | null = null; + + constructor(private userPageService: UserPageService) { + } + + /** + * Retrieve settings pages. + */ + ngOnInit(): void { + this.userPageService.getSettingsPages() + .subscribe(pages => { + this.settingsPages = pages; + }); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/csv.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/csv.service.ts new file mode 100644 index 0000000000..19e176c794 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/csv.service.ts @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +/** + * A service for generating downloadable CSV links given arbitrary data. + */ +@Injectable({ + providedIn: 'root' +}) +export class CsvService { + + /** + * Creates a new Blob containing properly-formatted CSV generated from the + * given array of records, where each entry in the provided array is an + * array of arbitrary fields. + * + * @param {Array.<*[]>} records + * An array of all records making up the desired CSV. + * + * @returns {Blob} + * A new Blob containing each provided record in CSV format. + */ + toBlob(records: any[][]): Blob { + return new Blob([this.encodeCSV(records)], {type: 'text/csv'}); + } + + /** + * Encodes an entire array of records as properly-formatted CSV, where each + * entry in the provided array is an array of arbitrary fields. + * + * @param records + * An array of all records making up the desired CSV. + * + * @return + * An entire CSV containing each provided record, separated by CR+LF + * line terminators. + */ + encodeCSV(records: any[][]): string { + return records.map(record => this.encodeRecord(record)).join('\r\n'); + } + + /** + * Encodes each of the provided values for inclusion in a CSV file as + * fields within the same record (in the manner specified by + * encodeField()), separated by commas. + * + * @param fields + * An array of arbitrary values which make up the record. + * + * @return + * A CSV record containing the each value in the given array. + */ + private encodeRecord(fields: any[]): string { + return fields.map(field => this.encodeField(field)).join(','); + } + + /** + * Encodes an arbitrary value for inclusion in a CSV file as an individual + * field. With the exception of null and undefined (which are both + * interpreted as equivalent to an empty string), all values are coerced to + * a string and, if non-numeric, included within double quotes. If the + * value itself includes double quotes, those quotes will be properly + * escaped. + * + * @param field + * The arbitrary value to encode. + * + * @return + * The provided value, coerced to a string and properly escaped for + * CSV. + */ + private encodeField(field: any): string { + + // Coerce field to string + if (field === null || field === undefined) + field = ''; + else + field = '' + field; + + // Do not quote numeric fields + if (/^[0-9.]*$/.test(field)) + return field; + + // Enclose all other fields in quotes, escaping any quotes therein + return '"' + field.replace(/"/g, '""') + '"'; + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts new file mode 100644 index 0000000000..340c117d77 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { DOCUMENT } from '@angular/common'; +import { Inject, Injectable } from '@angular/core'; +import { NavigationEnd, Router } from '@angular/router'; +import { getBrowserLang } from '@ngneat/transloco'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import * as jstz from 'jstz'; +import { filter } from 'rxjs'; +import { + GuacFrontendEventArguments +} from '../../events/types/GuacFrontendEventArguments'; +import { DEFAULT_LANGUAGE } from '../../locale/service/translation.service'; +import { LocalStorageService } from '../../storage/local-storage.service'; +import { Preferences } from '../types/Preferences'; + +/** + * The storage key of Guacamole preferences within local storage. + */ +const GUAC_PREFERENCES_STORAGE_KEY: string = 'GUAC_PREFERENCES'; + +/** + * A service for setting and retrieving browser-local preferences. Preferences + * may be any JSON-serializable type. + */ +@Injectable({ + providedIn: 'root' +}) +export class PreferenceService { + + /** + * All currently-set preferences, as name/value pairs. Each property name + * corresponds to the name of a preference. + */ + preferences: Preferences; + + /** + * All valid input method type names. + */ + inputMethods = { + + /** + * No input method is used. Keyboard events are generated from a + * physical keyboard. + * + * @constant + */ + NONE: 'none', + + /** + * Keyboard events will be generated from the Guacamole on-screen + * keyboard. + * + * @constant + */ + OSK: 'osk', + + /** + * Keyboard events will be generated by inferring the keys necessary to + * produce typed text from an IME (Input Method Editor) such as the + * native on-screen keyboard of a mobile device. + * + * @constant + */ + TEXT: 'text' + + }; + + private window: Window; + + constructor(private localStorageService: LocalStorageService, + private guacEventService: GuacEventService, + @Inject(DOCUMENT) private document: Document, + private router: Router) { + this.window = this.document.defaultView as Window; + + this.preferences = { + emulateAbsoluteMouse: true, + inputMethod: this.inputMethods.NONE, + language: this.getDefaultLanguageKey(), + timezone: this.getDetectedTimezone() + }; + + // Get stored preferences from localStorage + const storedPreferences = this.localStorageService.getItem(GUAC_PREFERENCES_STORAGE_KEY); + if (storedPreferences) + this.preferences = {...this.preferences, ...storedPreferences}; + + // Persist settings when window is unloaded + this.window.addEventListener('unload', this.save); + + + // Persist settings upon navigation + this.router.events.pipe(filter((event) => event instanceof NavigationEnd)) + .subscribe(() => this.save()); + + + // Persist settings upon logout + this.guacEventService.on('guacLogout', () => { + this.save(); + }); + } + + /** + * Returns the key of the language currently in use within the browser. + * This is not necessarily the user's desired language, but is rather the + * language user by the browser's interface. + * + * @returns + * The key of the language currently in use within the browser. + */ + getDefaultLanguageKey(): string { + + // Pull browser language, falling back to English + return getBrowserLang() || DEFAULT_LANGUAGE; + + } + + /** + * Return the timezone detected for the current browser session + * by the JSTZ timezone library. + * + * @returns + * The name of the currently-detected timezone in IANA zone key + * format (Olson time zone database). + */ + getDetectedTimezone(): string { + return jstz.determine().name(); + } + + /** + * Persists the current values of all preferences, if possible. + */ + save() { + this.localStorageService.setItem(GUAC_PREFERENCES_STORAGE_KEY, this.preferences); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/settings.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/settings.module.ts new file mode 100644 index 0000000000..ad10ee5fdd --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/settings.module.ts @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule, NgOptimizedImage } from '@angular/common'; +import { TranslocoModule } from '@ngneat/transloco'; +import { ListModule } from '../list/list.module'; +import { RouterLink, RouterOutlet } from '@angular/router'; +import { SettingsComponent } from './components/settings/settings.component'; +import { NavigationModule } from '../navigation/navigation.module'; +import { GuacSettingsUsersComponent } from './components/guac-settings-users/guac-settings-users.component'; +import { + GuacSettingsPreferencesComponent +} from './components/guac-settings-preferences/guac-settings-preferences.component'; +import { FormModule } from '../form/form.module'; +import { FormsModule } from '@angular/forms'; +import { + GuacSettingsUserGroupsComponent +} from './components/guac-settings-user-groups/guac-settings-user-groups.component'; +import { IndexModule } from '../index/index.module'; +import { + GuacSettingsConnectionsComponent +} from './components/guac-settings-connections/guac-settings-connections.component'; +import { GroupListModule } from '../group-list/group-list.module'; +import { ConnectionComponent } from './components/connection/connection.component'; +import { ConnectionGroupComponent } from './components/connection-group/connection-group.component'; +import { NewConnectionComponent } from './components/new-connection/new-connection.component'; +import { NewConnectionGroupComponent } from './components/new-connection-group/new-connection-group.component'; +import { NewSharingProfileComponent } from './components/new-sharing-profile/new-sharing-profile.component'; +import { GuacSettingsConnectionHistoryComponent } from './components/guac-settings-connection-history/guac-settings-connection-history.component'; +import { GuacSettingsSessionsComponent } from './components/guac-settings-sessions/guac-settings-sessions.component'; + +/** + * The module for manipulation of general settings. This is distinct from the + * "manage" module, which deals only with administrator-level system management. + */ +@NgModule({ + declarations: [ + GuacSettingsUsersComponent, + SettingsComponent, + GuacSettingsPreferencesComponent, + GuacSettingsUserGroupsComponent, + GuacSettingsConnectionsComponent, + ConnectionComponent, + ConnectionGroupComponent, + NewConnectionComponent, + NewConnectionGroupComponent, + NewSharingProfileComponent, + GuacSettingsConnectionHistoryComponent, + GuacSettingsSessionsComponent + ], + imports: [ + CommonModule, + TranslocoModule, + ListModule, + RouterLink, + NavigationModule, + RouterOutlet, + FormModule, + NgOptimizedImage, + FormsModule, + IndexModule, + GroupListModule, + ], + exports: [ + GuacSettingsUsersComponent, + SettingsComponent, + GuacSettingsPreferencesComponent, + GuacSettingsUserGroupsComponent, + GuacSettingsConnectionsComponent, + GuacSettingsConnectionHistoryComponent, + GuacSettingsSessionsComponent + ] +}) +export class SettingsModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/buttons.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/buttons.css new file mode 100644 index 0000000000..128449f0dc --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/buttons.css @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +a.button.add-user, +a.button.add-user-group, +a.button.add-connection, +a.button.add-connection-group, +a.button.import-connections { + font-size: 0.8em; + padding-left: 1.8em; + position: relative; +} + +a.button.add-user::before, +a.button.add-user-group::before, +a.button.add-connection::before, +a.button.add-connection-group::before, +a.button.import-connections::before { + + content: ' '; + position: absolute; + width: 1.8em; + top: 0; + bottom: 0; + left: 0; + + background-repeat: no-repeat; + background-size: 1em; + background-position: 0.5em 0.45em; + +} + +a.button.add-user::before { + background-image: url('^images/action-icons/guac-user-add.svg'); +} + +a.button.add-user-group::before { + background-image: url('^images/action-icons/guac-user-group-add.svg'); +} + +a.button.add-connection::before { + background-image: url('^images/action-icons/guac-monitor-add.svg'); +} + +a.button.add-connection-group::before { + background-image: url('^images/action-icons/guac-group-add.svg'); +} + +a.button.import-connections::before { + background-image: url('^images/action-icons/guac-file-import.svg'); +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/connection-list.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/connection-list.css new file mode 100644 index 0000000000..efcb9dc3bf --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/connection-list.css @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.settings.connections .connection-list .new-connection, +.settings.connections .connection-list .new-connection-group, +.settings.connections .connection-list .new-sharing-profile { + opacity: 0.5; + font-style: italic; +} + +.settings.connections .connection-list .new-connection a, +.settings.connections .connection-list .new-connection a:hover, +.settings.connections .connection-list .new-connection a:visited, +.settings.connections .connection-list .new-connection-group a, +.settings.connections .connection-list .new-connection-group a:hover, +.settings.connections .connection-list .new-connection-group a:visited, +.settings.connections .connection-list .new-sharing-profile a, +.settings.connections .connection-list .new-sharing-profile a:hover, +.settings.connections .connection-list .new-sharing-profile a:visited { + text-decoration:none; + color: black; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history-player.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history-player.css new file mode 100644 index 0000000000..7570589cce --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history-player.css @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.settings.connectionHistoryPlayer { + + background: black; + color: white; + + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + padding: 0; + margin: 0; + +} + +.settings.connectionHistoryPlayer guac-player { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.settings.connectionHistoryPlayer .guac-player-help-no-recording, +.settings.connectionHistoryPlayer .guac-player-help-recording-error { + margin: 8px; + max-width: 480px; +} + +.settings.connectionHistoryPlayer .guac-player-button { + + display: inline-block; + + border: 2px solid white; + border-radius: 0; + background: black; + color: white; + font-weight: bold; + + padding: 0.5em 1em; + margin: 8px; + +} + +.settings.connectionHistoryPlayer .guac-player-controls { + padding: 0.25em; +} + +.settings.connectionHistoryPlayer .guac-player-controls { + background: rgba(0, 0, 0, 0.5); +} + +.settings.connectionHistoryPlayer.playing .guac-player-controls { + opacity: 0; + -webkit-transition: opacity 0.25s linear 0.25s; + -moz-transition: opacity 0.25s linear 0.25s; + -o-transition: opacity 0.25s linear 0.25s; + transition: opacity 0.25s linear 0.25s; +} + +.settings.connectionHistoryPlayer.paused .guac-player-controls, +.settings.connectionHistoryPlayer.playing:hover .guac-player-controls { + opacity: 1; + -webkit-transition-delay: 0s; + -moz-transition-delay: 0s; + -o-transition-delay: 0s; + transition-delay: 0s; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history.css new file mode 100644 index 0000000000..6eed67756f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/history.css @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.settings.connectionHistory .filter { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: row; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: horizontal; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: horizontal; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: row; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: row; + +} + +.settings.connectionHistory .filter .search-string { + -ms-flex: 1 1 auto; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + flex: 1 1 auto; +} + +.settings.connectionHistory .filter .search-button, +.settings.connectionHistory .filter button { + + -ms-flex: 0 0 auto; + -moz-box-flex: 0; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; + + margin-top: 0; + margin-bottom: 0; + +} + +.settings.connectionHistory .history-list { + width: 100%; +} + +.settings.connectionHistory a.history-session-recording { + color: #0000ee; +} + +.settings.connectionHistory a.history-session-recording::after { + display: inline-block; + content: ' '; + width: 1em; + height: 1em; + background-size: contain; + background-position: center; + background-repeat: no-repeat; + background-image: url('^images/action-icons/guac-play-link.svg'); + vertical-align: middle; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/input-method.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/input-method.css new file mode 100644 index 0000000000..8fe6b6a327 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/input-method.css @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.preferences .input-method .caption { + margin-left: 2em; + margin-right: 2em; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/mouse-mode.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/mouse-mode.css new file mode 100644 index 0000000000..7cbb21d1f4 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/mouse-mode.css @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.preferences .mouse-mode .choices { + text-align: center; +} + +.preferences .mouse-mode .choice { + display: inline-block; +} + +.preferences .mouse-mode .choice .figure { + display: inline-block; + vertical-align: middle; + width: 75%; + max-width: 320px; +} + +.preferences .mouse-mode .figure img { + display: block; + width: 100%; + max-width: 320px; + margin: 1em auto; +} + +.preferences .mouse-mode .caption { + text-align: left; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/preferences.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/preferences.css new file mode 100644 index 0000000000..dbb2330a85 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/preferences.css @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.preferences .form .fields { + display: table; + padding-left: 0.5em; + border-left: 3px solid rgba(0,0,0,0.125); +} + +.preferences .form .fields .labeled-field { + display: table-row; +} + +.preferences .form .fields .field-header, +.preferences .form .fields .form-field { + display: table-cell; + padding: 0.125em; + vertical-align: top; +} + +.preferences .form .fields .field-header { + padding-right: 1em; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/sessions.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/sessions.css new file mode 100644 index 0000000000..3ff22be856 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/sessions.css @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.settings table.session-list { + width: 100%; +} + +.settings table.session-list tr.session:hover { + background: #CDA; +} + +.settings table.session-list .select-session { + min-width: 2em; + text-align: center; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/settings.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/settings.css new file mode 100644 index 0000000000..390a793187 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/settings.css @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.settings table.properties th { + text-align: left; + font-weight: normal; + padding-right: 1em; +} + +.settings .action-buttons { + text-align: center; + margin: 1em 0; +} + +.settings .toolbar { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: center; + -ms-flex-direction: row; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: center; + -moz-box-orient: horizontal; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: center; + -webkit-box-orient: horizontal; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: center; + -webkit-flex-direction: row; + + /* W3C */ + display: flex; + align-items: center; + flex-direction: row; + +} + +.settings .toolbar .action-buttons { + margin-right: 0.25em; +} + +.settings .toolbar .filter { + -ms-flex: 1 1 auto; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + flex: 1 1 auto; +} + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-group-list.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-group-list.css new file mode 100644 index 0000000000..2040eb440a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-group-list.css @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.settings.user-groups table.user-group-list { + width: 100%; +} + +.settings.user-groups table.user-group-list th.user-group-name, +.settings.user-groups table.user-group-list td.user-group-name { + width: 100%; +} + +.settings.user-groups table.user-group-list tr.user td.user-group-name a[href] { + display: block; + padding: .5em 1em; +} + +.settings.user-groups table.user-group-list tr.user td.user-group-name { + padding: 0; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-list.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-list.css new file mode 100644 index 0000000000..e130d0da18 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/styles/user-list.css @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.settings.users table.user-list { + width: 100%; +} + +.settings.users table.user-list th.last-active, +.settings.users table.user-list td.last-active { + white-space: nowrap; +} + +.settings.users table.user-list th, +.settings.users table.user-list td { + width: 25%; +} + +.settings.users table.user-list tr.user td.username a[href] { + display: block; + padding: .5em 1em; +} + +.settings.users table.user-list tr.user td.username { + padding: 0; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ActiveConnectionWrapper.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ActiveConnectionWrapper.ts new file mode 100644 index 0000000000..2a99a06243 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ActiveConnectionWrapper.ts @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ActiveConnection } from '../../rest/types/ActiveConnection'; +import { Optional } from '../../util/utility-types'; + +/** + * Wrapper for ActiveConnection which adds display-specific + * properties, such as a checked option. + */ +export class ActiveConnectionWrapper { + + /** + * The identifier of the data source associated with the + * ActiveConnection wrapped by this ActiveConnectionWrapper. + */ + dataSource: string; + + /** + * The display name of this connection. + */ + name?: string; + + /** + * The date and time this session began, pre-formatted for display. + */ + startDate: string; + + /** + * The wrapped ActiveConnection. + */ + activeConnection: ActiveConnection; + + /** + * A flag indicating that the active connection has been selected. + */ + checked: boolean; + + /** + * Create a new ActiveConnectionWrapper. + * + * @param template + * The object whose properties should be copied within the new + * ActiveConnectionWrapper. + */ + constructor(template: Optional) { + this.dataSource = template.dataSource; + this.name = template.name; + this.startDate = template.startDate; + this.activeConnection = template.activeConnection; + this.checked = template.checked || false; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.ts new file mode 100644 index 0000000000..873fb886b9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/ConnectionHistoryEntryWrapper.ts @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ConnectionHistoryEntry } from '../../rest/types/ConnectionHistoryEntry'; +import findKey from 'lodash/findKey'; +import { ActivityLog } from '../../rest/types/ActivityLog'; +import { translate } from '@ngneat/transloco'; + +declare namespace ConnectionHistoryEntryWrapper { + type Log = typeof ConnectionHistoryEntryWrapper.Log.prototype; +} + +/** + * Wrapper for ConnectionHistoryEntry which adds display-specific + * properties, such as a duration. + */ +export class ConnectionHistoryEntryWrapper { + + /** + * The data source associated with the wrapped history record. + */ + dataSource: string; + + /** + * The wrapped ConnectionHistoryEntry. + */ + entry: ConnectionHistoryEntry; + + /** + * The total amount of time the connection associated with the wrapped + * history record was open, in seconds. + */ + duration: number; + + /** + * An object providing value and unit properties, denoting the duration + * and its corresponding units. + */ + readableDuration: ConnectionHistoryEntry.Duration | null = null; + + /** + * The string to display as the duration of this history entry. If a + * duration is available, its value and unit will be exposed to any + * given translation string as the VALUE and UNIT substitution + * variables respectively. + */ + readableDurationText: string; + + /** + * The graphical session recording associated with this history entry, + * if any. If no session recordings are associated with the entry, this + * will be null. If there are multiple session recordings, this will be + * the first such recording. + */ + sessionRecording: ConnectionHistoryEntryWrapper.Log | null = null; + + /** + * Create a new ConnectionHistoryEntryWrapper. + * + * @param historyEntry + * The ConnectionHistoryEntry that should be wrapped. + */ + constructor(dataSource: string, historyEntry: ConnectionHistoryEntry) { + this.dataSource = dataSource; + this.entry = historyEntry; + this.duration = historyEntry.endDate! - historyEntry.startDate!; + + // Set the duration if the necessary information is present + if (historyEntry.endDate && historyEntry.startDate) + this.readableDuration = new ConnectionHistoryEntry.Duration(this.duration); + + this.readableDurationText = 'SETTINGS_CONNECTION_HISTORY.TEXT_HISTORY_DURATION'; + + // Inform user if end date is not known + if (!historyEntry.endDate) + this.readableDurationText = 'SETTINGS_CONNECTION_HISTORY.INFO_CONNECTION_DURATION_UNKNOWN'; + + this.sessionRecording = this.getSessionRecording(); + } + + private getSessionRecording(): ConnectionHistoryEntryWrapper.Log | null { + + const identifier = this.entry.identifier; + if (!identifier) + return null; + + const name: string | undefined = findKey(this.entry.logs, log => log.type === ActivityLog.Type.GUACAMOLE_SESSION_RECORDING); + if (!name) + return null; + + const log: ActivityLog = (this.entry.logs as Record)[name]; + + const description = log.description && log.description.key ? translate(log.description.key, log.description.variables) : '' + + return new ConnectionHistoryEntryWrapper.Log({ + + url: '/settings/' + encodeURIComponent(this.dataSource) + + '/recording/' + encodeURIComponent(identifier) + + '/' + encodeURIComponent(name), + + description + + }); + + } + + /** + * Representation of the ActivityLog of a ConnectionHistoryEntry which adds + * display-specific properties, such as a URL for viewing the log. + */ + static Log = class { + + /** + * The relative URL for a session recording player that loads the + * session recording represented by this log. + */ + url: string + + /** + * A promise that resolves with a human-readable description of the log. + */ + description: Promise; + + /** + * Create a new ConnectionHistoryEntryWrapper.Log object. + * + * @param template + * The object whose properties should be copied within the new + * ConnectionHistoryEntryWrapper.Log. + */ + constructor(template: ConnectionHistoryEntryWrapper.Log | any = {}) { + this.url = template.url; + this.description = template.description; + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/Preferences.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/Preferences.ts new file mode 100644 index 0000000000..7f334a9e9b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/types/Preferences.ts @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Preferences, as name/value pairs. Each property name + * corresponds to the name of a preference. + */ +export interface Preferences { + /** + * Whether translation of touch to mouse events should emulate an + * absolute pointer device, or a relative pointer device. + */ + emulateAbsoluteMouse: boolean; + + /** + * The default input method. This may be any of the values defined + * within preferenceService.inputMethods. + */ + inputMethod: string; + + /** + * The key of the desired display language. + */ + language: string; + + /** + * The timezone set by the user, in IANA zone key format (Olson time + * zone database). + */ + timezone: string +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.spec.ts new file mode 100644 index 0000000000..9fd9614a79 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.spec.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { LocalStorageService } from './local-storage.service'; + +describe('LocalStorageService', () => { + let service: LocalStorageService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(LocalStorageService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts new file mode 100644 index 0000000000..5ff1fa1b5d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +/** + * Service for setting, removing, and retrieving localStorage keys. If access + * to localStorage is disabled, or the browser does not support localStorage, + * key values are temporarily stored in memory instead. If necessary, the same + * functionality is also available at the localStorageServiceProvider level. + */ +@Injectable({ + providedIn: 'root' +}) +export class LocalStorageService { + + /** + * Internal cache of key/value pairs stored within localStorage, updated + * lazily as keys are retrieved, updated, or removed. If localStorage is + * not actually available, then this cache will be the sole storage + * location for these key/value pairs. + * + * @type Object. + */ + storedItems: Record = {}; + + /** + * Stores the given value within localStorage under the given key. If access + * to localStorage is not provided/implemented by the browser, the key/value + * pair will be stored internally (in memory) only, with the stored value + * remaining retrievable via getItem() until the browser tab/window is + * closed. + * + * @param key + * The arbitrary, unique key under which the value should be stored. + * + * @param value + * The object to store under the given key. This may be any object that + * can be serialized as JSON, and will automatically be serialized as + * JSON prior to storage. + */ + setItem(key: string, value: any): void { + // Store given value internally + const data = JSON.stringify(value); + (this.storedItems)[key] = data; + + // Additionally store value within localStorage if allowed + try { + if (window.localStorage) + localStorage.setItem(key, data); + } catch (ignore) { + } + } + + /** + * Removes the item having the given key from localStorage. If access to + * localStorage is not provided/implemented by the browser, the item is + * removed solely from internal, in-memory storage. If no such item exists, + * this function has no effect. + * + * @param key + * The arbitrary, unique key of the item to remove from localStorage. + */ + removeItem(key: string) { + + // Evict key from internal storage + delete this.storedItems[key]; + + // Remove key from localStorage if allowed + try { + if (window.localStorage) + localStorage.removeItem(key); + } catch (ignore) { + } + + }; + + /** + * Retrieves the value currently stored within localStorage for the item + * having the given key. If access to localStorage is not + * provided/implemented by the browser, the item is retrieved from + * internal, in-memory storage. The retrieved value is automatically + * deserialized from JSON prior to being returned. + * + * @param key + * The arbitrary, unique key of the item to retrieve from localStorage. + * + * @returns + * The value stored within localStorage under the given key, + * automatically deserialized from JSON, or null if no such item is + * present. + */ + getItem(key: string): object | null { + + // Attempt to refresh internal storage from localStorage + try { + if (window.localStorage) { + const data = localStorage.getItem(key); + if (data) + this.storedItems[key] = data; + } + } catch (ignore) { + } + + // Pull and parse value from internal storage, if present + const data = this.storedItems[key]; + if (data) + return JSON.parse(data); + + // No value defined for given key + return null; + + }; + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.spec.ts new file mode 100644 index 0000000000..e925c5db50 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.spec.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { SessionStorageFactory } from './session-storage-factory.service'; + +describe('SessionStorageFactoryService', () => { + let service: SessionStorageFactory; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SessionStorageFactory); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts new file mode 100644 index 0000000000..9d851ff5c0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import cloneDeep from 'lodash/cloneDeep'; +import isEqual from 'lodash/isEqual'; +import { GuacFrontendEventArguments } from '../events/types/GuacFrontendEventArguments'; +import { isDefined } from '../util/is-defined'; +import { AuthenticationService } from "../auth/service/authentication.service"; + +@Injectable({ + providedIn: 'root' +}) +export class SessionStorageFactory { + + /** + * Inject required services. + */ + constructor(private authenticationService: AuthenticationService, + private readonly guacEventService: GuacEventService) { + } + + /** + * Creates session-local storage that uses the provided default value or + * getter to obtain new values as necessary. Beware that if the default is + * an object, the resulting getter provide deep copies for new values. + * + * @param template + * The default value for new users, or a getter which returns a newly- + * created default value. + * + * @param destructor + * Function which will be called just before the stored value is + * destroyed on logout, if a value is stored. + * + * @returns + * A getter/setter which returns or sets the current value of the new + * session-local storage. Newly-set values will only persist of the + * user is actually logged in. + */ + create(template: Function | any, destructor?: Function): Function { + + /** + * Whether new values may be stored and retrieved. + */ + let enabled = !!this.authenticationService.getCurrentToken(); + + /** + * Getter which returns the default value for this storage. + */ + let getter: Function; + + // If getter provided, use that + if (typeof template === 'function') + getter = template; + + // Otherwise, create and maintain a deep copy (automatically cached to + // avoid "infdig" errors) + else { + let cached = cloneDeep(template); + getter = function getIndependentCopy() { + + // Reset to template only if changed externally, such that + // session storage values can be safely used in scope watches + // even if not logged in + if (!isEqual(cached, template)) + cached = cloneDeep(template); + + return cached; + + }; + } + + /** + * The current value of this storage, or undefined if not yet set. + */ + let value: any = undefined; + + // Reset value and allow storage when the user is logged in + this.guacEventService.on('guacLogin', function userLoggedIn() { + enabled = true; + value = undefined; + }); + + // Reset value and disallow storage when the user is logged out + this.guacEventService.on('guacLogout', function userLoggedOut() { + + // Call destructor before storage is torn down + if (isDefined(value) && destructor) + destructor(value); + + // Destroy storage + enabled = false; + value = undefined; + + }); + + // Return getter/setter for value + return function sessionLocalGetterSetter(newValue: any) { + + // Only actually store/retrieve values if enabled + if (enabled) { + + // Set value if provided + if (isDefined(newValue)) + value = newValue; + + // Obtain new value if unset + if (!isDefined(value)) + value = getter(); + + // Return current value + return value; + + } + + // Otherwise, just pretend to store/retrieve + return isDefined(newValue) ? newValue : getter(); + + }; + + }; + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/storage.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/storage.module.ts new file mode 100644 index 0000000000..3361bd505f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/storage.module.ts @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + + +/** + * Module which provides generic storage services. + */ +@NgModule({ + declarations: [], + imports: [ + CommonModule + ] +}) +export class StorageModule { } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.html new file mode 100644 index 0000000000..d5da87daa1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.html @@ -0,0 +1,21 @@ + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts new file mode 100644 index 0000000000..ccfaf51c66 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../events/types/GuacFrontendEventArguments'; +import { KeyComponent } from './key.component'; + +describe('KeyComponent', () => { + let component: KeyComponent; + let fixture: ComponentFixture; + let guacEventService: GuacEventService; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [KeyComponent], + }); + fixture = TestBed.createComponent(KeyComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + guacEventService = TestBed.inject(GuacEventService); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should toggle pressed state for sticky keys', () => { + spyOn(component.pressedChange, 'emit'); + + component.sticky = true; + component.pressed = false; + fixture.detectChanges(); + + component.updateKey(new MouseEvent('click')); + + expect(component.pressed).toBeTrue(); + expect(component.pressedChange.emit).toHaveBeenCalledWith(true); + }); + + it('should not toggle pressed state for non-sticky keys', () => { + spyOn(component.pressedChange, 'emit'); + + component.sticky = false; + fixture.detectChanges(); + + component.updateKey(new MouseEvent('click')); + + expect(component.pressed).toBeFalse(); + expect(component.pressedChange.emit).not.toHaveBeenCalled(); + }); + + it('should broadcast keydown and keyup events for non-sticky keys', () => { + spyOn(guacEventService, 'broadcast'); + + component.sticky = false; + component.keysym = 65; // Example keysym + fixture.detectChanges(); + + component.updateKey(new MouseEvent('click')); + + expect(guacEventService.broadcast).toHaveBeenCalledWith('guacSyntheticKeydown', {keysym: 65}); + expect(guacEventService.broadcast).toHaveBeenCalledWith('guacSyntheticKeyup', {keysym: 65}); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts new file mode 100644 index 0000000000..ace1c2e7af --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../events/types/GuacFrontendEventArguments'; + +/** + * A component which displays a button that controls the pressed state of a + * single keyboard key. + */ +@Component({ + selector: 'guac-key', + templateUrl: './key.component.html', + encapsulation: ViewEncapsulation.None +}) +export class KeyComponent implements OnChanges { + + /** + * The text to display within the key. This will be run through the + * translation filter prior to display. + */ + @Input({required: true}) text!: string; + + /** + * The keysym to send within keyup and keydown events when this key + * is pressed or released. + */ + @Input({required: true}) keysym!: number; + + /** + * Whether this key is sticky. Sticky keys toggle their pressed + * state with each click. + * + * @default false + */ + @Input() sticky: boolean = false; + + /** + * Whether this key is currently pressed. + * + * @default false + */ + @Input() pressed: boolean = false; + @Output() pressedChange = new EventEmitter(); + + constructor(private guacEventService: GuacEventService) { + } + + /** + * Presses and releases this key, sending the corresponding keydown + * and keyup events. In the case of sticky keys, the pressed state + * is toggled, and only a single keydown/keyup event will be sent, + * depending on the current state. + * + * @param event + * The mouse event which resulted in this function being + * invoked. + */ + updateKey(event: MouseEvent) { + // If sticky, toggle pressed state + if (this.sticky) { + this.pressed = !this.pressed; + this.pressedChange.emit(this.pressed); + } + + // For all non-sticky keys, press and release key immediately + else { + this.guacEventService.broadcast('guacSyntheticKeydown', {keysym: this.keysym}); + this.guacEventService.broadcast('guacSyntheticKeyup', {keysym: this.keysym}); + } + + // Prevent loss of focus due to interaction with buttons + event.preventDefault(); + }; + + ngOnChanges(changes: SimpleChanges): void { + // Send keyup/keydown when pressed state is altered + if (changes['pressed']) { + + const isPressed = changes['pressed'].currentValue; + const wasPressed = changes['pressed'].previousValue; + + // If the key is pressed now, send keydown + if (isPressed) + this.guacEventService.broadcast('guacSyntheticKeydown', {keysym: this.keysym}); + + // If the key was pressed, but is not pressed any longer, send keyup + else if (wasPressed) + this.guacEventService.broadcast('guacSyntheticKeyup', {keysym: this.keysym}); + } + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.html new file mode 100644 index 0000000000..f35da47d75 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.html @@ -0,0 +1,34 @@ + +
      + + +
      +
      +
      {{text}}
      +
      +
      +
      + + + + +
      + +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts new file mode 100644 index 0000000000..515d916289 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TextInputComponent } from './text-input.component'; + +describe('TextInputComponent', () => { + let component: TextInputComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TextInputComponent] + }); + fixture = TestBed.createComponent(TextInputComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts new file mode 100644 index 0000000000..6b54b52e2d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts @@ -0,0 +1,336 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + AfterViewInit, + Component, + ElementRef, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import { GuacEventService } from 'guacamole-frontend-lib'; +import { + GuacFrontendEventArguments +} from '../../events/types/GuacFrontendEventArguments'; + +/** + * The number of characters to include on either side of text input + * content, to allow the user room to use backspace and delete. + */ +const TEXT_INPUT_PADDING = 4; + +/** + * The Unicode codepoint of the character to use for padding on + * either side of text input content. + */ +const TEXT_INPUT_PADDING_CODEPOINT = 0x200B; + +/** + * Keys which should be allowed through to the client when in text + * input mode, providing corresponding key events are received. + * Keys in this set will be allowed through to the server. + */ +const ALLOWED_KEYS: Record = { + 0xFE03: true, /* AltGr */ + 0xFF08: true, /* Backspace */ + 0xFF09: true, /* Tab */ + 0xFF0D: true, /* Enter */ + 0xFF1B: true, /* Escape */ + 0xFF50: true, /* Home */ + 0xFF51: true, /* Left */ + 0xFF52: true, /* Up */ + 0xFF53: true, /* Right */ + 0xFF54: true, /* Down */ + 0xFF57: true, /* End */ + 0xFF64: true, /* Insert */ + 0xFFBE: true, /* F1 */ + 0xFFBF: true, /* F2 */ + 0xFFC0: true, /* F3 */ + 0xFFC1: true, /* F4 */ + 0xFFC2: true, /* F5 */ + 0xFFC3: true, /* F6 */ + 0xFFC4: true, /* F7 */ + 0xFFC5: true, /* F8 */ + 0xFFC6: true, /* F9 */ + 0xFFC7: true, /* F10 */ + 0xFFC8: true, /* F11 */ + 0xFFC9: true, /* F12 */ + 0xFFE1: true, /* Left shift */ + 0xFFE2: true, /* Right shift */ + 0xFFE3: true, /* Left ctrl */ + 0xFFE4: true, /* Right ctrl */ + 0xFFE9: true, /* Left alt */ + 0xFFEA: true, /* Right alt */ + 0xFFFF: true /* Delete */ +}; + +/** + * A component which displays the Guacamole text input method. + */ +@Component({ + selector: 'guac-text-input', + templateUrl: './text-input.component.html', + encapsulation: ViewEncapsulation.None +}) +export class TextInputComponent implements AfterViewInit { + + /** + * Recently-sent text, ordered from oldest to most recent. + */ + sentText: string[] = []; + + /** + * Whether the "Alt" key is currently pressed within the text input + * interface. + */ + altPressed: boolean = false; + + /** + * Whether the "Ctrl" key is currently pressed within the text + * input interface. + */ + ctrlPressed: boolean = false; + + /** + * ElementRef to the text area input target. + */ + @ViewChild('target') targetRef!: ElementRef; + + /** + * The text area input target. + */ + target!: HTMLTextAreaElement; + + /** + * Whether the text input target currently has focus. Setting this + * attribute has no effect, but any bound property will be updated + * as focus is gained or lost. + */ + hasFocus: boolean = false; + + /** + * Whether composition is currently active within the text input + * target element, such as when an IME is in use. + */ + composingText: boolean = false; + + /** + * Inject required services. + */ + constructor(private guacEventService: GuacEventService) { + } + + ngAfterViewInit(): void { + this.target = this.targetRef.nativeElement; + + this.target.onfocus = () => { + this.hasFocus = true; + this.resetTextInputTarget(TEXT_INPUT_PADDING); + } + this.target.onblur = () => { + this.hasFocus = false; + } + + this.target.addEventListener('input', (e: Event) => { + // Ignore input events during text composition + if (this.composingText) + return; + + let i; + const content = this.target.value; + const expectedLength = TEXT_INPUT_PADDING * 2; + + // If content removed, update + if (content.length < expectedLength) { + + // Calculate number of backspaces and send + const backspaceCount = TEXT_INPUT_PADDING - this.target.selectionStart; + for (i = 0; i < backspaceCount; i++) + this.sendKeysym(0xFF08); + + // Calculate number of deletes and send + const deleteCount = expectedLength - content.length - backspaceCount; + for (i = 0; i < deleteCount; i++) + this.sendKeysym(0xFFFF); + + } + else + this.sendString(content); + + // Reset content + this.resetTextInputTarget(TEXT_INPUT_PADDING); + e.preventDefault(); + + }, false); + + // Do not allow event target contents to be selected during input + this.target.addEventListener('selectstart', function (e) { + e.preventDefault(); + }, false); + + // If the text input UI has focus, prevent keydown events + this.guacEventService.on('guacBeforeKeydown', ({event, keysym}) => { + // filterKeydown + if (this.hasFocus && !ALLOWED_KEYS[keysym]) + event.preventDefault(); + }); + + // If the text input UI has focus, prevent keyup events + this.guacEventService.on('guacBeforeKeyup', ({event, keysym}) => { + // filterKeyup + if (this.hasFocus && !ALLOWED_KEYS[keysym]) + event.preventDefault(); + }); + + // Attempt to focus initially + this.target.focus(); + } + + /** + * Translates a given Unicode codepoint into the corresponding X11 + * keysym. + * + * @param codepoint + * The Unicode codepoint to translate. + * + * @returns + * The X11 keysym that corresponds to the given Unicode + * codepoint, or null if no such keysym exists. + */ + keysymFromCodepoint(codepoint: number): number | null { + + // Keysyms for control characters + if (codepoint <= 0x1F || (codepoint >= 0x7F && codepoint <= 0x9F)) + return 0xFF00 | codepoint; + + // Keysyms for ASCII chars + if (codepoint >= 0x0000 && codepoint <= 0x00FF) + return codepoint; + + // Keysyms for Unicode + if (codepoint >= 0x0100 && codepoint <= 0x10FFFF) + return 0x01000000 | codepoint; + + return null; + + } + + /** + * Presses and releases the key corresponding to the given keysym, + * as if typed by the user. + * + * @param keysym The keysym of the key to send. + */ + sendKeysym(keysym: number): void { + this.guacEventService.broadcast('guacSyntheticKeydown', {keysym}); + this.guacEventService.broadcast('guacSyntheticKeyup', {keysym}); + } + + /** + * Presses and releases the key having the keysym corresponding to + * the Unicode codepoint given, as if typed by the user. + * + * @param codepoint + * The Unicode codepoint of the key to send. + */ + sendCodepoint(codepoint: number): void { + + if (codepoint === 10) { + this.sendKeysym(0xFF0D); + this.releaseStickyKeys(); + return; + } + + const keysym = this.keysymFromCodepoint(codepoint); + if (keysym) { + this.sendKeysym(keysym); + this.releaseStickyKeys(); + } + } + + /** + * Translates each character within the given string to keysyms and + * sends each, in order, as if typed by the user. + * + * @param {String} content + * The string to send. + */ + sendString(content: string): void { + + let sentText = ''; + + // Send each codepoint within the string + for (let i = 0; i < content.length; i++) { + const codepoint = content.charCodeAt(i); + if (codepoint !== TEXT_INPUT_PADDING_CODEPOINT) { + sentText += String.fromCharCode(codepoint); + this.sendCodepoint(codepoint); + } + } + + // Display the text that was sent + // TODO $scope.$apply(function addSentText() { + this.sentText.push(sentText); + // }); + + // Remove text after one second + setTimeout(() => { + this.sentText.shift(); + }, 1000); + + } + + /** + * Releases all currently-held sticky keys within the text input UI. + */ + releaseStickyKeys(): void { + + // Reset all sticky keys + // TODO $scope.$apply(function clearAllStickyKeys() { + this.altPressed = false; + this.ctrlPressed = false; + // }); + + } + + /** + * Removes all content from the text input target, replacing it + * with the given number of padding characters. Padding of the + * requested size is added on both sides of the cursor, thus the + * overall number of characters added will be twice the number + * specified. + * + * @param {Number} padding + * The number of characters to pad the text area with. + */ + resetTextInputTarget(padding: number): void { + + const paddingChar = String.fromCharCode(TEXT_INPUT_PADDING_CODEPOINT); + + // Pad text area with an arbitrary, non-typable character (so there is something + // to delete with backspace or del), and position cursor in middle. + this.target.value = new Array(padding * 2 + 1).join(paddingChar); + this.target.setSelectionRange(padding, padding); + + } + + trackByIndex(index: number): number { + return index; + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/styles/textInput.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/styles/textInput.css new file mode 100644 index 0000000000..08c0a7e992 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/styles/textInput.css @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.text-input { + + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + + -webkit-box-align: center; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; + + width: 100%; + background: #222; + color: white; + +} + +.text-input .text-input-field { + -webkit-box-flex: 1; + -webkit-flex: 1; + -moz-box-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.text-input .text-input-field { + overflow: hidden; + white-space: nowrap; +} + +.text-input .target { + + border: none; + border-radius: 0; + + display: inline-block; + vertical-align: middle; + color: white; + font-size: 12pt; + width: 100%; + height: auto; + resize: none; + outline: none; + + margin: 0; + padding: 0.25em; + padding-left: 0; + background: transparent; + overflow: hidden; + +} + +.text-input .sent-history { + display: inline-block; + vertical-align: middle; + padding: 0.25em; + padding-right: 0; +} + +.text-input .sent-history .sent-text { + display: inline-block; + vertical-align: baseline; + white-space: pre; + font-size: 12pt; + + animation: fadeout 1s linear; + -webkit-animation: fadeout 1s linear; + opacity: 0; +} + +.text-input .text-input-buttons button { + + box-shadow: none; + padding: 0.25em; + max-width: 20%; + margin: 0.1em; + min-width: 3em; + + background: #444; + + border: 0.125em solid #666; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + -khtml-border-radius: 0.25em; + border-radius: 0.25em; + + color: white; + font-weight: lighter; + text-align: center; + + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25), + 1px -1px 0 rgba(0, 0, 0, 0.25), + -1px 1px 0 rgba(0, 0, 0, 0.25), + -1px -1px 0 rgba(0, 0, 0, 0.25); + +} + +.text-input .text-input-buttons button:active { + background: #822; + border-color: #D44; +} + +.text-input .text-input-buttons button.pressed { + background: #882; + border-color: #DD4; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/text-input.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/text-input.module.ts new file mode 100644 index 0000000000..076cbbae82 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/text-input.module.ts @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TranslocoModule } from '@ngneat/transloco'; +import { TextInputComponent } from './guac-text-input/text-input.component'; +import { KeyComponent } from './guac-key/key.component'; + + +/** + * Module for displaying the Guacamole text input method. + */ +@NgModule({ + declarations: [ + TextInputComponent, + KeyComponent + ], + imports: [ + CommonModule, + TranslocoModule, + ], + exports: [ + TextInputComponent, + KeyComponent + ] +}) +export class TextInputModule { +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/ApplicationState.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/ApplicationState.ts new file mode 100644 index 0000000000..90f2a99c46 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/ApplicationState.ts @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Possible overall states of the client side of the web application. + */ +export enum ApplicationState { + + /** + * A non-interactive authentication attempt failed. + */ + AUTOMATIC_LOGIN_REJECTED = 'automaticLoginRejected', + + /** + * The application has fully loaded but is awaiting credentials from + * the user before proceeding. + */ + AWAITING_CREDENTIALS = 'awaitingCredentials', + + /** + * A fatal error has occurred that will prevent the client side of the + * application from functioning properly. + */ + FATAL_ERROR = 'fatalError', + + /** + * The application has just started within the user's browser and has + * not yet settled into any specific state. + */ + LOADING = 'loading', + + /** + * The user has manually logged out. + */ + LOGGED_OUT = 'loggedOut', + + /** + * The application has fully loaded and the user has logged in + */ + READY = 'ready' + + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/interceptor.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/interceptor.service.ts new file mode 100644 index 0000000000..d6e3fdc07f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/interceptor.service.ts @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { HttpContextToken, HttpRequest } from '@angular/common/http'; + +/** + * HTTP context token that can be used to skip all interceptors when issuing a + * request. + * TODO: Maybe remove this and just use SKIP_AUTHENTICATION_INTERCEPTOR and SKIP_ERROR_HANDLING_INTERCEPTOR + */ +export const SKIP_ALL_INTERCEPTORS: HttpContextToken = new HttpContextToken(() => false); + +/** + * HTTP context token that can be used to skip the {@link ErrorHandlingInterceptor} when issuing a request. + */ +export const SKIP_ERROR_HANDLING_INTERCEPTOR: HttpContextToken = new HttpContextToken(() => false); + +/** + * HTTP context token that can be used to skip the {@link AuthenticationInterceptor} when issuing a request. + */ +export const SKIP_AUTHENTICATION_INTERCEPTOR: HttpContextToken = new HttpContextToken(() => false); + +/** + * HTTP context token that can be used to set the authentication token to pass with the "Guacamole-Token" header. + * If omitted, and the user is logged in, the user's current authentication token will be used. + */ +export const AUTHENTICATION_TOKEN: HttpContextToken = new HttpContextToken(() => null); + + +/** + * Service that can be used by interceptors to determine whether they should + * skip processing for a given request. + */ +@Injectable({ + providedIn: 'root' +}) +export class InterceptorService { + + /** + * Returns whether the given request should skip all interceptors. + * + * @param request + * The request to check. + * + * @returns + * true if the request should skip all interceptors, false otherwise. + */ + skipAllInterceptors(request: HttpRequest): boolean { + return request.context.get(SKIP_ALL_INTERCEPTORS); + } + + /** + * Returns whether the given request should skip the {@link ErrorHandlingInterceptor}. + * + * @param request + * The request to check. + * + * @returns + * true if the request should skip all interceptors, false otherwise. + */ + skipErrorHandlingInterceptor(request: HttpRequest): boolean { + return request.context.get(SKIP_ERROR_HANDLING_INTERCEPTOR); + } + + /** + * Returns whether the given request should skip the {@link AuthenticationInterceptor}. + * + * @param request + * The request to check. + * + * @returns + * true if the request should skip all interceptors, false otherwise. + */ + skipAuthenticationInterceptor(request: HttpRequest): boolean { + return request.context.get(SKIP_AUTHENTICATION_INTERCEPTOR); + } + + + /** + * Returns the authentication token to pass with the "Guacamole-Token" header. + * + * @param request + * The request to check. + * + * @returns + * The authentication token if set, null otherwise. + */ + getAuthenticationToken(request: HttpRequest): string | null { + return request.context.get(AUTHENTICATION_TOKEN); + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-array.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-array.ts new file mode 100644 index 0000000000..78269de756 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-array.ts @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Determines if a reference is an `Array`. + * + * @param value Reference to check. + * @returns True if `value` is an `Array`. + */ +export function isArray(value: T | T[]): value is T[] { + return Array.isArray(value) || value instanceof Array; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-defined.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-defined.ts new file mode 100644 index 0000000000..17832cc4c7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/is-defined.ts @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Determines if a reference is defined. + * + * @param value + * Reference to check. + * + * @returns + * True if `value` is defined. + */ +export function isDefined(value: any): boolean { + return typeof value !== 'undefined'; +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.spec.ts new file mode 100644 index 0000000000..011d8ac7b6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.spec.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { LogService } from './log.service'; + +describe('LogService', () => { + let service: LogService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(LogService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.ts new file mode 100644 index 0000000000..ad43756ace --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/log.service.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class LogService { + + info(message: any, ...optionalParams: any[]) { + console.log(message, optionalParams); + } + + error(message: any, ...optionalParams: any[]) { + console.error(message, optionalParams); + } + + warn(message: any, ...optionalParams: any[]) { + console.warn(message, optionalParams); + } + + debug(message: any, ...optionalParams: any[]) { + console.debug(message, optionalParams); + } +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/noop.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/noop.ts new file mode 100644 index 0000000000..8abf65dcec --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/noop.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export const NOOP = () => { +}; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts new file mode 100644 index 0000000000..3d05b1e98e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestScheduler } from 'rxjs/internal/testing/TestScheduler'; + +/** + * Provides a TestScheduler that can be used for testing RxJS observables ("marble tests"). + */ +export const testScheduler = new TestScheduler((actual, expected) => { + // asserting the two objects are equal - required + // for TestScheduler assertions to work via your test framework + // e.g. using chai. + expect(actual).toEqual(expected); +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/utility-types.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/utility-types.ts new file mode 100644 index 0000000000..9df0b77644 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/utility-types.ts @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * From T make a set of properties by key K become optional + */ +export type Optional = Omit & Partial> + +/** + * From T make a set of properties by key K become non-nullable + */ +export type NonNullableProperties = { + [P in keyof T]: P extends K ? NonNullable : T[P]; +}; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/fonts/carlito/Carlito-Bold.woff b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/fonts/carlito/Carlito-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..0afd4f57537a5824febbf93e1d4e9d2439aadb7d GIT binary patch literal 281212 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

    • Cvc_8VhG~ zReBq-DGo!Pgll>u;%Bs$85(u4X?6uNmvBvY;uGq8e7;$zwxd!SlsGmWiF*!{Tqv^S zEYqe(jUMH#r35J-A~f(~y?Q7C&*whFGU^$cxpCC&)IQ1Fu!uWTrT?upW&Ha139bIu ziQqTL`N&YGV>@&ow!=(VVtS~x#h|U|N(PD+R$SvmJkcYh)*r|rFaA&=nx4hR`+d#4 zVg1uu?!0i<%9bJqsAXkWSXjGZ0}3r$2IE*x{|~cC){T`zKa~J49*iTP0-P8}&x7!n zm`bAS1hO632&6a=mD|U{K;&4v8Y{M*)Pj)j$MG70%zw~5?L2Si)sWUIx)sVo?|H^- zwedQ{ks7J3h^{Yen^RdiXItUk_O0;4*7l1A8X5-B1LjbLyM92{{Ua3VTG7(7qC0}F zza9Z>3R}z(^dlkH*-0Zk-PsYS3L25{A>AqJMYHG^(ckg=>P0!x!qxZU{)3}NCOT>) zHto{KlK;j9pP=$jMkVBhujq||y+cx`i8&)1fgL6K8VJyLx@Lr6R4Rw5FI8v)pf7Ms zt}pp{q@3(&uSk;O%F-2-f`ZpER=RR(`-z)VkTf7)d(ssXjYS^sOehu!MA9MP@ty`K zGQCfztlBMG!uvia*K0IZhuc^YtZu3fdg|xaX&hReQSDS~oN}!v=cs5;m=ao_-fHvO zJmz3^b9K;>AF6Fw;buQkD-~*m3+qazU_KG+sC42vcGx(Bya#?k>CVtCXL^PLLw34~*T@I>9&NoOn! zrrf2t)K)#**pxRDtwrT_T8qD`R0gHn$$Yb7xG87@@f`D_-;rNtnKk$q(zjvyD0*4O zQI*t&f=Yv}(8Kyb~2yuP_5+7EVoup|4bh$z%=SRjP^Ny7 zgJtI1JkQcq$xKa6CRs&4>#@ye8ONgf%uth*qke$dMlZ+j&_Wf&w+8u!NUV)Lk#9In z65^N4G&~~^y3gOTu&!=Fi~qh5%Y+jsD!f%ar^)Ycno|uwCqu=4oQd_EN~-$^V4IMH zytI;v$}~F3J!FQ@L_ANKALwX(A|59&xJj;CJgq>e0+I_jR;6SHEYOgQ#CXwiSJGGC z6Vqj8u5VhpSxIAYzu#`7Wy+w{;I-@JDi!0@S{ZJeLLO@#2o0P$C%t)Ncu|A9G34TF zlQpwl6=7q%vnmwQBCYwv32Fh>e9psbC!~5Ce#Uyry>^;r_RA)srop07 zK_rKQNnU|Xm{frAq{Mf08GVGl4(>%=Qc#m56BQD1ws03uFqc+%uB_)MdI_C<89R{6|J%o3ZK(VBZjX|Ekr2Xr4_(r*f@|9KaF+6d#M4-#B) zn!2)}jNzr%?nHE(xIlg2$S2UGi2;jxBG`p=al}xPn?-~XLux*$kvQf_-;*%aOsY(; z#A`eniKL@x-eQf1%?eVTMnAcHcIpPb7W@t`w}A+0%7>Gn4y?M>J=R?Qkz2X!Cs6TX+Hd4pVy*T6Dt<7Duh zM5yOQ9Yh7kot_+iuF@|wU93*x6v1uF#q*GwSR8CoiE$O-Z__t%l5E+j2sv0hlNv%g z*yJ`PrjjY}`O(qGc}pl1PRXQcoXAxvsu&ZDYf?D7QX?uHiDasD8V7X?J#BM=av(wkcGKW%25ItwnwDKBCX>!ROOWvYA+)_hQqg zrO;TWr!x#0f@VUM$Ku2912sJo_Qm`$r^D>Ect1x?$2xAv%a}-!$}B=x6qWVnRiLb| zYBmKNdglAI!GU*#-_A2n%d2EFvx^UmExvSdMFsw2?7-se_yfjdcP`hRG@_sL(bnu( zALO!N*>Mi;cZ^zI(0TA01)q$8&@zi_+sOd2(I!$IkRlu_BL5w+k$h9XoEm*4maHjg zAsczB6&vDPq(sLuwP=>3IR(civ0@)V&YIzRZzV}!Q9%L=H&=Am7OmJr=o2NAnOTR` zg_(FY2LKn_%$$a<#Ov2eomWs>@KOOcAYD`y93&JqEarWp5+qhkI)u=)6Mu!x+?foq z`-Vh3ERyiBE&_n1NggQSab-{`*&7D-f6r}TH0C}HkkP;62TS1)KC4oAS@5AvyqA28e{3K_iYq?ipM z8L>!dL0D7LYPbry-EwoE+RG=Cw*36I?>%7jyDcI14TXA(&Ty^8rLfJ+2AVQ1niBrH z#$~bu$@$sC97NB`j3TcOEz+FOQtdGc^#b=crABH-+~pFxFWP92SQzDVa=&fsnKGl% zpRfs0-b?Bj;PbtcImmS2d&2pSf2M-Wh2wzPy%1f58$cxv8Y?I8B=Q4(7MYD+ot8#6 zi`K5QtCdJYYh=z8>EngW`RHEmA6Qn&9>wo84n#C~D!j<%rGXQkuB}6xod#prsE?RA z1yZVJ501KnmE0rBl&4|a%9&OfZ{%fF%?IzfZx-+qvQ20n_cM{-834aV@))$BNPtHc zn;n!13X(xdSE_j@58Ey%OTZS{qG>0PD9qyX`Om;Bu z*+uroS@^jNCqGw8yOZeebwz>~;IS;H4-xb0O3%gbJYST#`RdwNQWMWjaVVbI<;f3b zGyOI09a(tp2$q=z*&tq_YsCXl4S`JskV%p(i{ft+C#01ke0=z|kPeU?%Aj7r3lzQJ z6t$u3djNdm4n{+9tHeMfw}kjI63t@P8eOm?3#sqabjA!dwT_V6X)tSY&c?=CYvY=M zB)2fy*Ir}%J1WS1$x3H)twyWSlVmkt%NTh{r{S@TlCf-&#)5@E5~iJhcO*w zXy!32LySZR2FgoOf@p{k-vkR1WQK~k^g;N64orwJi*zlqVip6+F^@f9^C{2Z?JA{B zw?PqbK8pJHGPIrlx4+rrX%2kE+vzhz-MRQ&zD)OaexdGNB=q&c29yL73LSjF=2h-A z*i{DaMn%B!nDE5K+%EjkK%=L=@NeEeez_5`1c>da_7>mxR=8VyngiNW>spMLv zf_~YNY6$3E-l#i;78*5IsV!=?MRm2tDBMSsR8^H3;J$aJPT9ihaKPIyvQrRCp;HSJIP6jU%!~36d9>f{g;coZXBn zKU>9I_y2o6(@d}UY!$s?()B@XHH+MLkkc-zq@=(?87CFoA|K$%7-%Dm0#(1sTzk^^ z$@B42m{aToj6V;3fF2zG*IVrKpRFRbHvdGOi*=t>5`Q1yStwA{ zT-%9%A|tjs+K~&HsAovh;1MUJK6SX@Z#e?Jz%K@UfM8+>QX3UC?gnV#N;v8kfWodp z#gxN1g>^~=ht}f@6w(FwcbQ^zYWqT>*p!lqjmIcCw3VOK7LU(gRpr1EpsKE_uC^u_ z4+ds<7XgpHruC+H_Tc@&CmS z#Bc4lO+WdKV(8><7y_?IOO6z7d){|_;lOj z7xXN;_peu6@t1oR3IDEIym#(gU~*q_@!Yw47gsUSRo}jJsZsa~au}Cg`tYi)&s{xd zpx?5GCBJU;N{2fsUCM%E6F23eJv8nXo)Bcm;$gJQ2+5R9nGigYSQ$rwaZ?Xl@c0E@)bB5zO2bS0vu2MKYCU?|G^Av~|%#pWZR+?)wjq+CmAFfBk{G7uhQ9FMk^i*QJHS zq8?H&{D5uauEHleUU^s#q}m7ur&ONXOm!hDn~q1RT2#xzK`pK^n^=V-1}0FJjujUo zskbB!iGFeZRcjkMcic38$+l)wD*2Rx*DK||Lc^{%?q0t9@V~EZosl+i8!dJXlNh~{ zU0S>8&W)$tetNIP+Bz^4>$$L_PwNkc^u~bKqjhh6@Xyy?_pb+*C`>-P-eOZWjW&5j zTl~a_tcJS;WPB$WZomADqV^Zm)hyn^9s=Sm@u9HzP@&h8VAKdzigQrK8eZ8iXl0i; z=)?vT0>BSq$I8nijTSW7Or}0tZ;Qt>GH*((wZzOM^~b&=hImz#h?0Z9i1=*7}sxQKLobs7dVsN*k{Y1$kpAOt_#J z$qtm`L$;U#JE@X{NGcF#^cJ^X?~7!88^6Y*?+dMl3pZx!!ghT;CesCG40btoJhiv4 zZSPMn^Vj8Tz04Z3Q^&C^yL01%XP(E&IbUK-$E(@yz0ZDa^OFZ=aY~(1T%Ub-{uUJH z4<<+j;AJyDA;|nmzc6LA!XMU}Z|BXXs)Yxh-y3bSp^wCx<|jUs9b$e* zMX7%3q9fS$lc8cZy&5U;LR10-Uxxo%D`yB9riv810Pv#dbS4A-vW@Kot`v(=RIESN z-__AjUy(_~@zW!=cr2tbk%~GgR0gV_V1o-0S%54#b16TWjs+%iFI$l8P&{(3&7EI$ z)uP%(ef1VgecyuoqN`TrJ+>FM_K*#WFs-jT;%=<)sPrb~xKC-)tGpGBo^Z8K$NX-W zKihj{*Y@YG7_ucA0)d8vZRm>Uws&3GyHW3V^1{KV8kTj(-2E4<2@dx6csxD*gTXZy z^t)r-%Nm}7xm+il$BYv>(n&p5P*owh!iyMrF$fW(6pCVjX}O#%4=s_qB9xBr1Qe7* zRt!nRph%Z&(-&L>2S(MYTb4k3d?!_Q4PN=!@@#9#=Wu5$0?~LP5L8(}uf%d#!rx6M zqkxh|wWSZxxOGJE~}3Ic5OC1xO2|%_CCMAZD|Xh?-L&g&oGzZ`8HEAs0Ka3_d$j_Np5O8MOKa? z*9J3Xc>H9p4Ll@c^Nt5jUwZ%f15KN6UOISQP7q@2sw;=;e4g6DOmd*sPgj+9w=yk^ z(p&Qtllq8dV~g-Cw+isDs<&G}HvW~RsGFqHOezGioUUnG2jbyX~a&2c`x3<6MkvV1VdT#FR=yBynEc}G#gbH(C_kIUE$|CUdbHy z(P2kZON&eRt}765p*~k@OOxaHEnJ9E^19c^JScI04>0dj)$o>dk{wi?Nyo9CIgJ@) zlRA#gplHzyA_9#hWSrU#%Ay$hU(`~)DidFlU-;C#c-}Ij{lZJG9=h%i2WNVk7q{Nv z3~1zfYkzkR`A2Gm|Jy`UDu-eGWAxy!g4ITcE1R_;{~4*yv~AIS|GIJX8~5BdW(%h+ z-j(|w-V_-K9li;Ty7PA7HqjP(k?CSnSnT==ZZ)FYs1oo=M2=)qp@7c=u|i@2p^^m@ zEg3+y`3cdbqfxWJXWQ_qg~{ZPh`-AU_px5?9^BV< z>Z*bs^x%9AEtg>-D=%{HR6=zimcu$1xVXS*fe^c*Ow*M(M~Og#Z1gXGiCwy6v|y;N zYN)GfuWq-*EQxqfX_<__!g|02O+hOv9bO(RO)QX7TSgv-&TYPC@%+nH=37obv^>+_ znzM)6M)O*)(^wgZc8=9*;HTiL9V;`j#krb!&3X-MY zn0SRH&I_Kqn)`f=H}7w(>uy>zm}V0dwxkLD>8_SuKkKdW-|O$)Hk=u*vd9B^L)=vp zGo)wlIeLz(k}ua@~ddXr_1*Qn}%J+%MCXXp)jHCAq< z@*eo`DM`k=h>E5qh{8EV-mC0HdoWJE=mLC7$D%Dw z`CKLyZI89{X$TdCfzpD=;#@w*1Wd#?1+PfQ5Raglyc_@z<)yr5NqcSral))n+C4$j z3-$;1pP)u>;}qt!S!h?%xP_V;>^ zP50R^UK}4sjZCa^LsQM7z_?8BvFo_X<8M`MYR)eXu|{p6KAmw^4^}(LADMK0K#PZ~ z!j`}W;`a;zN{TRoNvypvCA5MRLC_Gjb*|{jve~d82-$*8J8^>Y@c_@OEu_3vz%s#@ z#RCi%3UEn^8+sNs2tWSug-@K3Z$IbJ9YXct!$|()_60eMCAXlRt9NUTUC#RG`{T_d^Kcrj=P%1VF)21qyf z0CScQMGoOF!Y5Z>P5+TyC*1ji@h9n?AJ7SW@7==VY#!e`MeQl5%m{H>D0kE$v2NfE z3V`0RV&N|hiNJKqp(+H?m3YzjFUNMMob2c6nk&#m>(PQ0kur34tI5b4^g6YYN}-fe zpW-GM<-olQ11OiJu~w0#!AjQvg<)b~T}#6(zwim;AOCCh#?~bd?VZ(g{&zMnU(L!H z#_iNsY>O{AuzcNt;h@Jn{sve1qOiwiuRG^w*B^NEreQ~PC~9?Tu&(}p!VB`1c>E1i z2Q^ff5nyRhClx>+f>bgzrd7%r;`>&qsJW1%gXNPBX*B8)O0DMAU5$+t)!5P4(caeF zgl|$G;3HUL#DD1RDJ3G99vhNMT8fnxi*>Zcg#Q?l>W9GAfr@QVH6&+>VS#|{OUq1 zGIzv2t^Y$daywTku&D-vv8!SH=UC^uBjF!^n(hoFgq6uEx~ieeXlO{Gq(oLAWRLj4 zk0y<&2}!eIl7==hDfnfh^Va$*Ouskf!tV%gSsFuigQ3H(VWRasv#S4GbeK0yjb z=?I~3cw^%qgfcoqcZ+bV*vVKJJsx$9KMfHD=-QmIjCyE7W{} zkU5Nv6iZueaHyW(Yr<~|$4oW;+Cl$c{?QY;M;CEE(J6e2QAlghbSi+% ziMT0>f(x%KBV`mzfAUIeD!@D9UpzGim%9L7KC}@XAU-pULuk;$Q9oVVUrWFb0o8_tN*X>yF(#@hE)%9l}w$ zAKyPiT~g3lu~iE)Jwi$bh){|MP+Zb7R0aozVPi?Hq$O8654pZ+NX4NQ)cRAkSE7mL zqXj#n(#bGB8!hINY|o&K>SWnY{+(93bBV^KU6FX-s;1gLA08zue8Orf*EWsacmB-o za~|HfbQLEf@;zIU?{3rhuVD`G_#d~~L=k^8i1?VrsTO^SA8{RA3)M%>N7bUMoVQ^G ze?|q(DcfX(Qm8|6j+-aGz($x1*e2Ny7ktc~^zo?VcMlbb@*(0Sxr1%6go;isF~|b9 z&rI92SYQEM~x4Zewi}(KK=8=&*|9+FFs-n`R zV{{g$Ugz}3T>WP)sH|Lc{%pBcR?`}veb(%GXAebYb@6U>y58x{a^vq;MsgKUW;I!3 zGa8(p#x+Miz5a$zA6>;Nw91vHu!m<^wq@u2r)_>O56(aDm%|KF zr()=D+i$3-zhg;sc1LnE>_?;U0`o53FFKG>;BP1eyosw)GER6}s_sq-02f2w(pkm_ z^31!!E%#?5hn^8`;VNH0e!95h*+s7tOvs0Ld)MJ-xFLVfq(a2UA(zoKK(AuFiZTfHcQHu7 zqpnym5eV@z3)X7N5Ab4@ZY2spAElaSDx~=yKD}4FeCiKr8T|*f+xCCxY~ebjaN1P= zGQ6g?^T+7N1*14eE*|}!Q*uI{che8j7i$ed&VwH0dFUgLW%O@}jK=dOCsj5W=_saY z*&KkMkRQ3ZqSH>Q&TN1Pl&AxjUK0Gs+#x)Mevaf{&xY_?b?KbK4Qe;`5ZFJ0QmyONud3NK;eh$7r^g_z+0zNNG{%5S0GL){hs}*6{&W zcPJaZ{jpU?Z{M@13Mrzi9^8xMlA=YcoOX5fs+%^Vqe6fG>PlIFCTnvMUN-@V`i}7ah;Dxa^X|2|M9i=pVf&q%l?|#^M(*9f2b7JqX;z(~gb6VuOp{0^ZHJ<-3aQWhM)9%Q`n#D_9D*M(K^F6zR9ssdl@ z#v;2I0#6iuI{1W>L53ne%v3~N0$WcBzfV{lzhqm&?`UnpXL_Nnv8xFlT_28xg7GjI zgk{mslY_^xV(3WpqXDoFumyxo8O<`R`TGCtJMULF&zJLF+wnX2*PfWMZDE(s>{kyp zTzuuVJr}%tc#9e}ZC#KznlJO%)VVCZd)7IN8r1YdsX1pc?wv1PKX3Lef4C}EXy%l4_3IikWLr1rGjXvV&OS6`p+J%hB*{oA#>PF^-^;S z!x=n>KDUj5Su9Nnnmi+*0EklprGk033kr>OcC_@i_SV-%!(NZssMlgOpcyr*%aVyE zPl?2neA1*e;aRj5=Y@G;`YB1T-ng~y!!1u=wMaE-P7qAv#S`i%l4T=*4A z8I~P->$0gc1GD&MX>y3X+#o!|o`%=zWF%F%|P>z)h z<&&G9WF%K+V-W{F;q*EHO+d20tp?9v6{;#Tk|l9Ap(D%W69k7POL-qKuV)5V*M0~# z#s+_d`Ol_Yh*zPe8TyqTVLQ1h7jc}B`75CjoEfEzgVh^&|+LM=XZk@$U zdNGt4g+c=?xb9AFS#**^{8BUwErBRNAR?1hTjC9xP~+KKYu4Sie(@^NU!lwTGhJ!x z_%OtGO;Td5`T6bWm6C=}xUum3Yw#HKptBUySH(`TrK4M#PF}Jkpi822 zZlV+G?!8DjvEY0`PppX#k%CNJnK=PxknjpQgQhtT>521@cy1-I$)xiz5F)X2e6mbE z4+EEAeQDe3BjxAeUxEpA47E>p8bV)g6kd>Dg!_^N7Gb|Z!N^#M70Hl{M(eo=^GW1_ z85Um){xeA>D+1O!LKqh*Iw(c(++^$=BtA$0JNZS2PEcDeWLTlyko87deL^G0{`Cdk zY2g*y@0S8veVSpw6FivE{s2^g({JszV`CLODa zS9#qQlR>9Zp(q_yI#bXm`-y)u&w)OudfN_tT8#VDR%nLe!X}bqJ2mAM@?j-Sc>+#` zXCKQdOFSB>fD#G#zLnViYUJABzLgMbK873C7IH<-7}M zr^RRW#Ul#0m@~E%>+1#FPYo3=1c=>Ckrg;aTL)DTbP80irZWX0dOK)g;0ZmxQdGW( z;|Ni5;VAL52C3_aT)?kGp@bMS{#!+2%xRI&5mDHf#;Xl4J0z#kXqmqgc7X~hm4xer zR}eEyYELOC6{S?2`Z`LbDqc2P(EGg}SERUg)pop%M0c)5^o{0DCSF2Ie+(X8(c62q zvuSBpxIJN#`E)ub@3Rt*?~B5nKM*bwjyJ99OPI{dJ-oWDnT*|vW#X%N?3L7BDJLTt z_Tpnork3DlWxtDvvotyLAT^U>3B_|URzM(UbBiKBR%}uPk(D{q3p%yMLH{4pzU*#Y-52dnnPpy`&To#oum1w`!| zif#LJYj;hjKtU?ZQFm0NHeDw=RU%E!k7JpNy4O-<@7_~1|g#v*xwu^Bf< zcoWHS@7~rvtG4pTgkOC89!dzuoIdsMWIt26ZU048?=x~bfqT_pgI>E8-j63P|dY9fA3GiVVBpm_|Ih+Sr1>^XV zQD0Ly|GA4E#ybDNzUTL}(2qUbzP!!rYg^Wi?q6}&83pv}XTNCMcH5=s%~0EDU2dMp z+elNbC;ltT5gFY??K~2K5X+lF1^MHslRT^z;&*iUO{!_d! zn>uE;8nf~JGL?eMEjuu8>-CY=m-lXZ@XP|OZdlaf|LNe?{z#~E1$uD#T|4k395>GD z8XK;h?TDtlg{Erb=%q`m7Yy|*ENnk?g}bUNf&9U?1vUAFZIEvj!gBv8*Gjch=M_|q zh?6t0dL)sb!Qvb87S=;_ltDyKWDu}EavX89NesM2lI*Y0-VWhvRX7w5#1k7yH@n&EKzg&tl#ZB{n7Kfm_IJQsWS8E{!~-kDqA$Ca)?Y-e#j{_u0UZC%Q6!wF|~POII+iPUH$T&8$Wqu<&tmx=cZZv z&sZKC6w>9Gt&(Oau@qUDE|DG60zz7HpPpiZv5k;t?-N>@ zTZdYWSi->E)~vj0(Y(u7)e0@(U40*>b+X9KE;wh1F~5%W%>>qC-{cCQZze#G?Z*%9 zFZA?arKfPT^+G#JP-|q6afi~Z4!=hE%DNTJY>f|KlsY(hmUZgNqTij_4bD^p%{2v{aJhZHTmoCzHNlvfn-r945C z10Q#qN@J7S1p1ZA2GU_V{putun?3U$ciXDINN?H#dZf=9ala+}MU!foxnyHgcT=aM zzAl&a%0O_u1K6Y_}d|Z{~JU396eq_ozokPo$>D)JO(Z9{_d%WxWwW z{;5dqt8vNRV2Gp-T1L_yuT}WjX7l_0#Z%@ zceSMGB`p%s;Y63b1WM!?uu@)N&JF92cdA)VB ztDWgoV@NORSQ@O@y~TV=S*ZYZnuOLk1%O3g4q$N=!UUDQahk?u%|;7W0(A-4{3k(O z#0c^vs0)y$){01%dw==MM>bu*IFVa*)nZ}nzWY9Wba=Kg)|z5I-TLVA>iJt+dw0&O zpkIG<>-dYpN3)upm0?0ip}>Rs55bnE3yF!i$Y_c9cp^5UrL>||MA%vh@J38_&tF5Y z7H+xwZs7pkjc$ADokxW&=-Nlc{km1Sm)VT(pQQ#1eGKBT+AZTu1QS3(QYtEC2!PT# zEahZ~(FG}D=O6)~ER{9I1BrMDg1~4BNF^G>i)q5yQ;c|qc=`k3{McCSoU`Y|8&+R3 z6zz}WC$lu|bg13DKOePNV)fx*g-u}Ic}n<;$6MHO=kje&T+pLXo4hWs$>NZ?yU$oK zYju;=#tXOMaln`i!co~E{<(u{Ei`2nG>eT@HBw>`gOu!;N?} zg5&{Ha#E6qVA%8`yr6sv0wO>qD55t$ckJQ-={t;t&`*A0tHJ}cZ+kM~y))c7VEvlD zJ~T@ZI-&`~G=s>bkO~IDyhFN*s2%tKXeRxvFXTf=CRZUwCe~`74sKF{qmadJi<7K0 za7;0i0TCk5g!D9@v*5nICwKb8{EOc*{?@~ta}6VkknMq5L8yJeqi60g*mK8zf3aCAb2);X z<#l*2-Yv>gsRHaMVKRr>8mKf4Q{*XG~V*9bQY!h3>v=ckUpB|e7aFAMi_ z-^D*xQnLz!MVv{L;7q0hM)W5EOdRqqL{(&_z(p!iogmIGJ*+bVi&6`}m?Z#4W2G>^H_^ z@t`FhE(2UhWF=(+tsI zP(&|_`c+PK!$_Sg*s-Dw)ik7MpWfBAeIz@p!(y>HG>NE8SR4%ng5eOpiAwEsIGn}Y zRE=&!!j9&e_R|x!XGyeWMebSl$HM)3GC++|t(C*(S;m;V5Im zYeXkuSIbZH$%w&_L^u>1MZbSK$TP-N1Xl7?1O>fL5WfDJC#<-Rw<(nl{uX)I@!||&JGz`X=rRkr z%=}bpeg?f_a*49A_$)V-EX2%eKmq_;1JGn)9cmHSI(jMH2|pG7fzVZ{^hz#2O%Gmv zS-9q!X?oH4=v{X`T0eb18nG;q;eLduL?LP=7;l2u(4UOhh!+tX$TU4-gY>9Xq)(>5 z@#Ht~u|2~TR2^cK+_`F>rAo)8#3 zYgBkj61IDMvbM{1paJ3Srv3nHMBfqnfmc0qDd|U5A#1f5S(>9sgo*_>==$>Np?Zno z!(_4WW?1_0wu+bw!euU65>KEk6MBj*Z^4|mak?s%fG&}Lk2~wZ_-}5yLWQ=xg_ESi6HqPdai#%!kudtZv!;$WCOaT-cwSU1gE`_4=4AoucPnyRqd+ zsf0DmA6~C8f6dqqo?95s;`s}>tY3(=n3xU;Ytde4>2B?=uZuvf5U7P1ip?@# zeL{SFLnBGN7iR8V-75d`a}v%+?6ObrmgzMN?7V%|=T8mMDVX2j^;=DK7J%ZJjU#|q zlmjO8Q?V5eSr<@hMZ;xqiE30m87>i;fY%q*ys5eb-598gTdj%4$a8|w9*rBWFk+SO zWj<)xx3{5On{eB)Hi4zV!ddHDokay7S-}GE#C7JM9X|c&1-<3^1UhjHzwecJTm&x> zF2_sgzYJbN|CR9)p~;?{x&ZUkH!u2N;pIovnUXeG-GA#HdE8)BS`)@$P?in<{jMcAlNKQ!ckO&Ku8+wWV8gSSPX7H0)t3^!yTEX zvyCUT**~D_mDem!b|t0Bb*S84e{I|*+=TVp^;o~1vGImwDW%Hfh3T}*^qIL`=)y8x zcNd=9vv42vpQ~RFm-K5rrRPgH?xNSH)Sc&#UiFVvw+avAhYy2t4RcebTI1){VV!0M zk@46r(jhW-*tf7Ap{k{*fruVCsgf;EOd~sG5Ah&&0fdmBa?xWkk3GVjO zW(&{8{C7U}yjRwC`F4=>jeSAdh#o!eI}wW0964|13rD%TnLko-$VGMQIEDlIB*Z~f zgm7Q#JHhM`BO=3MM1<$l0b892&6t)$XtJUL6U1J6no=SBS{=2y>=Cu_3x(>>zjWq| z@AGc0#?Ak)Dd&9c&Z|G5jgh7C@qe1_b~9~>uZWI+!2HqX7tZi@g+g6kba~Kn{LS%W z1pffsFh9ZaFQ|IE6@0W86a0hY%iteuUmE{lI|=`gh|?&YidQBoeIA>|XwaxojE;%; zhZCO(hndS^t*hP!?=bym+^2>@Eo8j7amPy9#Cj4_Wy>qyN(gHQ-4zYRvb;s+Pl-5> z0zN0T;y4R%&zJBbSuYN7nhHC%PI)^VtA$2>pF8LYI_wsg)rALTrp-#i zF}6lHLPK3^4d|^@k!)H&9kf|PX+RMJuIO?Voc@t;=z6RgJ}9c+-B^?liuRvExR?0s zg4E5T51fZWvmGw@TUNqLWbp{(G$UWHL?zb&MX83>NTnjK$*Jj~`Qil>Czr`N+2>q1 zDO1!W3Z8&p^m0SRa68G&BkqT3-Q57Fp#K9t!$Y3-^#k#~j79F#>jLJe`W;P;y7p0Y8^Mg<%lw_xaX()irdkIW7zc^wx+Z?(%CHhNmQA#5 zJ(3(IpavI9rZEoU*Df}Jssu8Yo75C<;9|?sf{Gv|jPZbol_*o>v9kX~$O+Ub{1){3 z2RWVc9Bb%r!vFm6MsLT4!NdR_zF(&gTI1e=E2w^mRm-kW`yGFjbo`feZrx{LAtgLK zc}}o3(4n=dz#0(!l2`}5ove#+A;1*N6E6}iGnwcp;u8UIDHEMP$CM9%!LQ3SslTRB z|F_>RH$>h&`W7l0X}wPQ0x*z>3`Qf8x|ZxNlV=fsCH6?Z$8#yV?H zp)-l(Yz`s0lhiE-h>jdW=%kQ@TwW9)vSPt4h&pC7b@@zNw#^g|Ct@Vsd)f%rRNI}; zkuU;3VZXE5hOU_{#;VknGPQ!sue@U6`fC%l-`>9Up`FczUEf$YdUmxSL@MVr2GXk= z8y2^R!fkWWym@`g=T*;h#wz@sZF$p@YgXrH^$qoRUHJ6ZPJjBcpmUZ><<73{fU2Yomd8SqDw{AD6OQaD+wEvTt>^}K>I}!h9~OM+R9^hE|D_w z%e1yL#mdWH{@&)VbZ`4ty0`l)-P`*W?)_zNJ31!1vZ%3ZMzgUxc@;-i(&Y&d#XYwQJRe#iO+|Y9j`t zL)XCUtm{q>uBdS})mIr^TgO^kmd($Nkj2zmYg&Bm>U`z=GkYUd9?iWixymN9-K@2) zB>Ops^_|BEe^7g&Ra!q_TbETrM%<*KPdQuwdBKM~Cl9-Xv3 zG8wTgfakIZnJEG+%JpyyIS{L<>QEHI)xs^nD!LA3mmxx)um z)%{sh)ittYb*>@T=x=MP%>-1;JL6}-j?T?3-_ccL7mc8wo~(-F{$G0H-?9kqf1H{l zhL>G3Byx=qM1y`ZK%(HA`fWMh!9th7%85h?>;Tr%bZ7@rHO{f&#_m{cKxc%p!D?G| z<-)mmwFxV+vV2GY0p-YcB`1q07|@al^%;CMC;r1Km=CDz=inV|Q}7O1DjSS`8N7pa z0`8z_*?!mRGkKQ~PJwqB+-chsLb38r7MRo&ERSx@5p%x)l0tIq?y@h@5K)AkizwIuI9knP>nA zNr)7S{albkfcdp>N3N}>zIYPkmhYbjt3|kj`92dBvh(`LCXG*7AFn+n;%Yx;){D9& z!PUP0TY__F#AjLtF|_|n;T$G$AlBDL@m>v=;T)90z3gdt%xUT&QO8qBI0sb`=O7xh z07ak_3jOpj2S*9!5S?gwN|b{`Bp)nCIZS&&5#-WHvI@KlA>R+`FP43P-vP`X z9KjWoT%l6PRqG+*hE&ujR(Lt0@Q&eelfe>nGr>7)+2T}wiObBBE(0j?^q1kO)mK$!Q=v#aSi~ZufJOS3mrV^)lxKxj6PW)y!X6YBev2*`KUmSQ@kCSS5Gmmh5l#X3i;ooN%jf&Tc1kNo6ube^jJ{D;?W_|Am`z4e<_ zT9e%rA3UwIYhz!8;m~GM=O}R^&GyLZsRA`f&7rBU zN=z((vXo-vtenC7faT;Yw-(gV4G`@Y8BgUUl1yk$ZT!O4h197VQqXV+HriZ#4U$6% z8#Nz`CE~GgRR&h6$ebh-RXQxjpn1Sw?^fB=STo+zc+Y7XI^tf+ zo5M!@gJ;Qee8e=Yb?G=2C;Xr)-7z>f8NcBEpPg~>dyk#t+Gme{ho*Pgi)%uReiE3!asn1C|E;egNU78AwrbeQ3lNJAErkW3^3CVDMOaXZk$LJ{1M%f&*Z*mDTw zpg3mu#v7xakvDj|Nw4@AIo>#U@L~f*xuewH?{#T%V;?^o7QWPLaV}` zD6rmVFd|xJzzc}yiEza$SFP4}>UE_4yh+J1Bv>Yi=f0`8q7)idF+^#|{WM?UeuWwT zzqcYeJLG;Gz8}qT77h-}bYCw;ZQr_a{qki?7mqGnFn`|2%)#Duee1e9@;ONAv|CL) zoWQ9W3Ei+tj_R4t+Z`;{Dq}OP9t=Hx9 zIXzV~TN{@3#B|P}c~oz}u z*(BE}W%LWd=8>uu8{nMB>yG;qUUxQp1T3PyRnQF~PNl&%XbqNkjKoz{k568#-(uk} zXB3QF0qIs8tHeqTZpz42SmRZzi?2_iphjeb%n4RN^H;c3a;8g)63~Vh@a9;waL(+R zgRRXCb(PtG&+Wurg+v3bvF!cI%D92P+MA9{ewDM~Ri3@mSz&zr{ch*ox`2-je#Lis zZ2y4x?)uRQ0g3PKf*)1tk{-cRgAUm(v%kViv=!eJR8>jiKQ`lcmBaF~iE5+zs9|a$ zwXU#w4wjq!owPEEM>FmwX9l0sYeN9QA239w3@E@^JdNL z>um$jVk1b>d`+%elBS7pD2THs+!6XmGrQOuF}#l%nGT9oHR>Q*Megz*1? zNUjb`)H+eBN~L!~i2P~u67Hc~7Nw7SejoLmv*zVcCD(OgfU6E%iht@8y1A;rGi$#8 zjz>@#9s0M<7vA0c?=8Z+=L>&AAKz+!iGKGM+l#_2-*a4wE>?TB3bUGBJHAxw)^O`M zwFRB7v?)haR{FZ#SoWejeJE$=HTV^c5A~GOgOhbl_IQy)NXuc-HX*wE#;yLg%*mVfst)J1^KbEwMsd7GdYR| z&4`)HDrf=%)9ENm=hC?VipA>z5Ee28RK^rm6soNR7Z42vc)XNB*4 zs{x@Jw)__&RdnCH?#X8sFFklFgB{Tubi-n5Bc6@Fk`<)H`!<9C_@sCVW|0_p* zukhIwS0Gt7XZyP~AAMK&huh1@zORY-1+B}5{+woj0Pp*Ba{P5BhFZnF6 zaNZ?(I+;S!8;#SM=Aj0Zprg?c{wTP3MM{Q zbn2L~x8L^JzA1e6>Z`B%?KcazFs})>yv;1wxq0V$OSNWHNTSix?>v3W>1%COnmK6x z>#x7Lij4uz_64^9oxO3|ZhYB00JDDg zNu5xg;ucid9aJhbGU;Z8o@wr*qS5-Vcq8Jl^&)ESoPoaXuJ*RNd@2zQyPZ}u!537b zN-Y6dAS1Yd*-!xT2uk1rQVpb5G#NxEn#2e~c$4rlE>e|ai7!S4vC?m^y?#qmBF>g(N&h2$;e=5gW1eEYa+p}mKvVhwf?&&sGDyQPCU8pY&yO0k|pT( zorUp3D-KrA*#Et4TVJ?-zBlYOxFeS9k3S{Shktj+X^&qrBb^YI(+eAO>CsEZmhPDu z2=;93BXY)t_kE800ac52!R`XzSe3G~5b2>&M<_@`9RgSthEj!IsZ@@Ot1^XsSKcst z?8+6@*~R z@401q(P(<_MWd0XX=cavO@S+Zpn_uh?dTxquHC50FW#UZo=)4~EaOCTgb2qb|( zLJ|@-`2xu%+0E`In?kYyd-T2M+&e|hHoO0QzUNN@y3#%8+*99n-uL$!G&*-#Ij{C% zP^}De%wif5-(4$5a1j5yf%1@y6`<^ z`td7<1tD@!?PX@u{uST}J;C zs);rn3h1boo!x{i#^2d=C(ga!2Mp<$(a)^=@-Je{0mY(ycN5-)^Je{!@KQGwraH2% zK}5+>n@UDgN-0hJW)%{e#^N3c^^wa9pp|6zI_x&9#ca}mgolNJGBvRqc#VY%Vz+QT zoC5hR<<`29JLt_MgCu9Fm^p{Ad^aivIoVzZ^fc+&L7D4LeEf_Mcb-*FyDS ze|OlabYE|GS10Z(?kS?wEXp8`k0@d(gpGj={D0$&d|1RC2sFi}hMGjQ%I^(`$}6>; z;Il2^ZsLP`<^+{+Lk`)Mp{RcJ$D21oy+Y# zvARK<+g7f&C%|TO(D;rbeUDze|V236mRnT5>BFEBd zz@c^!A}1*!e@mJT!nuxt7SNV$$!Nv+uy4T=!0b6bMx$b zqA@XoQ(4hI%3uo}?0EF&ZIA449=+p-SIKCfWqH};r)sbvuFT{W&Uvu^3lI|ua4rIL<)UnDjXX8JE85y)#wPyq+1WyqgZjUWXxfW%Y+v9de@Z9T9+ zxmZq#LDv+?L{iyi3VspEd8~tBAnzplj2Yqhw3RX$J0d}O>p#Auu3fMNs6vUPjHtA! zne{PeO3$sYppaaFCg!$NT6?~(FIbV>I0~pHdI=3)BDL3afejaIGyVlYa+RluaTdH=bG&Ysf zA2#>L7cE^B_jhe-^Yry(jm=`SvfNh@cZD7Co@G68U&s2^o}(2X`@bBMluM=M68e;> ze8Yw^3;pItKL|TGZ>aL@Q#PeqnKoJUmg>Hy^W%lS-$kpX~jRVMm)>u8<86Iv9 zRC-bU2}6U|+eqRZ{|{`EyO`%Gj!NW3Bq6^=KC!4ZTPEZTE&OTx89resZ@K+H4>88G z9nAA*|K$N*XTjK#kFj->ndA%w$s1n=P72x-qI6o7LM)=p$jk{j?D8o~9Q)t+7SRr)T}l6&dgMwqWblw}^Je}hwz^1=e2&v_Mtze*3_dr15Vn(7qt zId7Z$W;`n+Heybr!D+MfIBtP?^xUF{=-<5XJM<+y3+Tz*5W7$021?+~x^Sj#90!n3 z+gy@#ULOqLeBU+AEPvU+-(+jN=*d9)sy)ZLVw=NdjKW&w89F>t`Df;}!_Qs2yhg9q zZdGcPBJboqhdw$=Fh<|c?WG^!PJy0n&6*^w`WV4pX=oWq3#2B>ljW zTfVv_wuyWt;vGD)r1H;iJo~$A6Kd@irH*{!Ap2{w*QWo9{=`b@6X(hI%)q+JSnbFE zL7%vv)Im?=?DP`R7O3OMT4{n~J&<2V1bQvrPmBhu0NCAd$%CRTe|tvKU#QE<;Cmdw zdYXSNW-bJ@!OC*55GU?GTge{4ea7D>ZQy*oprULe38Qhxu_{l|okBid5@;r)ryj_4 z(Rjp{3 z$ncpN!8eb3;*g4wel+cQ-$IX&n0IR4;(}YD1yQ|=x;k2#alm}QY1C_E91G`VP_C}@ zlgnI zdamB?-+f?*d+Cv(fVFYacj{(f)nkE9U3=PCZlBJiWGmW6D@QKLa9(;RiFv+_b-;e8rtZ$lXe34v9K)aA5*W-(g2X(; zD)3(3#g=ztBpKJtY(AZvCtnsyz-yMHOKRm^a)X5iu{ZJ{_STuVB);G-H@QO|cc`3P zHRj=5d76XoSWE6zdGaIRyk3IDxBvZ_b;&LF?@mvJYhz4@&LCs-$rXXxmb)s9YLiYQg)IZL!+_(S zxmLtlp3}Al6nUvG>$`nWbqpLVh=6 zK#wDBJX3FNsqF|14Rly-odZLG&e|4hT{^C1&=Y5WgTDH6<~6pu#b5TI(X0t~r_a=PeP@oIY@6gcQR?85;5MUOQ$Pb@Q~d7=n8<>gvFo3%*r zpW&?I_y6jq+yC{xQ9c2Yb9nifFVPw(LvTKTaJKH9a4%iD*s}P*(zG)3((N~XaPP9* zpP~~-hrjepbmFSv2mTTLVdwKVES@~|pSO=canChtG7QUz%N<6Q-mFM3sj~ysw72aX zUbJ}8v1hh*?d%WTaJ=u*;mTX#{J4NdegrheM6i88ONX<+84F@8zEjAb{(Km@i86ZJ z`7rVn?;PaT%sBGsS|C(Aa-YlnePc_8>DQa&jHzx_H@o~NKY9D?LFRf-Ty3x_GD~VK zghubmT`i)S52#-1(X1SM8f2pQ?n1zl^Whr=>`{)9bGcFCS6&FjDDb`f+A=h=?YtFe z;z%;L7==p_aNbc^U{h%YSYr$h*h}?#w1J9)zDu=Ud|AQY!e;Uajj)=55?*P<%Ws&; zEBRX$o*XjI4h$KLj_C{76 za+-RUt%{vGo%^D%rP|7TaPEfHqt#*howK)W`NHNJ>`^DuI7~{NQ5IWL?}FcHB=dFD z)mx)(?Zo0lXO-^NXXpdxZg|F6-5#M2mzX~QHQB@S6IB^7NN<5bTJayal0OJu zfOFZRu{{r>O{$=;Xo#>430S`?{6 zNSd(&7Oc0YeM!d>n7KB8xFS^H_b3dNNkY3=;i7t0_yhK;Vj56M%w;u82p)py1 z+Kz`-um1AkE{)l4*2s)LD}BE&?5|K8>`JB8sKT-K(|=@^5DbV395+F;ZX!SMo4`I> zjF=S~aGv)#BH&CkaDG8!j+}vCVJYJ)21jW4$ddkpBaw>sr4virEBXhTMq6U0u&%*A zx@mv&iqCCKhdY-~F7FICR!18o1`WN%)g2CwEs9n4Z)|LyY>)X}zKFA`-sCX(cUh|3 z<(0#Gy6Z-oB7RRe9f(G&yehp!rx#K5^vA#h-eG=E*(j%w?Gia>$ri?0vW3Hr(^r6O z;RV^kOLC;n5iLYwELd=8qix8Wjy2mF>(hFDs=m?I5>NYv>}b=u%TWAI`iH6b4SIvr zSm6SRM{3aD5Ko`0dL0e&XBfxUX}B*@Ns#bPosJ_hRg4|PsT--h$gAR0oJdGC6`y{# zkks38vBgO$Z!cE=VEEi5ek&GXa8g{iv=p2ZOR5G@Elo9@sm`j9%V9AY^>QhdL`hjm zV0J+sFw7DM0)jN4EzSF@Gtg_t?m5ueeeBH6!)FdQYQkMxKC>#as>T&I%Ta5&Rz_=+ zW1ZD20u56gVQKQd+WKYnc02s1ae2LcFZ1=DD<9vu@yrc_BPaj)vwPlp`qoXgVpgG5 zE6NSh>aLhsRI&P=y?qmB{}LVE)!MpcQ83)Is^-D_D1yQHA`{{E1BajDt(UI6FhFkh zSmL)Wz{=zy+6qNxzJ=XXz-Cj;78-b`Hvw;|C^STK)6==i>S}ffrwujMjI}a9LwDsi ze(mFX*)`sz+GtbO_g887J@LS_O+3tfo3dhmJ)ZiOlcbAiEFVyy!u>PhuFx167dl1{ z3SkE{>K;EGi9|@AR$f-ac1IRdtc;G(Hx?TmVMW*nns%Lh@xA@~|LMhhb~QEay644z z+Q0w37fVc#b(lXY(I8pZ>sJ1D_8CN z+Tz7u+jrH=$J)o<-(?%Zu^+bV9*C@m$Wr*9!|^AZ*xXj-RQQ4U^X2$OAM$D zJ1CFc^V8$!z7CrB53YLWj*+~Za&+R@$V=lltc=SHev3p7yyGm$&vnE{*@DqXj2O?N zjl!7~DG?gy(})R9cmx7Q>mniP#61F20X|qYiQIx^pR0Sv6Oo-7`upN9ORHQzqFv{5 ze@A7*Dw|4aQ@Ks(&2t~oqFl=0hpv6<=kCdLddh=o!hWFC5$J~*blyZZ>I7jH!P#MO zY$sx<2|neURLn8FkAlT)gwD8&!45puEA(V`-|{`9U(G#75-8k?sB^UQ9Z#j~;o-jz zJS@T8)T6Q?zK^u%+()=?^q!C2_L$Hc`To)`{@gtUy>;_6%nI}NEV1o0V4hoJEMq7M zYJ-!Ge@ZBjDI^lX2}y)SaOgC4Ck_V3g4pUpa>?*lqs>ePH6V8bLJlSmxyE3BDl!K6 zTQk#w-1ORtx(d5;vn1mB@tua+-l>M%s<%bV7sPMpRyC~Xtux;FBUhDVlgeIETfxcy zOQf_``>ax_)mLr3`rMD{c9pj=nmb|eqpvk@TAWhQE$3cV)C_KF$+i0oXh*ckt3>Bs zq}$LsUwta&aHi6A-gjV}z&^w`!#ERE3(mhH4BVe>1`tO z!#w206X4({fY2^)?l$H*pzo7te^wPiB1wjitwhQep4ZlvhFQ{lm?gPS(~*EF=?Km? zplnwlxtvE71JzflG%GR5^6(^UW_>6L#guYtftCujafD&^Vro+*l^JGEJJrxm^F_8J z8=+(}p&6>Am2BgjX#gEgO3UVNXjXNiyXYs!hX)t;cXzgB2@Ja1m++`y>+lK)R>FzG zSzvPFg%QG;qS;1Zka^*)64Ae=6ODSeFY5j2n_b9gS+YJKazI1eC$>2awS9`0cToBlF z{|$jHIagdmyb_kw3nj5$E-LJMybeKl{6s?C>dPx$t+;H>Y?&@+KXysmmd*PYPu;L> zSw%c^tKCj>^4h9IEK_fa^~5z7EA*{dwQ9`_fe)QJbXlM}aKs<+*EfDsY_g!3D_FBA z<8O|bQ9!QZ?{;$EV!g1}tEsPKWf+wVhbQIn4k{@IjtIk*WW@yKgyYDjSMtw=yidG0 z*LkbxXI06D=1IF*EQ?;Q|ZRZobb-k@a~wU&ou&4HgE6| zlhaKkB@C&(JGHVa^mxG2+hC3R^zhKxVoOz+6iS8F{0(inuXBCNZ91d6YQpOouPQ6o zXRiLt-Gk_{h&}h*?x)*aLlYZP=(F(K%UhpcEUcp2r@T{*dFCf1?s8#z)S|%%%E)dA5EKpCPQvsnzqS2Wldsj~3N~$i*ra zb803oq*#>H%VjfnoKsnFaE^p=NSfE}uo?A&Vj%U;Kd%dh$H!)uj`58N}g<$>f9iC(9*1?!@Vca)}XeN9}~?T~1LVjQ@r8iBvYh>l1=9u^3CM>UPjB z7&N-DO2N;jTRT^!D7Z0g`tZXKQO7U;4SoAn=;Wd1-!vU0o&4$d5-Kb1B6RL4+%@zs zXPr(%vAgK+`|YEN#8Nx%EAV&r-j1vB z62#~z!r2)yHYUTn*v(Wch$zh*j4rCL)?e|uBP1PAn4Fak`EMN&mr2nt2|K=Zxvsjd zyE^xkmqiRKe&t-HwaR0Xh|Qi#Yc{u&u2)vKjwEugd368jt+L8dZXG&_Fih9GG0T(rf4n@+Ndl^>dTe;`hyK;~7qkhd%Az7?2yQ^FrjM`&S z3`!~-uc8mE5ic2M1je}?)w$x@+&WmY&FGHYL~+o*YKx2?w9HcNgF(~3a39!#3D!@p1QI~W6-v2cqY5c0g-ofK z#CgZWGU+5AxlZ#@4%ihHi+Cme0ESQ2h<@Hi67w{I1M#Z0*=U=4b21FDM+rZ3?!0_mu2Z6t1V8&irxFm{7sSN%M+__Tps8#*j+U-UAn%` z)U~qC$jFWQ9=f)*da|lx|MG+@ySl~RWD3-WbmJR#?HXS>GMMO$d&@LtRbBMTWv_qM z>QlF=)grZ|QQH)-gmmmyvudO3x?zlhqwyZ;Zri;iDl%BSHiltb^+QpGMW>AVq@Ip- zt%;>AJ`o6k=4@LD(oa>3{J)gCF`ZdykPn&6QZcVLXmT%#Pw^Nd8jA8#H!=T;5k;t7 zpugUpm8lU2k}S*RZ$%sw7Hq`~E!?0Am*e{Of^_J!7^q8eS zgZ{kf(W4{kXl-p&J#zHXOs!)Wzm)ugO^^@5s-ppRhvM5!2|6bfB?Q8zKp)J=r* zJa9pE=My!W?fajoPqSKsjo=*^IIw^B&dnPJRu8P^gRX}MvCZ349-6B{&4J!+Wo z5gLr+CmWkGcoL`h^ zB*VAvY^~k(z_v|yH8T>G#$YvI`1-rQEK|yI)!qNHDFvViO4wE=*{_hO=z#u~q zbP1SD_xQ6KT__atVRwjGSXbPv-!YH|8Z!oyc56IfFa+XOdopN5Hyiv(yFKAI82kyl zJ?S@`yNT{O_mAxRwzyxf_s4CvBrct_&H5efy^p8+jqDixFQR8Cuk7de87Tjg(|<$F zlo$OvcN_OjSjt~hF7BJu=xGV!Q#j$lnlSDPwUwe-dMl1x;Pn#_Bp^zW6O0l~VzF!01|E1`gl^nVo(z_XN6%dY&@i zdru&Prxh6Eq|J(dvIP4I(?)~f%}dQp6@)zi$O|5uWiy}QwTKfteg=b-V*K@_cOJB= z)B}G&_OCd*b`Mn!#Ryn-$dd3s|7!F8samaWqg^X&Yr%cI2l}|3dilbA6ujo=^fBMP zLV*SPm~zkUmFL!r2 zZ-1txO{TSP)M;y{_BT@{{p*JQtv@Xnb~6qO(8657Szn0{DDkE?)A)% z_#?`CVU`Bnc5SVL{ z6xC3dY_Dm@AdobG$b6hu)ld3z@2iZ3T`;G0MM1hZc8OtuFSV~9WU>> zw_u(4)+xy|G-#VhW<&gj-l>vnx{^U4Pgb=E~IjD~Ydqt$3E;BvLC zZ||6@GXaeTZGVq+ShNSzNVFJsn3vm%aF7whMVQ;Dhp}w}^C}L@x*Ua}lqYdsELzOY zk$r*oh9i+kP~zcntIyMR74sf-ifYK#c4ujld|d>3nTXq5NHq+6jRw9p`x8cu0e=Bs z9GtiP81oYJy(inb265sJB;t699XBmOEQO^-G8~!{&G|-s-Q@T{|DvwC4fPxF$E1$R z^L{JAd>g*CHoIyYl1W>USh5(2#7r9{lS-sANnuEG_^wpON+&4^$f*+ez6i!B;wI;Q zf6L}|YgSB6PAnVk?Wx;UzYF(5;i$a8oYpXR!JJ-mdH}H!BmmaMDG7t2kv3B>1sGWY zIwOJ3NO6KQj1E0D`|DO%?-_MSp5+Tv8qX>R7wg;_FIgR#_k!ymXMP5K9nUUX*Gx;f zwMZ--LLv!FniwWc%ukvO?*kbq>@pUwl~l};xf9V6(VRKkuzvMQZ!qKy;qS{Y{QYX? zN%($Wwx@%CdyVi8s#;Ikt9S&D|6^~*1kn`6ZI3g14_pQ#+PKC zh3|J{TkFW?gX2uI!p;%8A(n7tI$4oq?zeruNGM3on)f_s4Sq)0C#Z)p{h+Uc`F!il zuFbSegaq`a1SNxIl!*(U1%00q$q2=Qy*nSt5^V07*)>VEL0n(Ta?ap+%_5&-ybALY(2*q? zoj^oo7nti9`*z7(-AqS-w!qHEByW=`(a6TaOKzlqrj(KAz>v7b{;+bW3lHs8erlItnm&U=*IQz?z@Bf;gXXCydKu?>Il3RzQ$~+_CKz^O?jRM{XnH1V6 zB`4*S(#^A3jvUS5ISMq3>F`Xz3ah+8Bcz4Fd<(cqg-8ZVGlzZgEsbaO{I;IK$5a>K zWAL+@eW_$l9?i;uAhM!5BxmzSv>qs~T*P7nIF75|m}fk2#1wfRhk=A8^N9j23smN7 z4&o%hKfCuw)fNmwX8 zN}i>*LK${z$;Of0h zABt#us(zWf@>xr2aZPln!R@LWj#m$4oXmh)Q?vOCTh=~yRbS7sGdtJ6wF`aK?8!-U zb+uEizChb#s(vc#@wZOm8ES&L_&#?n<%GFtr|vjolF&>cEY*b-P9B{}@ZeFA>`Qzm zCO&jDa=~&WY}A4CVzP*vEEJtl0LP5PV{R9s8tP*0@%Dy5{8gmj`!zFW#6i>Iji(N^Z9lkTs%ht)laqJuY?@kma7WvrQyUY#G1H1o8&{fQ zy@_~hP_3QvIDB%)(2X1F>o?puwBuwr{Mf-2pWjyhs=IzL zx?}IY?a{${H+_|_zCYyes&Tn$y8NO3dLM`R0aDP#=BrB0TQeIg zR6-Pw$UVFAtSUlo8s+#HcI?Fe_++Lz_YUHknI32tde0RweCUU3#`ZLK>>Z6pNB4Gg z>>G`Kv)mOiTf#1l#uc`hBd&7hMJUqJu?H8~)6q$axFcqB*jZlg44cgnclp_uiYPv; z59dOSPh7Ql_}ElDK6Pw3-4oGjBR%Pwu5fvIxa-{b;;Sa(@yTL=6ki}E6nK*d@c|-r zI`<;_4f97J!*-mZct&6<8pa9ONzOovsZ0fBq&lvwQj2ruB{8Z2D#0qmlkwAX^<(Pt z-0zJQwJuj}g~`PKH0EBU(eg)Eu6%U)xoP$uSEj;ftjM@rnUKj8%JBCs%bE4`Hc=h9 z?|^5-pgVzjHd9NpvLMhy1*~bF73*-y5qyUA0ws-P=4i;$ac1v5o&7rqJ4@Xfo(H@9Y0DFm__Vpu*qJ%2v%MGDX`jG!r8*C`4~ zevFvt+lmG9d;dEF{@}wf^^~!Dhd}g7qTevIu zoQ0&X$AtNOll1kj>0dF&sV`*9mm!5RjO2<8lF4CKrL54~1f`(lGKHLY>CiIiWXW_X zm1smIq32F<4F8ols|Jt$Eqa>oehOe|ubHdc0f|Xz6dSGDVvG>E4vD%%{n%olP8Gw$}s=kV7XK`1U`{oGhw6`BdD-E8d$w*~y)u;NrKmvSlv!B1IE@hnFo0urRP_9(pXP@xtcePX67ERgVZgO~1u`o}3YkME{Sc zYmiuyzkRL}Ayy1DYc)2ah*_*|&k9(b;txQs6{5T&Ws)g#e~X6seg!(%o}p zvIc(kbi>aj!H$)+wW~UV!Om5+wJSSQ|X$VOB2Jc>;Ei$IbS2 z9-gSFnK<0pacClynmE*vUfoqu(X~3AS<_Qd(X(dD)#zxsD{KnXmvLqC%k^udT)#`N zw-a8{L^sfBMooA-Ji~x{sTK2L$7yJrz$;JCJpV^Oh;9<5I3;NZw}(2R ztmL#$U(V1Km3({5mSTHQwp}ROKC>)zb_BhTzRyg+{>_i01T-+@gAG4>V~jYGUBOUS zjl)sX6$*AG9rQh+&ZNVU>UYcsY#-?ZJi}Zqj<1;a8~(yv{dek2 zp!Zl2vy9Y%XQ(rkSb;Mt0}sZ)$27Z5gk#RAK_SiYqzLg)xfI<^BePLkUZ#>uL2b6t zHXfO@lcdOr;uUbzH$)j zlNxPOJ4d8{*Zr6)_s7{hn+~BhxqHw3g#G;-)(qcTH~mLu4EpG#lGM#vxkU*K$4XL! z=bdB`j2+Q9LWlr@sCeOnD;O2R7brzc3bsN4hQfXjlcleLl$0SVRvqxc80FZEAj+E& zFpO@}hyjIp;0btSW{n!XkEIxM>z)bEgbX^9nEW2 zZRvXEFI9sB!_l_IYO_moI~Hu%bF*d$_QmDXI@&I($MWUnm;??{y>Om%vix~k1Md<4 zehq#Hli`G+6>KfVp##H+}?7|F6_z&Cc|7Dk{2f}TpGL~I&j$gak46%^B{(Yn1v-N1F1LERRbp+#}b~iPolc`FLRzz&F)KO?_t1yleX<#iK#L-Kr~> zV5i>^1<7mP3PRZscP*8nMzhkmT@Ocr5P}GSbA?IZPYjPfBI0O)6d15HN5f}lz97T^ z+Dco(+HhE`t8{Df`33SR-`oUQJvA#q0iVT;k!E)cS0`3pw{+=ss}j}2JF+=LIDsyi zxN&7{#Up>X_0~U}S`lA)<2c%r45R;$#YYY;S$54tG&*t3vL%N`; zn1A66u=~vvb;lXA^#7UlG!gf>Y1CLB??`lnL++R-R$hi&v`fnK4LAnubufo1s*XCs z&qhe4pxH7dj1Ug$xD?_2s+Q9nCmNPXXq*t3&g-Tjcq%=J(~kwsq&fFceIjtW_6vUF|=>dUl&~xii+!A(n=EPvDnd|N2)w` z?O&sRMc3vIYivP1vgdvruSC~Y*A5|SOURF+6_MO!=<0YN_s*7JV4A9`9X^A2|KI5d z^J7shUf)Jc1-5D_YEM?z?{&fO`>Iqx6tOEQtcHL&>J)Gh5e~iDOlTjw5hqw73(A%t zC(bMZZ4iQnwQ$6Ck7wnL^`U^%ZZQWrD^Ksor>mF;*l*yzj1&0Yzfx3fHdUk3fb4)% z;IV88syv?o68DUJpU2)}J1Q!IUJJi>69oH}#KI?Vd)q;X$z*FVqJP{^V;6}+()!6_ zI6Q1l;h021OF3o z$?TKMUFM(5tG&O@4W7-tjbgdCbGh%MXzu&;21etuzA1A=N>`7$yrb)_wC&8 zzJzXP-v3$d(Vx9@bMCK5M)pG$tlwFF{i-nS!59ZU+0G=A$V|#lmYK3O+td)P%4eq3 zU~?Tq#{PX6yB27RgWAQ9KL`pxN$xsHQU#G=OGG4li&V(o!f{F*yyk~VkWolBS*S5z zx$&$X7>mthI?NIo49FrCOT}w!Eo{~!kg43aw!DutH z>rz;xN6h5BZ4_(5`1^XX_<|E*c)SL0xi{!5Q{g?qXG)qGWQ=o#igbD#GV;$PIEO94 z;|+RK$v_RhB=hQ@HEp~9-D}z|+cD{BHM))3XzN(xtuF=W=78(mpWwuO6maDxU1x4d z_SaT;oaJhpX3V|r&`o{E-}?M&-9J1CC-foanoD1}w#OXnsO+|wt!~?i&kh(vYDbw| zFI#L3e&HUq!D>(|RQ;);T3i23uO7Tvu9K^sY9jxuV1J%tdkC*N$Qv7in1P7ID>1jg zjDr<%6EnC;fzeXJ6%Wo2{D;Fi&tk(30w@cI;uWImSaH}jVpI8n$J47`gvk_nH?YznYtm0UH-du^>VXL?Fh!)rn
      =M*T=iDOfwvrO#XEcV2pq0}VGpZzK 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�qNwm4Cv7x@M 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%0DIOfb@D{!U(YWI@2;_{TcE;VVh{pKPxm+RiK+ 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

      Q|h*Oy~Qk6#HP5JfWn#;a;s;sBldhXw( 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

      1C^-qB9HRT9fxP8;5;Cma#{|b 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û#Y`TC|@S& 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 \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config-dark.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config-dark.svg new file mode 100644 index 0000000000..709ec0a8b0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config.svg new file mode 100644 index 0000000000..2db45dbcc6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-config.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-file-import.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-file-import.svg new file mode 100644 index 0000000000..4b29411c7a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-file-import.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-first-page.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-first-page.svg new file mode 100644 index 0000000000..e61faf63c7 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-first-page.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-group-add.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-group-add.svg new file mode 100644 index 0000000000..bf7a194750 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-group-add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-hide-pass.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-hide-pass.svg new file mode 100644 index 0000000000..d3bf3f6dc1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-hide-pass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home-dark.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home-dark.svg new file mode 100644 index 0000000000..782e09ed1c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home.svg new file mode 100644 index 0000000000..ca1b889cf9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-key.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-key.svg new file mode 100644 index 0000000000..fc4c8c7e94 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-last-page.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-last-page.svg new file mode 100644 index 0000000000..541bb8dd9f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-last-page.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout-dark.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout-dark.svg new file mode 100644 index 0000000000..748dbf59ee --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout.svg new file mode 100644 index 0000000000..52e4da118f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-logout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-monitor-add.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-monitor-add.svg new file mode 100644 index 0000000000..7d32e5696e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-monitor-add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-next-page.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-next-page.svg new file mode 100644 index 0000000000..2fea9b2785 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-next-page.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-pause.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-pause.svg new file mode 100644 index 0000000000..2fbb899ee9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-pause.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play-link.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play-link.svg new file mode 100644 index 0000000000..5c5ced87ff --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play-link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play.svg new file mode 100644 index 0000000000..8aa6ccba20 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-play.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-prev-page.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-prev-page.svg new file mode 100644 index 0000000000..d0a5d1a233 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-prev-page.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-show-pass.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-show-pass.svg new file mode 100644 index 0000000000..d4e75eebc3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-show-pass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-add.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-add.svg new file mode 100644 index 0000000000..b36a25a9d8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-group-add.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-group-add.svg new file mode 100644 index 0000000000..bbefb5a5f2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/action-icons/guac-user-group-add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/down.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/down.svg new file mode 100644 index 0000000000..865be43249 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/left.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/left.svg new file mode 100644 index 0000000000..db04c59440 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/right.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/right.svg new file mode 100644 index 0000000000..d0363a5aac --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/up.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/up.svg new file mode 100644 index 0000000000..28dea1b1eb --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/arrows/up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checker.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checker.svg new file mode 100644 index 0000000000..56edaff0d1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checker.svg @@ -0,0 +1 @@ + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checkmark.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checkmark.svg new file mode 100644 index 0000000000..213d2fd9f4 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/checkmark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/circle-arrows.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/circle-arrows.svg new file mode 100644 index 0000000000..f2ce7cb0ae --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/circle-arrows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/cog.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/cog.svg new file mode 100644 index 0000000000..ad26f0af6a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/cog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/drive.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/drive.svg new file mode 100644 index 0000000000..0f58afdb73 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/drive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/file.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/file.svg new file mode 100644 index 0000000000..5955b59036 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-closed.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-closed.svg new file mode 100644 index 0000000000..0a57100c90 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-closed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-open.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-open.svg new file mode 100644 index 0000000000..12c0e38e88 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-up.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-up.svg new file mode 100644 index 0000000000..a7bcf9256e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/folder-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-closed.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-closed.svg new file mode 100644 index 0000000000..b7f253ca0e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-closed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-open.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-open.svg new file mode 100644 index 0000000000..9af184b057 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/group-icons/guac-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/guac-tricolor.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/guac-tricolor.svg new file mode 100644 index 0000000000..0242862a66 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/guac-tricolor.svg @@ -0,0 +1 @@ + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/lock.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/lock.svg new file mode 100644 index 0000000000..f71e950d8a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/logo-144.png b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/logo-144.png new file mode 100644 index 0000000000000000000000000000000000000000..e2cb830e93ff0c7bd7dc9a1cd10402456af34c76 GIT binary patch literal 9167 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 Wa+i#07o_+GN=8CKyjs*S=zjomwz@h1 literal 0 HcmV?d00001 diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/logo-64.png b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/logo-64.png new file mode 100644 index 0000000000000000000000000000000000000000..99aaf3ea986d290a002850abb12906ce76fc8a6e GIT binary patch literal 5082 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 literal 0 HcmV?d00001 diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/magnifier.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/magnifier.svg new file mode 100644 index 0000000000..8027668094 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/magnifier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/mouse/blank.cur b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/mouse/blank.cur new file mode 100644 index 0000000000000000000000000000000000000000..60b635ababf3ed7814e21376530f6ac7b64fb329 GIT binary patch literal 326 ycmZQzU}9ioP*7lE009F=1_m)8tpUUeK5{)-0I$ZZ_jW3 VwnrY*o^>vJb!yu??%Avi)&Ppi9P9u9 literal 0 HcmV?d00001 diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/mouse/dot.gif b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/mouse/dot.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ac8a00b920c77ff759bf7bc2b693191c4c6ead0 GIT binary patch literal 72 zcmZ?wbhEHbRA5kGXkcUjg8%>jEB<6*ij|0P}PjHUIzs literal 0 HcmV?d00001 diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/plus.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/plus.svg new file mode 100644 index 0000000000..76234d2616 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/progress.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/progress.svg new file mode 100644 index 0000000000..b401c67a34 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/progress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-monitor.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-monitor.svg new file mode 100644 index 0000000000..54b61e9f41 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-monitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-plug.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-plug.svg new file mode 100644 index 0000000000..b546628b55 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-plug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-text.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-text.svg new file mode 100644 index 0000000000..323b5d5a8a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/protocol-icons/guac-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/question.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/question.svg new file mode 100644 index 0000000000..062ccfa359 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/tablet-keys.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/tablet-keys.svg new file mode 100644 index 0000000000..dbec86e867 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/tablet-keys.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchpad.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchpad.svg new file mode 100644 index 0000000000..4ee1da14f3 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchpad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchscreen.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchscreen.svg new file mode 100644 index 0000000000..f617206178 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/touchscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-in.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-in.svg new file mode 100644 index 0000000000..8b7995b712 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-in.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-out.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-out.svg new file mode 100644 index 0000000000..52e6a31dc2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/settings/zoom-out.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share-white.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share-white.svg new file mode 100644 index 0000000000..51c3d3f294 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share.svg new file mode 100644 index 0000000000..349f048985 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-group.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-group.svg new file mode 100644 index 0000000000..1af99e0dc1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-group.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-white.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-white.svg new file mode 100644 index 0000000000..e00605fed9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user.svg new file mode 100644 index 0000000000..aea331f779 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/user-icons/guac-user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning-white.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning-white.svg new file mode 100644 index 0000000000..63cc03a10c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning.svg new file mode 100644 index 0000000000..d7f725c814 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x-red.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x-red.svg new file mode 100644 index 0000000000..1015164412 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x-red.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x.svg b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x.svg new file mode 100644 index 0000000000..ed22eddc8e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/images/x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/index.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/index.html new file mode 100644 index 0000000000..eb7dcabde0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/index.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts new file mode 100644 index 0000000000..573bb708e5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ViewEncapsulation } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + + +platformBrowserDynamic().bootstrapModule(AppModule, { + defaultEncapsulation: ViewEncapsulation.None +}) + .catch(err => console.error(err)); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/styles.css b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/styles.css new file mode 100644 index 0000000000..fa52045d85 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/styles.css @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* You can add global styles to this file, and also import other style files */ + +@import "app/client/styles/client.css"; +@import "app/client/styles/connection-select-menu.css"; +@import "app/client/styles/connection-warning.css"; +@import "app/client/styles/display.css"; +@import "app/client/styles/file-browser.css"; +@import "app/client/styles/file-transfer-dialog.css"; +@import "app/client/styles/filesystem-menu.css"; +@import "app/client/styles/guac-menu.css"; +@import "app/client/styles/keyboard.css"; +@import "app/client/styles/menu.css"; +@import "app/client/styles/notification.css"; +@import "app/client/styles/share-menu.css"; +@import "app/client/styles/thumbnail-display.css"; +@import "app/client/styles/tiled-client-grid.css"; +@import "app/client/styles/transfer-manager.css"; +@import "app/client/styles/transfer.css"; +@import "app/client/styles/viewport.css"; +@import "app/client/styles/zoom.css"; + +@import "app/clipboard/styles/clipboard.css"; + +@import "../../../node_modules/guacamole-frontend-lib/assets/styles/element/styles/resize-sensor.css"; + +@import "app/form/styles/form-field.css"; +@import "app/form/styles/form.css"; +@import "app/form/styles/redirect-field.css"; +@import "app/form/styles/terminal-color-scheme-field.css"; + +@import "app/home/styles/home.css"; + +/*TODO: Add CSS form import module*/ +/*@import "app/import/styles/help.css";*/ +/*@import "app/import/styles/import.css";*/ + +@import "app/index/styles/animation.css"; +@import "app/index/styles/automatic-login-rejected.css"; +@import "app/index/styles/buttons.css"; +@import "app/index/styles/cloak.css"; +@import "app/index/styles/fatal-page-error.css"; +@import "app/index/styles/font-carlito.css"; +@import "app/index/styles/headers.css"; +@import "app/index/styles/input.css"; +@import "app/index/styles/lists.css"; +@import "app/index/styles/loading.css"; +@import "app/index/styles/logged-out.css"; +@import "app/index/styles/other-connections.css"; +@import "app/index/styles/sorted-tables.css"; +@import "app/index/styles/status.css"; +@import "app/index/styles/ui.css"; + +@import "app/list/styles/filter.css"; +@import "app/list/styles/pager.css"; +@import "app/list/styles/user-item.css"; +@import "app/login/styles/animation.css"; +@import "app/login/styles/dialog.css"; +@import "app/login/styles/input.css"; +@import "app/login/styles/login.css"; + +@import "app/manage/styles/attributes.css"; +@import "app/manage/styles/connection-parameter.css"; +@import "app/manage/styles/forms.css"; +@import "app/manage/styles/locationChooser.css"; +@import "app/manage/styles/manage-user-group.css"; +@import "app/manage/styles/manage-user.css"; +@import "app/manage/styles/related-objects.css"; + +@import "app/navigation/styles/menu.css"; +@import "app/navigation/styles/tabs.css"; +@import "app/navigation/styles/user-menu.css"; + +@import "app/notification/styles/modal.css"; +@import "app/notification/styles/notification.css"; + +@import "../../../node_modules/guacamole-frontend-lib/assets/styles/osk/styles/osk.css"; + +@import "app/player/styles/player.css"; +@import "app/player/styles/playerDisplay.css"; +@import "app/player/styles/progressIndicator.css"; +@import "app/player/styles/seek.css"; + +@import "app/settings/styles/buttons.css"; +@import "app/settings/styles/connection-list.css"; +@import "app/settings/styles/history-player.css"; +@import "app/settings/styles/history.css"; +@import "app/settings/styles/input-method.css"; +@import "app/settings/styles/mouse-mode.css"; +@import "app/settings/styles/preferences.css"; +@import "app/settings/styles/sessions.css"; +@import "app/settings/styles/settings.css"; +@import "app/settings/styles/user-group-list.css"; +@import "app/settings/styles/user-list.css"; + +@import "app/text-input/styles/textInput.css"; + +@import '@simonwep/pickr/dist/themes/monolith.min.css'; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ca.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ca.json new file mode 100644 index 0000000000..21e0d48cff --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ca.json @@ -0,0 +1,1000 @@ +{ + + "NAME" : "Catalan", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Cancel·lar", + "ACTION_CLONE" : "Clon", + "ACTION_CONTINUE" : "Continua", + "ACTION_DELETE" : "Suprimeix", + "ACTION_DELETE_SESSIONS" : "Mata Sessions", + "ACTION_DOWNLOAD" : "Descarregar", + "ACTION_LOGIN" : "Iniciar Sessió", + "ACTION_LOGOUT" : "Tancar sessió", + "ACTION_MANAGE_CONNECTIONS" : "Connexions", + "ACTION_MANAGE_PREFERENCES" : "Preferències", + "ACTION_MANAGE_SETTINGS" : "Configuració", + "ACTION_MANAGE_SESSIONS" : "Sessions actives", + "ACTION_MANAGE_USERS" : "Usuaris", + "ACTION_MANAGE_USER_GROUPS" : "Grups", + "ACTION_NAVIGATE_BACK" : "Enrera", + "ACTION_NAVIGATE_HOME" : "Inici", + "ACTION_SAVE" : "Desa", + "ACTION_SEARCH" : "Cerca", + "ACTION_SHARE" : "Compartir", + "ACTION_UPDATE_PASSWORD" : "Actualitza la contrasenya", + "ACTION_VIEW_HISTORY" : "Història", + + "DIALOG_HEADER_ERROR" : "Error", + + "ERROR_PAGE_UNAVAILABLE" : "S'ha produït un error i aquesta acció no es pot completar. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del vostre sistema.", + "ERROR_PASSWORD_BLANK" : "La vostra contrasenya no pot estar en blanc.", + "ERROR_PASSWORD_MISMATCH" : "Les contrasenyes proporcionades no coincideixen.", + + "FIELD_HEADER_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Torna a escriure la contrasenya:", + + "FIELD_PLACEHOLDER_FILTER" : "Filtre", + + "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Actualment en ús per {USERS} {USERS, plural, one{usuari} other{usrris}}.", + + "TEXT_ANONYMOUS_USER" : "Anònim", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{segon} other{segons}}} minute{{VALUE, plural, one{minut} other{minuts}}} hour{{VALUE, plural, one{hora} other{hores}}} day{{VALUE, plural, one{dia} other{dies}}} other{}}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Esborra", + "ACTION_DISCONNECT" : "Desconnecta", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Torneu a connectar", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Carregueu fitxers", + + "DIALOG_HEADER_CONNECTING" : "Connectant", + "DIALOG_HEADER_CONNECTION_ERROR" : "Error de connexió", + "DIALOG_HEADER_DISCONNECTED" : "Desconnectat", + + "ERROR_CLIENT_201" : "Aquesta connexió s'ha tancat perquè el servidor està ocupat. Espereu uns minuts i torna-ho a provar.", + "ERROR_CLIENT_202" : "El servidor Guacamole ha tancat la connexió perquè l'escriptori remot triga massa temps a respondre. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", + "ERROR_CLIENT_203" : "El servidor d'escriptori remot ha trobat un error i ha tancat la connexió. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", + "ERROR_CLIENT_207" : "El servidor d'escriptori remot actualment no es pot aconseguir. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", + "ERROR_CLIENT_208" : "Actualment el servidor d'escriptori remot no està disponible. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del vostre sistema.", + "ERROR_CLIENT_209" : "El servidor d'escriptori remot ha tancat la connexió perquè entra en conflicte amb una altra connexió. Torneu-ho a provar més endavant.", + "ERROR_CLIENT_20A" : "El servidor d'escriptori remot ha tancat la connexió perquè sembla que no està activat. Si no és desitjat o inesperat, aviseu l'administrador del sistema o comproveu la configuració del vostre sistema.", + "ERROR_CLIENT_20B" : "El servidor d'escriptori remot ha tancat força la connexió. Si aquesta no és desitjada o inesperada, notifiqueu l'administrador del sistema o comproveu els registres del sistema.", + "ERROR_CLIENT_301" : "Ha fallat la sessió. Torneu-vos a connectar i torneu-ho a provar.", + "ERROR_CLIENT_303" : "El servidor d'escriptori remot ha denegat l'accés a aquesta connexió. Si necessiteu accés, sol·liciteu a l'administrador del sistema que li concedeixi accés o verifiqueu la configuració del sistema.", + "ERROR_CLIENT_308" : "El servidor de Guacamole ha tancat la connexió perquè no hi ha resposta del navegador durant el temps suficient perquè sembli que es trobava desconnectat. Això és generalment causat per problemes de xarxa, com ara un senyal sense fils o simplement una velocitat de xarxa molt lenta. a la xarxa i torneu-ho a provar. ", + "ERROR_CLIENT_31D" : "El servidor Guacamole denega l'accés a aquesta connexió perquè heu exhaurit el límit per a l'ús de la connexió simultània per part d'un usuari individual. Tanqueu una o més connexions i torneu-ho a provar.", + "ERROR_CLIENT_DEFAULT" : "S'ha produït un error intern al servidor Guacamole i s'ha acabat la connexió. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", + + "ERROR_TUNNEL_201" : "El servidor Guacamole ha rebutjat aquest intent de connexió perquè hi ha massa connexions actives. Espereu uns minuts i torna-ho a provar.", + "ERROR_TUNNEL_202" : "La connexió s'ha tancat perquè el servidor triga massa temps a respondre. Això sol ser causat per problemes de xarxa, com ara un senyal sense fils o una velocitat de xarxa lenta. Comproveu la connexió de xarxa i intenteu de nou o poseu-vos en contacte amb l'administrador del sistema. ", + "ERROR_TUNNEL_203" : "El servidor ha trobat un error i ha tancat la connexió. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", + "ERROR_TUNNEL_204" : "La connexió sol·licitada no existeix. Comproveu el nom de la connexió i proveu-ho de nou.", + "ERROR_TUNNEL_205" : "Actualment aquesta connexió està en ús i no es permet l'accés simultani a aquesta connexió. Torneu-ho a provar més endavant.", + "ERROR_TUNNEL_207" : "El servidor Guacamole no es pot accedir actualment. Comproveu la vostra xarxa i torneu-ho a provar.", + "ERROR_TUNNEL_208" : "El servidor Guacamole no accepta connexions. Comproveu la vostra xarxa i proveu-la de nou.", + "ERROR_TUNNEL_301" : "No teniu permís per accedir a aquesta connexió perquè no esteu registrat. Inicieu la sessió i torneu-ho a provar.", + "ERROR_TUNNEL_303" : "No teniu permís per accedir a aquesta connexió. Si necessiteu accés, sol·liciteu a l'administrador del sistema que us inclogui la llista d'usuaris permesos o comproveu la vostra configuració del sistema.", + "ERROR_TUNNEL_308" : "El servidor de Guacamole ha tancat la connexió perquè no hi ha hagut resposta del seu navegador durant el temps suficient com perquè sembli estar desconnectat. Això generalment és causat per problemes de xarxa, com un senyal sense fils irregular o simplement velocitats de xarxa molt lentes. comprovi la seva xarxa i intenti novament .", + "ERROR_TUNNEL_31D" : "El servidor Guacamole denega l'accés a aquesta connexió perquè heu exhaurit el límit per a l'ús de la connexió simultània per part d'un usuari individual. Tanqueu una o més connexions i torneu-ho a provar.", + "ERROR_TUNNEL_DEFAULT" : "S'ha produït un error intern al servidor Guacamole i s'ha acabat la connexió. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", + + "ERROR_UPLOAD_100" : "La transferència de fitxers no és compatible o no està habilitada. Poseu-vos en contacte amb l'administrador del sistema o comproveu els registres del vostre sistema.", + "ERROR_UPLOAD_201" : "Actualment s'estan transferint massa fitxers. Espereu que es completin les transferències existents i, després, torneu-ho a provar.", + "ERROR_UPLOAD_202" : "No es pot transferir el fitxer perquè el servidor d'escriptori remot triga massa temps a respondre. Torneu-ho a provar o poseu-vos en contacte amb l'administrador del vostre sistema.", + "ERROR_UPLOAD_203" : "El servidor d'escriptori remot ha trobat un error durant la transferència. Intenteu-ho de nou o poseu-vos en contacte amb l'administrador del vostre sistema.", + "ERROR_UPLOAD_204" : "La destinació per a la transferència de fitxers no existeix. Comproveu que la destinació existeix i torneu-ho a provar.", + "ERROR_UPLOAD_205" : "La destinació per a la transferència de fitxers està bloquejada. Espereu qualsevol finalització de les tasques en curs i torneu-ho a provar.", + "ERROR_UPLOAD_301" : "No teniu permís per carregar aquest fitxer perquè no esteu registrat. Inicieu la sessió i torneu-ho a provar.", + "ERROR_UPLOAD_303" : "No teniu permís per carregar aquest fitxer. Si necessiteu accés, consulteu la configuració del sistema o consulteu-lo amb l'administrador del vostre sistema.", + "ERROR_UPLOAD_308" : "La transferència de fitxers s'ha aturat. Això és habitualment causat per problemes de xarxa, com ara un senyal sense fils o una velocitat de xarxa molt lenta.", + "ERROR_UPLOAD_31D" : "Actualment s'estan transferint massa fitxers. Espereu que es completin les transferències existents i, després, torneu-ho a provar.", + "ERROR_UPLOAD_DEFAULT" : "S'ha produït un error intern al servidor Guacamole i s'ha acabat la connexió. Si el problema continua, aviseu l'administrador del sistema o comproveu els registres del sistema.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Aquí apareixerà un text copiat/tallat dins de Guacamole. Els canvis al text següent afectaran el porta-retalls remot.", + "HELP_INPUT_METHOD_NONE" : "No s'utilitza cap mètode d'entrada. S'accepta l'entrada de teclat des d'un teclat físic connectat.", + "HELP_INPUT_METHOD_OSK" : "Mostra i accepta l'entrada del teclat integrat de Guacamole a la pantalla. El teclat a la pantalla permet escriure combinacions de tecles que, d'una altra manera, poden ser impossibles (com ara Ctrl-Alt-Del).", + "HELP_INPUT_METHOD_TEXT" : "Permet escriure text i emula esdeveniments del teclat en funció del text mecanografiat. Això és necessari per a dispositius com ara telèfons mòbils que no tinguin un teclat físic.", + "HELP_MOUSE_MODE" : "Determina el comportament del ratolí remot respecte als tocs.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Toqueu per fer clic. El clic es produeix a la ubicació del toc.", + "HELP_MOUSE_MODE_RELATIVE" : "Arrossegueu per moure el punter del ratolí i toqueu per fer clic. El clic es produeix a la ubicació del punter.", + "HELP_SHARE_LINK" : "La connexió actual s'està compartint i qualsevol usuari pot accedir amb els següents {LINKS, plural, one{enllaç} other{enllaços}}:", + + "INFO_CONNECTION_SHARED" : "Aquesta connexió es comparteix ara.", + "INFO_NO_FILE_TRANSFERS" : "No hi ha transferències de fitxers.", + + "NAME_INPUT_METHOD_NONE" : "Cap", + "NAME_INPUT_METHOD_OSK" : "Teclat a la pantalla", + "NAME_INPUT_METHOD_TEXT" : "Entrada de text", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Pantalla tàctil", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Portapapers", + "SECTION_HEADER_DEVICES" : "Dispositius", + "SECTION_HEADER_DISPLAY" : "Pantalla", + "SECTION_HEADER_FILE_TRANSFERS" : "Transferències de fitxers", + "SECTION_HEADER_INPUT_METHOD" : "Mètode d'entrada", + "SECTION_HEADER_MOUSE_MODE" : "Mode d'emulació del ratolí", + + "TEXT_ZOOM_AUTO_FIT" : "S'adapta automàticament a la finestra del navegador", + "TEXT_CLIENT_STATUS_IDLE" : "Ociós.", + "TEXT_CLIENT_STATUS_CONNECTING" : "S'està connectant a Guacamole ...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Heu estat desconnectats.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "La connexió de xarxa al servidor Guacamole sembla inestable.", + "TEXT_CLIENT_STATUS_WAITING" : "Connectat a Guacamole. Esperant resposta ...", + "TEXT_RECONNECT_COUNTDOWN" : "Re-conectant en {REMAINING} {REMAINING, plural, one{segon} other{segons}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/es-es-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Amaga", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Mostra", + + "FIELD_HEADER_BACKGROUND" : "Background", + "FIELD_HEADER_FOREGROUND" : "Foreground", + + "FIELD_OPTION_CUSTOM" : "Personalitzat ...", + + "SECTION_HEADER_DETAILS" : "Detalls:" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Default (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Feu clic per mostrar la contrasenya", + "HELP_HIDE_PASSWORD" : "Feu clic per ocultar la contrasenya" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "No hi ha connexions recents.", + + "PASSWORD_CHANGED" : "S'ha canviat la contrasenya.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Totes les connexions", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Connexions recents" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "Anònim" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Accés incorrecte", + + "FIELD_HEADER_USERNAME" : "Nom d'usuari", + "FIELD_HEADER_PASSWORD" : "Contrasenya" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Suprimeix la connexió", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Ubicació:", + "FIELD_HEADER_NAME" : "Nom:", + "FIELD_HEADER_PROTOCOL" : "Protocol:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Actiu ara", + "INFO_CONNECTION_NOT_USED" : "Aquesta connexió encara no s'ha utilitzat.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Edita la connexió", + "SECTION_HEADER_HISTORY" : "Historial d'ús", + "SECTION_HEADER_PARAMETERS" : "Paràmetres", + + "TABLE_HEADER_HISTORY_USERNAME" : "Nom d'usuari", + "TABLE_HEADER_HISTORY_START" : "L'hora d'inici", + "TABLE_HEADER_HISTORY_DURATION" : "Durada", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Servidor Remot", + + "TEXT_CONFIRM_DELETE" : "No es poden restaurar les connexions un cop s'hagin suprimit. Esteu segur que voleu suprimir aquesta connexió?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Suprimeix el grup de connexió", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Ubicació:", + "FIELD_HEADER_NAME" : "Nom:", + "FIELD_HEADER_TYPE" : "Tipus:", + + "NAME_TYPE_BALANCING" : "Balanceig", + "NAME_TYPE_ORGANIZATIONAL" : "Organitzatiu", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Edita el grup de connexió", + + "TEXT_CONFIRM_DELETE" : "No es poden restaurar els grups de connexió un cop suprimits. Esteu segur que voleu suprimir aquest grup de connexió?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar el perfil compartit", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Nom:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Connexió primària:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Edita el perfil de compartir", + "SECTION_HEADER_PARAMETERS" : "Paràmetres", + + "TEXT_CONFIRM_DELETE" : "Els perfils per compartir no es poden restaurar un cop s'hagin suprimit. Esteu segur que voleu suprimir aquest perfil compartit?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar l'usuari", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrar sistema:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Canvieu la contrasenya pròpia:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Crea usuaris nous:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Creeu grups d'usuaris nous:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Crear noves connexions:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Crear grups de connexió nous:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Crea nous perfils per compartir:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Nom d'usuari:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Actualment, aquest usuari no pertany a cap grup. Amplieu aquesta secció per afegir grups.", + + "INFO_READ_ONLY" : "Ho sentim, però aquest compte d'usuari no es pot modificar.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "No hi ha grups disponibles.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Totes les connexions", + "SECTION_HEADER_CONNECTIONS" : "Connexions", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Connexions actuals", + "SECTION_HEADER_EDIT_USER" : "Edita l'usuari", + "SECTION_HEADER_PERMISSIONS" : "Permisos", + "SECTION_HEADER_USER_GROUPS" : "Grups", + + "TEXT_CONFIRM_DELETE" : "Els usuaris no es poden restaurar un cop se'ls ha suprimit. Esteu segur que voleu suprimir aquest usuari?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Suprimeix el grup", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Nom del grup:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Actualment aquest grup no pertany a cap grup. Amplieu aquesta secció per afegir grups.", + "HELP_NO_MEMBER_USER_GROUPS" : "Actualment aquest grup no conté cap grup. Amplieu aquesta secció per afegir grups.", + "HELP_NO_MEMBER_USERS" : "Actualment aquest grup no conté cap usuari. Amplieu aquesta secció per afegir-ne usuaris.", + + "INFO_READ_ONLY" : "Ho sentim, però no es pot editar aquest grup.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "No hi ha usuaris disponibles.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Edita el grup", + "SECTION_HEADER_MEMBER_USERS" : "Usuaris membres", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Grups membres", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Grups pare", + + "TEXT_CONFIRM_DELETE" : "No es poden restaurar els grups després que se'ls hagi suprimit. Esteu segur que voleu suprimir aquest grup?" + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "La tecla de retrocés envia:", + "FIELD_HEADER_CA_CERT" : "Certificat d'autoritat de certificació:", + "FIELD_HEADER_CLIENT_CERT" : "Certificat de client:", + "FIELD_HEADER_CLIENT_KEY" : "Clau del client:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de colors:", + "FIELD_HEADER_CONTAINER" : "Nom del contenidor:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crea automàticament la ruta de typescript:", + "FIELD_HEADER_FONT_NAME" : "Nom del tipus de lletra:", + "FIELD_HEADER_FONT_SIZE" : "Mida de la lletra:", + "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_IGNORE_CERT" : "Ignora el certificat del servidor:", + "FIELD_HEADER_NAMESPACE" : "Espai de noms:", + "FIELD_HEADER_POD" : "Nom del pod:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Només Lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", + "FIELD_HEADER_SCROLLBACK" : "Mida màxima de desplaçament:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta Typescript :", + "FIELD_HEADER_USE_SSL" : "Usa SSL/TLS", + + "FIELD_OPTION_BACKSPACE_8" : "Espai enrere (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Eliminar (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negre sobre blanc", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negre", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verd sobre negre", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sobre negre", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticació", + "SECTION_HEADER_BEHAVIOR" : "Comportament del terminal", + "SECTION_HEADER_CONTAINER" : "Contenidor", + "SECTION_HEADER_DISPLAY" : "Pantalla", + "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (registre de sessió de text)", + "SECTION_HEADER_NETWORK" : "Xarxa" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Nom del client:", + "FIELD_HEADER_COLOR_DEPTH" : "Profunditat del color:", + "FIELD_HEADER_CONSOLE" : "Administrador de la consola:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Suport de l'àudio a la consola:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Crea automàticament la unitat:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", + "FIELD_HEADER_DISABLE_AUDIO" : "Desactiva l'àudio:", + "FIELD_HEADER_DISABLE_AUTH" : "Desactiva l'autenticació:", + "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des de l'escriptori remot:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l’enganxament del client:", + "FIELD_HEADER_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", + "FIELD_HEADER_DOMAIN" : "Domini:", + "FIELD_HEADER_DPI" : "Resolució (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Nom de la unitat:", + "FIELD_HEADER_DRIVE_PATH" : "Ruta de la unitat:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Habilita l'entrada d'àudio (micròfon):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Habilita la composició d'escriptori (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Habilita la unitat:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Habilita el suavització de tipus de lletra (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Habilita l'arrossegament de la finestra completa:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Habilita animacions de menús:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Desactiva la memòria cau de mapa de bits:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Desactiva la memòria cau fora de pantalla:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Desactiva la memòria cau del glif:", + "FIELD_HEADER_ENABLE_PRINTING" : "Habilita la impressió:", + "FIELD_HEADER_ENABLE_SFTP" : "Activa SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Activa temes:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Habilita el fons de pantalla:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Domini:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_GATEWAY_PORT" : "Port:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Nom d'usuari:", + "FIELD_HEADER_HEIGHT" : "Alçada:", + "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_IGNORE_CERT" : "Ignora el certificat del servidor:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Programa inicial:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Informació del balanç de càrrega/cookie:", + "FIELD_HEADER_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRINTER_NAME" : "Nom de la impressora redirigit:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "BLOB de preconnexió BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "Identificador de font RDP: ", + "FIELD_HEADER_READ_ONLY" : "Només Lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravaciIELD_HEADER_DISABLE_COPYó:", + "FIELD_HEADER_RESIZE_METHOD" : "Mètode de redimensionament:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Paràmetres:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Directori de treball:", + "FIELD_HEADER_REMOTE_APP" : "Programa:", + "FIELD_HEADER_SECURITY" : "Mode de seguretat:", + "FIELD_HEADER_SERVER_LAYOUT" : "Disposició del teclat:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Directori de càrrega per defecte:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Clau d'amfitrió pública (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval de manteniment SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase d'accés:", + "FIELD_HEADER_SFTP_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clau privada:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directori arrel del navegador de fitxers:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", + "FIELD_HEADER_SFTP_USERNAME" : "Nom d'usuari:", + "FIELD_HEADER_STATIC_CHANNELS" : "Noms de canals estàtics:", + "FIELD_HEADER_TIMEZONE" : "Fus horari:", + "FIELD_HEADER_USERNAME" : "Nom d'usuari:", + "FIELD_HEADER_WIDTH" : "Amplada:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", + + + "FIELD_OPTION_COLOR_DEPTH_16" : "Color baix (16 bits)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Veritable color (24 bits)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Veritable color (32 bits)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 colors", + + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Actualizació de pantalla\" canal virtual (RDP 8.1+)", + + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Torna a connectar", + + "FIELD_OPTION_SECURITY_ANY" : "Qualsevol", + + "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", + "FIELD_OPTION_SECURITY_RDP" : "RDP encryption", + "FIELD_OPTION_SECURITY_TLS" : "TLS encryption", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Suís alemany (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Alemany (Qwertz)", + + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Anglès del Regne Unit (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Anglès dels Estats Units (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Espanyol (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latino Americano (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Suís francès (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francès (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italià (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonès (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polonès (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguès brasiler (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguès (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Suec (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danès (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Q-Turc (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticació", + "SECTION_HEADER_BASIC_PARAMETERS" : "Configuració bàsica", + "SECTION_HEADER_CLIPBOARD" : "Portapapers", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirecció del dispositiu", + "SECTION_HEADER_DISPLAY" : "Pantalla", + "SECTION_HEADER_GATEWAY" : "Passarel·la d'escriptori remota", + "SECTION_HEADER_LOAD_BALANCING" : "Equilibri de càrrega", + "SECTION_HEADER_NETWORK" : "Xarxa", + "SECTION_HEADER_PERFORMANCE" : "Rendiment", + "SECTION_HEADER_PRECONNECTION_PDU" : "Pre connexió PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", + "SECTION_HEADER_REMOTEAPP" : "RemoteApp", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "La tecla de retrocés envia:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de colors:", + "FIELD_HEADER_COMMAND" : "Executa l'ordre:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Creeu automàticament la ruta de mecanografia:", + "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des del terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l’enganxament del client:", + "FIELD_HEADER_FONT_NAME" : "Nom del tipus de lletra:", + "FIELD_HEADER_FONT_SIZE" : "Mida de la lletra:", + "FIELD_HEADER_ENABLE_SFTP" : "Activa SFTP:", + "FIELD_HEADER_HOST_KEY" : "Clau d'amfitrió pública (Base64):", + "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_LOCALE" : "Language/Locale ($LANG):", + "FIELD_HEADER_USERNAME" : "Nom d'usuari:", + "FIELD_HEADER_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_PASSPHRASE" : "Frase d'accés:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Clau privada:", + "FIELD_HEADER_SCROLLBACK" : "Mida màxima de desplaçament:", + "FIELD_HEADER_READ_ONLY" : "Només lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Interval de 'keepalive' del servidor:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directori arrel del navegador de fitxers:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", + "FIELD_HEADER_TERMINAL_TYPE" : "Tipus de terminal:", + "FIELD_HEADER_TIMEZONE" : "Zona horària ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta Typescript:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", + + + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negre sobre blanc", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negre", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verd sobre negre", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sobre negre", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticació", + "SECTION_HEADER_BEHAVIOR" : "Comportament del terminal", + "SECTION_HEADER_CLIPBOARD" : "Portapapers", + "SECTION_HEADER_DISPLAY" : "Pantalla", + "SECTION_HEADER_NETWORK" : "Xarxa", + "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", + "SECTION_HEADER_SESSION" : "Sessió / Entorn", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Gravació de sessió de text)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Backspace envia tecles:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de colors:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crea automàticament la ruta del typescript:", + "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des del terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l’enganxament del client:", + "FIELD_HEADER_FONT_NAME" : "Nom del tipus de lletra:", + "FIELD_HEADER_FONT_SIZE" : "Mida de la lletra:", + "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expressió regular de fallida d'inici de sessió:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expressió regular d'exit d'inici de sessió:", + "FIELD_HEADER_USERNAME" : "Nom d'usuari:", + "FIELD_HEADER_USERNAME_REGEX" : "Expressió regular del nom d'usuari:", + "FIELD_HEADER_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_PASSWORD_REGEX" : "Expressió regular de contrasenya:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Només lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", + "FIELD_HEADER_SCROLLBACK" : "Mida màxima de desplaçament:", + "FIELD_HEADER_TERMINAL_TYPE" : "Tipus de terminal:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom de Typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta de Typescript:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", + + + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negre sobre blanc", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negre", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verd sobre negre", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sobre negre", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticació", + "SECTION_HEADER_BEHAVIOR" : "Comportament del terminal", + "SECTION_HEADER_CLIPBOARD" : "Portapapers", + "SECTION_HEADER_DISPLAY" : "Pantalla", + "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Gravació de sessió de text)", + "SECTION_HEADER_NETWORK" : "Xarxa", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Nom del servidor d'àudio:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codificació:", + "FIELD_HEADER_COLOR_DEPTH" : "Profunditat del color:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crea automàticament la ruta de gravació:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DEST_HOST" : "Amfitrió de destinació:", + "FIELD_HEADER_DEST_PORT" : "Port de destinació:", + "FIELD_HEADER_DISABLE_COPY" : "Desactiva la còpia des de l'escriptori remot:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactiva l’enganxament del client:", + "FIELD_HEADER_ENABLE_AUDIO" : "Habilita l'àudio:", + "FIELD_HEADER_ENABLE_SFTP" : "Activa SFTP:", + "FIELD_HEADER_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_USERNAME" : "Nom d'usuari:", + "FIELD_HEADER_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Només lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclou el ratolí:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclou els gràfics/fluxos:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclou els esdeveniments de teclat:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de la gravació:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta de gravació:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Directori de càrrega per defecte:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactiva la baixada de fitxers:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Clau d'amfitrió pública (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nom de l'amfitrió:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval de keepalive SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase d'accés:", + "FIELD_HEADER_SFTP_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clau privada:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directori arrel del navegador de fitxers:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactiva la càrrega de fitxers:", + "FIELD_HEADER_SFTP_USERNAME" : "Nom d'usuari:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Canvia components vermells/blaus:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adreça de difusió del paquet WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adreça MAC de l'amfitrió remot:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquet WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'espera de l'arrencada d'amfitrió:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 colors", + "FIELD_OPTION_COLOR_DEPTH_16" : "Color baix (16 bits)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Veritable color (24 bits)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Veritable color (32 bits)", + + "FIELD_OPTION_CURSOR_LOCAL" : "Local", + "FIELD_OPTION_CURSOR_REMOTE" : "Remot", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Àudio", + "SECTION_HEADER_AUTHENTICATION" : "Autenticació", + "SECTION_HEADER_CLIPBOARD" : "Portapapers", + "SECTION_HEADER_DISPLAY" : "Pantalla", + "SECTION_HEADER_NETWORK" : "Xarxa", + "SECTION_HEADER_RECORDING" : "Gravació de la pantalla", + "SECTION_HEADER_REPEATER" : "Repetidor VNC", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Configuració" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Aquí es llisten els registres d'historial de connexions anteriors i es poden ordenar fent clic a les capçaleres de columna. Per cercar registres específics, introduïu una cadena de filtre i feu clic a \"Cerca\". Només s'enumeraran els registres que coincideixin amb la cadena de filtre proporcionada.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "No hi ha registres coincidents", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de la connexió", + "TABLE_HEADER_SESSION_DURATION" : "Durada", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Amfitrió remot", + "TABLE_HEADER_SESSION_STARTDATE" : "Hora d'inici", + "TABLE_HEADER_SESSION_USERNAME" : "Nom d'usuari", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Nova connexió", + "ACTION_NEW_CONNECTION_GROUP" : "Grup nou", + "ACTION_NEW_SHARING_PROFILE" : "Nou perfil per compartir", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Feu clic o toqueu una connexió següent per gestionar aquesta connexió. Segons el vostre nivell d'accés, es poden afegir i suprimir connexions i es poden canviar les seves propietats (protocol, nom d'amfitrió, port, etc.).", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Connexions" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Llenguatge de visualització:", + "FIELD_HEADER_PASSWORD" : "Contrasenya:", + "FIELD_HEADER_PASSWORD_OLD" : "Contrasenya actual:", + "FIELD_HEADER_PASSWORD_NEW" : "Nova contrasenya:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirmar nova contrasenya:", + "FIELD_HEADER_TIMEZONE" : "Fus horari:", + "FIELD_HEADER_USERNAME" : "Nom d'usuari:", + + "HELP_DEFAULT_INPUT_METHOD" : "El mètode d'introducció predeterminat determina com Guacamole rep els esdeveniments del teclat. Canviar aquesta configuració pot ser necessària quan s'utilitza un dispositiu mòbil o quan s'escriu a través d'un IME. Aquesta configuració es pot substituir de manera per connexió dins del menú Guacamole.", + "HELP_DEFAULT_MOUSE_MODE" : "El mode d'emulació predeterminat del ratolí determina com es comportarà el ratolí remot en les noves connexions pel que fa als tocs. Aquesta configuració es pot substituir de manera per connexió al menú Guacamole.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Les opcions que apareixen a continuació estan relacionades amb la configuració regional de l'usuari i tindran un impacte sobre la visualització de diverses parts de la interfície.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Si voleu canviar la vostra contrasenya, introduïu la vostra contrasenya actual i la contrasenya desitjada a continuació, i feu clic a \"Actualitzar la contrasenya\". El canvi entrarà en vigor immediatament.", + + "INFO_PASSWORD_CHANGED" : "S'ha canviat la contrasenya.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Mètode d'introducció per defecte", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Mode d'emulació del ratolí predeterminat", + "SECTION_HEADER_UPDATE_PASSWORD" : "Canvia la contrasenya" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Nou usuari", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Feu clic o toqueu un usuari per gestionar aquest usuari. En funció del vostre nivell d'accés, es poden afegir i eliminar els usuaris i es poden canviar les seves contrasenyes.", + + "SECTION_HEADER_USERS" : "Usuaris", + + "TABLE_HEADER_FULL_NAME" : "Nom complet", + "TABLE_HEADER_LAST_ACTIVE" : "Darrer actiu", + "TABLE_HEADER_ORGANIZATION" : "Organització", + "TABLE_HEADER_USERNAME" : "Nom d'usuari" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Grup nou", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Feu clic o toqueu un grup següent per gestionar aquest grup. En funció del vostre nivell d'accés, es poden afegir i suprimir grups i es poden canviar els usuaris i grups.", + + "SECTION_HEADER_USER_GROUPS" : "Grups", + + "TABLE_HEADER_USER_GROUP_NAME" : "Nom del grup" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Finalitzar Sessions", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Finalitzar Sessions", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Aquesta pàgina s'omple de connexions actualment actives. Les connexions enumerades i la possibilitat de destruir aquestes connexions depèn del nivell d'accés. Si voleu destruir una o més sessions, marqueu la casella que hi ha al costat de les sessions i feu clic a \"Destruir Sessions\". Destruir una sessió desconnectarà immediatament l'usuari de la connexió associada.", + + "INFO_NO_SESSIONS" : "No hi ha sessions actives", + + "SECTION_HEADER_SESSIONS" : "Sessions actives", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de la connexió", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Amfitrió remot", + "TABLE_HEADER_SESSION_STARTDATE" : "Actiu des de", + "TABLE_HEADER_SESSION_USERNAME" : "Nom d'usuari", + + "TEXT_CONFIRM_DELETE" : "Esteu segur que voleu matar totes les sessions seleccionades? Els usuaris que utilitzin aquestes sessions seran desconnectats immediatament." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Correu electrònic:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Nom complet:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organització:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Role:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/cs.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/cs.json new file mode 100644 index 0000000000..6e56426b8b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/cs.json @@ -0,0 +1,1138 @@ +{ + + "NAME" : "Čeština", + + "APP" : { + + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Zrušit", + "ACTION_CLEAR" : "Vyčistit", + "ACTION_CLONE" : "Klonovat", + "ACTION_CONTINUE" : "Pokračovat", + "ACTION_DELETE" : "Smazat", + "ACTION_DELETE_SESSIONS" : "Ukončit sezení", + "ACTION_DOWNLOAD" : "Stáhnout", + "ACTION_IMPORT" : "Importovat", + "ACTION_LOGIN" : "Přihlásit", + "ACTION_LOGIN_AGAIN" : "Znovu přihlásit", + "ACTION_LOGOUT" : "Odhlásit", + "ACTION_MANAGE_CONNECTIONS" : "Připojení", + "ACTION_MANAGE_PREFERENCES" : "Vlastnosti", + "ACTION_MANAGE_SETTINGS" : "Nastavení", + "ACTION_MANAGE_SESSIONS" : "Aktivní sezení", + "ACTION_MANAGE_USERS" : "Uživatelé", + "ACTION_MANAGE_USER_GROUPS" : "Skupiny", + "ACTION_NAVIGATE_BACK" : "Zpět", + "ACTION_NAVIGATE_HOME" : "Domů", + "ACTION_PAUSE" : "Pozastavit", + "ACTION_PLAY" : "Přehrát", + "ACTION_SAVE" : "Uložit", + "ACTION_SEARCH" : "Hledat", + "ACTION_SHARE" : "Sdílet", + "ACTION_UPDATE_PASSWORD" : "Změnit heslo", + "ACTION_VIEW_HISTORY" : "Historie", + "ACTION_VIEW_RECORDING" : "Zobrazit", + + "DIALOG_HEADER_ERROR" : "Chyba", + + "ERROR_PAGE_UNAVAILABLE" : "Došlo k chybě a tuto akci nelze dokončit. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", + "ERROR_PASSWORD_BLANK" : "Heslo nesmí být prázdné.", + "ERROR_PASSWORD_MISMATCH" : "Hesla nesouhlasí.", + "ERROR_SINGLE_FILE_ONLY" : "Nahrajte prosím vždy pouze jeden soubor", + + "FIELD_HEADER_PASSWORD" : "Heslo:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Heslo znovu:", + + "FIELD_PLACEHOLDER_FILTER" : "Filtr", + + "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "V současné době používá {USERS} {USERS, plural, one{uživatel} other{uživatelů}}.", + "INFO_LOGGED_OUT" : "Byli jste odhlášeni.", + + "TEXT_ANONYMOUS_USER" : "Anonymní uživatel", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{sekundu} other{sekund}}} minute{{VALUE, plural, one{minutu} other{minut}}} hour{{VALUE, plural, one{hodinu} other{hodin}}} day{{VALUE, plural, one{den} other{dnů}}} other{}}", + "TEXT_UNTRANSLATED" : "{MESSAGE}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR_CLIENT_MESSAGES" : "Vyčistit", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Vyčistit", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_DISCONNECT" : "Odpojit", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Znovu připojit", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Nahrát soubory", + + "DIALOG_HEADER_CONNECTING" : "Připojování", + "DIALOG_HEADER_CONNECTION_ERROR" : "Chyba připojení", + "DIALOG_HEADER_DISCONNECTED" : "Odpojeno", + + "ERROR_CLIENT_201" : "Synchronizační server je zaneprázdněn, zkuste to prosím znovu později.", + "ERROR_CLIENT_202" : "Guacamole server zavřel spojení protože vzdálený počítač příliš dlouho neodpovídal. Zkuste to prosím později, nebo kontaktujte správce.", + "ERROR_CLIENT_203" : "Chyba vzdáleného serveru, spojení bylo uzavřeno. Zkuste to prosím později, nebo kontaktujte správce.", + "ERROR_CLIENT_207" : "Server vzdálené plochy je aktuálně nedostupný. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", + "ERROR_CLIENT_208" : "Server vzdálené plochy není aktuálně k dispozici. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", + "ERROR_CLIENT_209" : "Server vzdálené plochy ukončil připojení, protože je v konfliktu s jiným připojením. Prosím zkuste to znovu později.", + "ERROR_CLIENT_20A" : "Server vzdálené plochy ukončil připojení, protože se zdálo být neaktivní. Pokud je to nežádoucí nebo neočekávané, informujte prosím správce systému nebo zkontrolujte nastavení systému.", + "ERROR_CLIENT_20B" : "Server vzdálené plochy násilně uzavřel připojení. Pokud je to nežádoucí nebo neočekávané, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", + "ERROR_CLIENT_301" : "Přihlášení selhalo. Připojte se a zkuste to znovu.", + "ERROR_CLIENT_303" : "Server vzdálené plochy odepřel přístup k tomuto připojení. Pokud potřebujete přístup, požádejte správce systému, aby vám umožnil přístup, nebo zkontrolujte nastavení systému.", + "ERROR_CLIENT_308" : "Server Guacamole ukončil spojení, protože z vašeho prohlížeče nebyla dostatečně dlouhá odezva, aby se zdálo, že je stále připojen. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál, nebo jednoduše velmi pomalá síťová rychlost. Zkontrolujte síť a zkuste to znovu.", + "ERROR_CLIENT_31D" : "Server Guacamole odepřel přístup k tomuto připojení, protože jste vyčerpali limit pro vícenásobné připojení tímto uživatelem. Zavřete jedno nebo více připojení a zkuste to znovu.", + "ERROR_CLIENT_DEFAULT" : "V rámci serveru Guacamole došlo k interní chybě a připojení bylo ukončeno. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", + + "ERROR_TUNNEL_201" : "Server Guacamole odmítl tento pokus o připojení, protože existuje příliš mnoho aktivních připojení. Počkejte prosím několik minut a zkuste to znovu.", + "ERROR_TUNNEL_202" : "Připojení bylo uzavřeno, protože serveru trvalo příliš dlouho, než odpověděl. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál nebo pomalé připojení k síti. Zkontrolujte síťové připojení a zkuste to znovu nebo se obraťte na správce systému.", + "ERROR_TUNNEL_203" : "Server zjistil chybu a připojení ukončil. Zkuste to prosím znovu nebo se obraťte na správce systému.", + "ERROR_TUNNEL_204" : "Požadované připojení neexistuje. Zkontrolujte název připojení a zkuste to znovu.", + "ERROR_TUNNEL_205" : "Toto připojení je právě používáno a vícenásobný přístup k tomuto připojení není povolen. Prosím zkuste to znovu později.", + "ERROR_TUNNEL_207" : "Server Guacamole není v současné době dostupný. Zkontrolujte síť a zkuste to znovu", + "ERROR_TUNNEL_208" : "Server Guacamole nepřijímá připojení. Zkontrolujte síť a zkuste to znovu.", + "ERROR_TUNNEL_301" : "Nemáte oprávnění k přístupu k tomuto připojení, protože nejste přihlášeni. Přihlaste se a zkuste to znovu.", + "ERROR_TUNNEL_303" : "Nemáte oprávnění k přístupu k tomuto připojení. Pokud potřebujete přístup, požádejte správce systému, aby vás přidal do seznamu povolených uživatelů nebo zkontrolujte nastavení systému.", + "ERROR_TUNNEL_308" : "Server Guacamole ukončil spojení, protože z vašeho prohlížeče nebyla dostatečně dlouhá odezva, aby se zdálo, že je stále připojen. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál, nebo jednoduše velmi pomalá síťová rychlost. Zkontrolujte síť a zkuste to znovu.", + "ERROR_TUNNEL_31D" : "Server Guacamole odepřel přístup k tomuto připojení, protože jste vyčerpali limit pro vícenásobné připojení tímto uživatelem. Zavřete jedno nebo více připojení a zkuste to znovu.", + "ERROR_TUNNEL_DEFAULT" : "V rámci serveru Guacamole došlo k interní chybě a připojení bylo ukončeno. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", + + "ERROR_UPLOAD_100" : "Přenos souborů není podporován nebo není povolen. Obraťte se na správce systému nebo zkontrolujte systémové protokoly.", + "ERROR_UPLOAD_201" : "V současné době se přenáší příliš mnoho souborů. Počkejte prosím na dokončení probíhajících přenosů a akci opakujte.", + "ERROR_UPLOAD_202" : "Soubor nelze přenést, protože serveru vzdálené plochy trvá příliš dlouho, než odpoví. Zkuste to prosím znovu nebo se obraťte na správce systému.", + "ERROR_UPLOAD_203" : "Server vzdálené plochy zaznamenal chybu během přenosu. Zkuste to prosím znovu nebo se obraťte na správce systému.", + "ERROR_UPLOAD_204" : "Cíl pro přenos souborů neexistuje. Zkontrolujte, zda cíl existuje a zkuste to znovu.", + "ERROR_UPLOAD_205" : "Cíl přenosu souborů je aktuálně uzamčen. Počkejte prosím na dokončení probíhajících úkolů a zkuste to znovu.", + "ERROR_UPLOAD_301" : "Nemáte oprávnění nahrát tento soubor, protože nejste přihlášeni. Přihlaste se a zkuste to znovu.", + "ERROR_UPLOAD_303" : "Nemáte oprávnění k nahrání tohoto souboru. Pokud potřebujete přístup, zkontrolujte nastavení systému nebo se obraťte na správce systému.", + "ERROR_UPLOAD_308" : "Přenos souboru se zastavil. To je obvykle způsobeno problémy se sítí, jako je například nekvalitní bezdrátový signál, nebo jednoduše velmi pomalé připojení k síťi. Zkontrolujte síť a zkuste to znovu.", + "ERROR_UPLOAD_31D" : "V současné době se přenáší příliš mnoho souborů. Počkejte prosím na dokončení probíhajících přenosů a akci opakujte.", + "ERROR_UPLOAD_DEFAULT" : "V rámci serveru Guacamole došlo k interní chybě a připojení bylo ukončeno. Pokud problém přetrvává, informujte prosím správce systému nebo zkontrolujte systémové protokoly.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Zde se zobrazí text zkopírovaný / oříznutý v Guacamole. Změny níže uvedeného textu ovlivní vzdálenou schránku.", + "HELP_INPUT_METHOD_NONE" : "Není použita žádná metoda vstupu. Vstup z klávesnice je přijímán z připojené fyzické klávesnice.", + "HELP_INPUT_METHOD_OSK" : "Zobrazte a přijměte vstup z vestavěné klávesnice Guacamole na obrazovce. Klávesnice na obrazovce umožňuje zadávat kombinace kláves, které jinak mohou být nemožné (například Ctrl-Alt-Del).", + "HELP_INPUT_METHOD_TEXT" : "Povolit psaní textu a emulovat události klávesnice na základě zadaného textu. To je nezbytné pro zařízení, jako jsou mobilní telefony, které nemají fyzickou klávesnici.", + "HELP_MOUSE_MODE" : "Určuje, jak se bude vzdálená myš chovat s ohledem na dotyky.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Tap to click. Kliknutí nastane v místě dotyku.", + "HELP_MOUSE_MODE_RELATIVE" : "Přetažením myši posuňte ukazatel myši a klepněte na tlačítko. Kliknutí nastane v místě ukazatele.", + "HELP_SHARE_LINK" : "Aktuální připojení je sdíleno a může k němu přistupovat kdokoli s následujícím {LINKS, plural, one{odkazem} other{odkazy}}:", + + "INFO_ANONYMOUS_USER_COUNT" : "Anonymní{COUNT, plural, one{} other{ (#)}}", + "INFO_CONNECTION_SHARED" : "Toto připojení je nyní sdíleno.", + "INFO_NO_FILE_TRANSFERS" : "Žádné přenosy souborů.", + "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", + + "NAME_INPUT_METHOD_NONE" : "Žádné", + "NAME_INPUT_METHOD_OSK" : "Klávesnice na obrazovce", + "NAME_INPUT_METHOD_TEXT" : "Textový vstup", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Dotyková obrazovka", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIENT_MESSAGES" : "Zprávy", + "SECTION_HEADER_CLIPBOARD" : "Schránka", + "SECTION_HEADER_DEVICES" : "Zařízení", + "SECTION_HEADER_DISPLAY" : "Zobrazení", + "SECTION_HEADER_FILE_TRANSFERS" : "Přenos souborů", + "SECTION_HEADER_INPUT_METHOD" : "Metoda vstupu", + + "SECTION_HEADER_MOUSE_MODE" : "Mód emulace myši", + + "TEXT_ANONYMOUS_USER_JOINED" : "K připojení se připojil anonymní uživatel.", + "TEXT_ANONYMOUS_USER_LEFT" : "Anonymní uživatel opustil připojení.", + "TEXT_ZOOM_AUTO_FIT" : "Automaticky přizpůsobit prohlížeč oknu", + "TEXT_CLIENT_STATUS_IDLE" : "Nečinný", + "TEXT_CLIENT_STATUS_CONNECTING" : "Připojuji ke Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Byl jste odpojen.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "Síťové spojení ke Guacamole serveru se zdá nestabilní.", + "TEXT_CLIENT_STATUS_WAITING" : "Připojen ke Guacamole. Čekání na odpověď...", + "TEXT_USER_JOINED" : "{USERNAME} se připojil ke spojení.", + "TEXT_USER_LEFT" : "{USERNAME} opustil spojení.", + "TEXT_RECONNECT_COUNTDOWN" : "Znovu připojuji {REMAINING} {REMAINING, plural, one{sekundu} other{sekund}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + "TEXT_CLIPBOARD_AWAITING_FOCUS" : "Kliknutím zobrazíte obsah schránky...", + + "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Skrýt", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Zobrazit", + + "FIELD_HEADER_BACKGROUND" : "Pozadí", + "FIELD_HEADER_FOREGROUND" : "Popředí", + + "FIELD_OPTION_CUSTOM" : "Vlastní...", + + "SECTION_HEADER_DETAILS" : "Detaily:" + + }, + + "IMPORT": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_BROWSE" : "Vyhledejte soubor", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", + "ACTION_VIEW_FORMAT_HELP" : "Zobrazit tipy formátů", + "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", + "ACTION_IMPORT_CONNECTIONS" : "Importovat připojení", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + "DIALOG_HEADER_SUCCESS" : "Úspěch", + + "ERROR_AMBIGUOUS_CSV_HEADER" : "Nejednoznačné záhlaví CSV \"{HEADER}\", může být buď atribut nebo parametr připojení", + "ERROR_AMBIGUOUS_PARENT_GROUP" : "Skupina a parentIdentifier nesmí být zadány současně", + "ERROR_ARRAY_REQUIRED" : "Zadaný soubor musí obsahovat seznam připojení", + "ERROR_DETECTED_INVALID_TYPE" : "Nepodporovaný typ souboru. Ujistěte se, že je soubor platný CSV, JSON nebo YAML.", + "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "Duplicitní připojení \"{NAME}\" v \"{PATH}\" v souboru importu", + "ERROR_DUPLICATE_CSV_HEADER" : "Duplicitní záhlaví CSV: {HEADER}", + "ERROR_EMPTY_FILE" : "Zadaný soubor je prázdný", + "ERROR_INVALID_CSV_HEADER" : "Neplatné záhlaví CSV \"{HEADER}\" není atribut ani parametr", + "ERROR_INVALID_MIME_TYPE" : "Nepodporovaný typ souboru: \"{TYPE}\"", + "ERROR_INVALID_GROUP" : "Nebyla nalezena žádná skupina odpovídající \"{GROUP}\"", + "ERROR_INVALID_GROUP_IDENTIFIER" : "Nebyla nalezena žádná skupina připojení s identifikátorem \"{IDENTIFIER}\"", + "ERROR_INVALID_GROUP_TYPE" : "Neplatná skupina – musí být zadán řetězec.", + "ERROR_INVALID_PROTOCOL" : "Neplatný protokol \"{PROTOCOL}\"", + "ERROR_INVALID_USER_GROUPS_TYPE" : "Neplatné skupiny uživatelů – musí se jednat o pole identifikátorů skupiny uživatelů.", + "ERROR_INVALID_USERS_TYPE" : "Neplatní uživatelé – musí se jednat o pole identifikátorů uživatelů.", + "ERROR_NO_FILE_SUPPLIED" : "Vyberte soubor k importu", + "ERROR_PARSE_FAILURE_CSV" : "Ujistěte se, že je váš soubor platný CSV. Analýza se nezdařila s chybou \"{ERROR}\". ", + "ERROR_PARSE_FAILURE_JSON" : "Ujistěte se, že váš soubor je platný JSON. Analýza se nezdařila s chybou \"{ERROR}\". ", + "ERROR_PARSE_FAILURE_YAML" : "Ujistěte se, že váš soubor je platný YAML. Analýza se nezdařila s chybou \"{ERROR}\". ", + "ERROR_REJECT_UPDATE_CONNECTION" : "Připojení \"{NAME}\" již existuje v \"{PATH}\"", + "ERROR_REQUIRED_NAME_CONNECTION" : "Název připojení je povinný parametr", + "ERROR_REQUIRED_PROTOCOL_CONNECTION" : "Protokol připojení je povinný parametr", + "ERROR_REQUIRED_NAME_FILE" : "V zadaném souboru nebyl nalezen žádný název připojení", + "ERROR_REQUIRED_PROTOCOL_FILE" : "V zadaném souboru nebyl nalezen žádný protokol připojení", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "Nahradit/aktualizovat stávající připojení", + "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "Obnovit oprávnění", + + "HELP_CSV_DESCRIPTION" : "Soubor CSV pro import připojení má jeden záznam připojení na řádek. Každý sloupec bude specifikovat pole připojení. Minimálně musí být specifikován název připojení a protokol.", + "HELP_CSV_EXAMPLE" : "name,protocol,username,password,hostname,group,users,groups,guacd-encryption (attribute)\nprip1,vnc,alice,heslo1,prip1.web.com,ROOT,guac uživatel 1;guac uživatel 2,Uživatelé Připojení 1,none\nprip2,rdp,bob,heslo2,prip2.web.com,ROOT/Nadřazená skupina,guac uživatel 1,,ssl\nprip3,ssh,karolina,heslo3,prip3.web.com,ROOT/Nadřazená skupina/Podřízená skupina,guac uživatel 2;guac uživatel 3,,\nprip4,kubernetes,,,,,,,", + "HELP_CSV_MORE_DETAILS" : "V záhlaví CSV každého řádku je uvedeno pole připojení. ID skupiny připojení, do které má být připojení importováno, lze přímo zadat pomocí parametru \"parentIdentifier\" nebo lze cestu k nadřazené skupině zadat pomocí parametru \"group\", jak je uvedeno níže. Ve většině případů by mezi poli neměl být žádný konflikt, ale v případě potřeby lze pro jednoznačnost přidat příponu \" (attribute)\" nebo \" (parameter)\". Seznamy identifikátorů uživatelů nebo skupin uživatelů musí být odděleny středníkem.¹", + "HELP_FILE_TYPE_DESCRIPTION" : "Pro import připojení jsou podporovány tři typy souborů: CSV, JSON a YAML. Pro každý typ souboru mohou být zadána stejná data. Musí obsahovat název připojení a protokol. Volitelně lze také zadat umístění skupiny připojení, seznam uživatelů a/nebo skupiny uživatelů pro udělení přístupu, parametry připojení nebo protokoly připojení. Všichni uživatelé nebo skupiny uživatelů, kteří v aktuálním zdroji dat neexistují, budou automaticky vytvořeni. Upozorňujeme, že žádná existující oprávnění připojení nebudou odebrána pro aktualizovaná připojení, pokud není zaškrtnuto políčko \"Obnovit oprávnění\".", + "HELP_FILE_TYPE_HEADER" : "Typy souborů", + "HELP_JSON_DESCRIPTION" : "Soubor JSON pro import připojení je seznam objektů připojení. V každém objektu připojení musí být uvedeno minimálně jméno připojení a protokol.", + "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"prip1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"username\": \"alice\", \"password\": \"heslo1\", \"hostname\": \"prip1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac uživatel 1\", \"guac uživatel 2\" ],\n \"groups\": [ \"Uživatelé Připojení 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"prip2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"username\": \"bob\", \"password\": \"heslo2\", \"hostname\": \"prip2.web.com\" \\},\n \"group\": \"ROOT/Nadřazená skupina\",\n \"users\": [ \"guac uživatel 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"prip3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"username\": \"karolina\", \"password\": \"heslo3\", \"hostname\": \"prip3.web.com\" \\},\n \"group\": \"ROOT/Nadřazená skupina/Podřízená skupina\",\n \"users\": [ \"guac uživatel 2\", \"guac uživatel 3\" ]\n \\},\n \\{\n \"name\": \"prip4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", + "HELP_JSON_MORE_DETAILS" : "ID skupiny připojení, do které má být připojení importováno, lze přímo zadat pomocí pole \"parentIdentifier\" nebo lze cestu k nadřazené skupině zadat pomocí pole \"group\", jak je uvedeno níže. Pro každé připojení lze zadat pole identifikátorů uživatelů a skupin uživatelů, kterým chcete udělit přístup.", + "HELP_EXISTING_CONNECTION_MODE" : "Zcela nahradit/aktualizovat existující připojení, pokud jejich názvy a nadřazené skupiny připojení odpovídají hodnotám v poskytnutém souboru. Pokud není zaškrtnuto, pokus o import připojení se stejným názvem a nadřazenou skupinou připojení jako existující připojení bude považován za chybu.", + "HELP_EXISTING_PERMISSION_MODE" : "Úplně resetujte oprávnění udělená pro všechna připojení v poskytnutém souboru za oprávnění určená v tomto souboru. Pokud nejsou zadána žádná oprávnění, všechna příslušná oprávnění k připojení budou odvolána. Pokud není zaškrtnuto, stávající oprávnění zůstanou zachována a všechna oprávnění uvedená v souboru budou přidána.", + "HELP_SEMICOLON_FOOTNOTE" : "Pokud jsou přítomny středníky, mohou být escapovány zpětným lomítkem, např. \"první\\\\;poslední\"", + "HELP_UPLOAD_DROP_TITLE" : "Sem přetáhněte soubor", + "HELP_UPLOAD_FILE_TYPES" : "CSV, JSON, nebo YAML", + "HELP_YAML_DESCRIPTION" : "Soubor YAML pro import připojení je seznam objektů připojení se zcela stejnou strukturou jako formát JSON.", + "HELP_YAML_EXAMPLE" : "---\n - name: prip1\n protocol: vnc\n parameters:\n username: alice\n password: heslo1\n hostname: prip1.web.com\n group: ROOT\n users:\n - guac uživatel 1\n - guac uživatel 2\n groups:\n - Uživatelé Připojení 1\n attributes:\n guacd-encryption: none\n - name: prip2\n protocol: rdp\n parameters:\n username: bob\n password: heslo2\n hostname: prip2.web.com\n group: ROOT/Nadřazená skupina\n users:\n - guac uživatel 1\n attributes:\n guacd-encryption: none\n - name: prip3\n protocol: ssh\n parameters:\n username: karolina\n password: heslo3\n hostname: prip3.web.com\n group: ROOT/Nadřazená skupina/Podřízená skupina\n users:\n - guac uživatel 2\n - guac uživatel 3\n - name: prip4\n protocol: kubernetes", + + "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} {NUMBER, plural, one{připojení} other{připojení}} úspěšně importováno.", + + "SECTION_HEADER_CONNECTION_IMPORT" : "Import připojení", + "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "Formát souboru importu připojení", + "SECTION_HEADER_CSV" : "Formát CSV", + "SECTION_HEADER_JSON" : "Formát JSON", + "SECTION_HEADER_YAML" : "Formát YAML", + + "TABLE_HEADER_ERRORS" : "Chyby", + "TABLE_HEADER_GROUP" : "Skupina", + "TABLE_HEADER_NAME" : "Jméno", + "TABLE_HEADER_PROTOCOL" : "Protokol", + "TABLE_HEADER_ROW_NUMBER" : "Řádek #" + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Výchozí (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Klikněte pro zobrazní hesla", + "HELP_HIDE_PASSWORD" : "Klikněte pro skrytí hesla" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Žádná nedávná spojení.", + + "PASSWORD_CHANGED" : "Heslo bylo změněno.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Všechna spojení", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Nedávná spojení" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "Anonymní uživatel" + + }, + + "LOGIN" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Neplatné přihlašovací jméno", + + "FIELD_HEADER_USERNAME" : "Uživatelské jméno", + "FIELD_HEADER_PASSWORD" : "Heslo" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat spojení", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Oblast:", + "FIELD_HEADER_NAME" : "Jméno:", + "FIELD_HEADER_PROTOCOL" : "Protokol:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Nyní aktivní", + "INFO_CONNECTION_NOT_USED" : "Toto spojení ještě nebylo použito.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Upravit spojení", + "SECTION_HEADER_HISTORY" : "Historie využítí", + "SECTION_HEADER_PARAMETERS" : "Parametry", + + "TABLE_HEADER_HISTORY_USERNAME" : "Uživatelské jméno", + "TABLE_HEADER_HISTORY_START" : "Počáteční čas", + "TABLE_HEADER_HISTORY_DURATION" : "Doba", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Vzdálený host", + + "TEXT_CONFIRM_DELETE" : "Spojení nemůže být obnoveno poté, co je smazáno. Opravdu chcete smazat toto spojení?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat skupinu spojení", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Lokace:", + "FIELD_HEADER_NAME" : "Jméno:", + "FIELD_HEADER_TYPE" : "Typ:", + + "NAME_TYPE_BALANCING" : "Vyvažování", + "NAME_TYPE_ORGANIZATIONAL" : "Organizační", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Upravit skupinu spojení", + + "TEXT_CONFIRM_DELETE" : "Skupiny spojení nelze obnovit po jejich odstranění. Opravdu chcete odstranit tuto skupinu připojení?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Odstranit profil sdílení", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Jméno:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Primární spojení:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Upravit sdílený profil", + "SECTION_HEADER_PARAMETERS" : "Parametry", + + "TEXT_CONFIRM_DELETE" : "Po smazání nelze obnovit profily sdílení. Opravdu chcete smazat tento profil sdílení?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat uživatele", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Spravovat systém:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Změnit vlastní heslo:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Vytvořit nové uživatele:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Vytvořit novou uživatelskou skupinu:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Vytvořit nové spojení:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Vytvořit nové skupiny připojení:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Vytvořit nový sdílený profil:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Tento uživatel momentálně nepatří do žádné skupiny. Rozbalte tuto sekci, abyste mohli přidát skupiny.", + + "INFO_READ_ONLY" : "Omlouváme se, ale tento uživatelský účet nelze upravovat.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "Nejsou k dispozici žádné skupiny.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Všechna připojení", + "SECTION_HEADER_CONNECTIONS" : "Připojení", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Aktuální připojení", + "SECTION_HEADER_EDIT_USER" : "Upravit uživatele", + "SECTION_HEADER_PERMISSIONS" : "Oprávnění", + "SECTION_HEADER_USER_GROUPS" : "Skupiny", + + "TEXT_CONFIRM_DELETE" : "Po odstranění nelze uživatele obnovit. Opravdu chcete tohoto uživatele smazat?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Smazat skupinu", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Jméno skupiny:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Tato skupina momentálně nepatří do žádné skupiny. Rozbalením této sekce ji přidáte do skupiny.", + "HELP_NO_MEMBER_USER_GROUPS" : "Tato skupina v současné době neobsahuje žádné skupiny. Rozbalením této sekce ji přidáte do skupiny.", + "HELP_NO_MEMBER_USERS" : "Tato skupina v současné době neobsahuje žádné uživatele. Rozbalením této sekce přidáte uživatele.", + + "INFO_READ_ONLY" : "Je nám líto, ale tuto skupinu nelze upravovat.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "Žádní uživatelé nejsou k dispozici.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Upravit skupinu", + "SECTION_HEADER_MEMBER_USERS" : "Členský uživatel", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Členské skupiny", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Rodičovské skupiny", + + "TEXT_CONFIRM_DELETE" : "Skupiny nelze po jejich odstranění obnovit. Chcete opravdu smazat tuto skupinu?" + + }, + + "PLAYER" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", + "ACTION_PLAY" : "@:APP.ACTION_PLAY", + + "INFO_LOADING_RECORDING" : "Vaše nahrávka se nyní načítá. Čekejte prosím...", + "INFO_SEEK_IN_PROGRESS" : "Hledání požadované pozice. Čekejte prosím..." + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Klávesa Zpět odešle:", + "FIELD_HEADER_CA_CERT" : "Certifikát certifikační autority:", + "FIELD_HEADER_CLIENT_CERT" : "Klientský certifikát:", + "FIELD_HEADER_CLIENT_KEY" : "Klientský klíč:", + "FIELD_HEADER_COLOR_SCHEME" : "Barevné schéma:", + "FIELD_HEADER_CONTAINER" : "Jméno kontejneru:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu k záznamu:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automaticky vytvořit cestu ke strojopisu:", + "FIELD_HEADER_EXEC_COMMAND" : "Příkaz (exec):", + "FIELD_HEADER_FONT_NAME" : "Jméno fontu:", + "FIELD_HEADER_FONT_SIZE" : "Velikost fontu:", + "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorovat serverový certifikát:", + "FIELD_HEADER_NAMESPACE" : "Obor názvů:", + "FIELD_HEADER_POD" : "Jméno podu:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vyloučit myš:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vyloučit grafiku/streamování:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout události kláves:", + "FIELD_HEADER_RECORDING_NAME" : "Jméno záznamu:", + "FIELD_HEADER_RECORDING_PATH" : "Cesta k záznamu:", + "FIELD_HEADER_SCROLLBACK" : "Maximální délka historie:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Jméno strojopisu:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Cesta ke strojopisu:", + "FIELD_HEADER_USE_SSL" : "Použít SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Zpět (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Smazat (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Černá na bílé", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Šedá na černé", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zelená na černé", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Bílá na černé", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Ověřování", + "SECTION_HEADER_BEHAVIOR" : "Chování terminálu", + "SECTION_HEADER_CONTAINER" : "Kontejner", + "SECTION_HEADER_DISPLAY" : "Zobrazení", + "SECTION_HEADER_RECORDING" : "Záznam obrazovky", + "SECTION_HEADER_TYPESCRIPT" : "Strojopis (textový záznam sezení)", + "SECTION_HEADER_NETWORK" : "Síť" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Jméno klienta:", + "FIELD_HEADER_COLOR_DEPTH" : "Barevná hloubka:", + "FIELD_HEADER_CONSOLE" : "Konzola pro správu:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Podpora zvuku v konzole:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automaticky vytvořit disk:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu k záznamu:", + "FIELD_HEADER_DISABLE_AUDIO" : "Zakázat zvuk:", + "FIELD_HEADER_DISABLE_AUTH" : "Zakázat ověřování:", + "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování ze vzdálené plochy:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", + "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", + "FIELD_HEADER_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", + "FIELD_HEADER_DOMAIN" : "Doména:", + "FIELD_HEADER_DPI" : "Rozlišení (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Název jednotky:", + "FIELD_HEADER_DRIVE_PATH" : "Cesta na disku:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Povolit zvukový vstup (mikrofon):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Povolit kompozici pracovní plochy (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Povolit jednotku:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Povolit vyhlazení písma (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Povolit přetažení celého okna:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Povolit animace nabídky:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Zakázat ukládání do mezipaměti bitmap:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Zakázat ukládání do mezipaměti mimo obrazovku:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Zakázat ukládání do mezipaměti glyfů:", + "FIELD_HEADER_DISABLE_GFX" : "Zakázat rozšíření Graphics Pipeline:", + "FIELD_HEADER_ENABLE_PRINTING" : "Povolit tisk:", + "FIELD_HEADER_ENABLE_SFTP" : "Povolit SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Povolit motivy:", + "FIELD_HEADER_ENABLE_TOUCH" : "Povolit vícedotykové ovládání:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Povolit tapetu:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Vynutit bezeztrátovou kompresi:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Doména:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Heslo:", + "FIELD_HEADER_GATEWAY_PORT" : "Port:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Uživatelské jméno:", + "FIELD_HEADER_HEIGHT" : "Výška:", + "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorovat serverový certifikát:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Úvodní program:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Vyvážení zátěže info/cookie:", + "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Konce řádků:", + "FIELD_HEADER_PASSWORD" : "Heslo:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRINTER_NAME" : "Název přesměrované tiskárny:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "Zdrojové ID RDP:", + "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vyloučit myš:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vyloučit grafiku/strímování:", + "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Vyloučit dotykové události:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout klíčové události:", + "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", + "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", + "FIELD_HEADER_RESIZE_METHOD" : "Metoda změny velikosti:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parametry:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Pracovní adresář:", + "FIELD_HEADER_REMOTE_APP" : "Program:", + "FIELD_HEADER_SECURITY" : "Bezpečnostní mód:", + "FIELD_HEADER_SERVER_LAYOUT" : "Rozložení klávesnice:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Výchozí složka pro uložení záznamu:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Veřejný klíč hosta (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval udržování SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Přístupová fráze:", + "FIELD_HEADER_SFTP_PASSWORD" : "Heslo:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privátní klíč:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Souborový prohlížeč kořenové složky:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", + "FIELD_HEADER_SFTP_USERNAME" : "Uživatelské jméno:", + "FIELD_HEADER_STATIC_CHANNELS" : "Názvy statických kanálů:", + "FIELD_HEADER_TIMEZONE" : "Časová zóna:", + "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", + "FIELD_HEADER_WIDTH" : "Šířka:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL: ", + "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", + + "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Zachovat tak, jak je", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Nízké barvy (16-bitů)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Opravdové barvy (24-bitů)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Opravdové barvy (32-bitů)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 barev", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Aktualizace zobrazení\" virtuální kanál (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Znovu připojit", + + "FIELD_OPTION_SECURITY_ANY" : "Jakýkoliv", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Ověřování na úrovni sítě)", + "FIELD_OPTION_SECURITY_RDP" : "Šifrování RDP", + "FIELD_OPTION_SECURITY_TLS" : "Šifrování TLS", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Švícarská Němčina (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Němčina (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK Angličtina (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US Angličtina (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Španělština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Standardní Angličtina (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgická Francouzština (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Kanadská francouzština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Švícarská Francouzština (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francouzština (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Maďarština (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugalská Brazilština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugalština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Rumunština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Švédština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Dánština (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turečtina (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Ověřování", + "SECTION_HEADER_BASIC_PARAMETERS" : "Základní nastavení", + "SECTION_HEADER_CLIPBOARD" : "Schránka", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Přesměrování zařízení", + "SECTION_HEADER_DISPLAY" : "Zobrazení", + "SECTION_HEADER_GATEWAY" : "Brána vzdálené plochy", + "SECTION_HEADER_LOAD_BALANCING" : "Rozložení zátěže", + "SECTION_HEADER_NETWORK" : "Síť", + "SECTION_HEADER_PERFORMANCE" : "Výkon", + "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Záznam obrazovky", + "SECTION_HEADER_REMOTEAPP" : "RemoteApp", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Klávesa Zpět odešle:", + "FIELD_HEADER_COLOR_SCHEME" : "Barva:", + "FIELD_HEADER_COMMAND" : "Provést příkaz:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu pro uložení záznamu:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automaticky vytvořit cestu ke strojopisu:", + "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování ze vzdáleného terminálu:", + "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", + "FIELD_HEADER_FONT_NAME" : "Typ fontu:", + "FIELD_HEADER_FONT_SIZE" : "Velikost písma:", + "FIELD_HEADER_ENABLE_SFTP" : "Povolit SFTP:", + "FIELD_HEADER_HOST_KEY" : "Veřejný klíč hosta (Base64):", + "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_LOCALE" : "Jazyk/Lokalizace ($LANG):", + "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", + "FIELD_HEADER_PASSWORD" : "Heslo:", + "FIELD_HEADER_PASSPHRASE" : "Přístupová fráze:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Privátní klíč:", + "FIELD_HEADER_SCROLLBACK" : "Maximální délka historie:", + "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vynechat myš:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vynechat grafiku/streamování:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout události kláves:", + "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", + "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Serverový keepalive interval:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Souborový prohlížeč kořenové složky:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", + "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminálu:", + "FIELD_HEADER_TIMEZONE" : "Časová zóna ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Jméno strojopisu:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Cesta ke strojopisu:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Zpět (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Smazat (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Černá na bílé", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Šedá na černé", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zelená na černé", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Bílá na černé", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Ověřování", + "SECTION_HEADER_BEHAVIOR" : "Chování terminálu", + "SECTION_HEADER_CLIPBOARD" : "Schránka", + "SECTION_HEADER_DISPLAY" : "Zobrazení", + "SECTION_HEADER_NETWORK" : "Síť", + "SECTION_HEADER_RECORDING" : "Záznam obrazovky", + "SECTION_HEADER_SESSION" : "Sezení / prostředí", + "SECTION_HEADER_TYPESCRIPT" : "Strojopis (textový záznam sezení)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Klávesa Zpět odešle:", + "FIELD_HEADER_COLOR_SCHEME" : "Barevné schéma:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu pro uložení záznamu:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automaticky vytvořit cestu ke strojopisu:", + "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování z terminálu:", + "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", + "FIELD_HEADER_FONT_NAME" : "Jméno fontu:", + "FIELD_HEADER_FONT_SIZE" : "Velikost fontu:", + "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Přihlášení se nezdařilo regulární výraz:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Přihlášení bylo úspěšné regulární výraz:", + "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", + "FIELD_HEADER_USERNAME_REGEX" : "Uživatelské jméno regulární výraz:", + "FIELD_HEADER_PASSWORD" : "Heslo:", + "FIELD_HEADER_PASSWORD_REGEX" : "Heslo regulární výraz:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Pouze ke čtení:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vyloučit myš:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vyloučit grafiku/streamování:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout klíčové události:", + "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", + "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", + "FIELD_HEADER_SCROLLBACK" : "Maximální délka historie:", + "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminálu:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Jméno strojopisu:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Cesta ke strojopisu:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Zpět (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Smazat (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Černá na bílé", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Šedá na černé", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zelená na černé", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Bílá na černé", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Ověřování", + "SECTION_HEADER_BEHAVIOR" : "Chování terminálu", + "SECTION_HEADER_CLIPBOARD" : "Schránka", + "SECTION_HEADER_DISPLAY" : "Zobrazení", + "SECTION_HEADER_RECORDING" : "Záznam obrazovky", + "SECTION_HEADER_TYPESCRIPT" : "Strojopis (textový záznam sezení)", + "SECTION_HEADER_NETWORK" : "Síť", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Název zvukového serveru:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Kódovávání:", + "FIELD_HEADER_COLOR_DEPTH" : "Hloubka barev:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automaticky vytvořit cestu pro uložení záznamu:", + "FIELD_HEADER_CURSOR" : "Kurzor:", + "FIELD_HEADER_DEST_HOST" : "Cílový host:", + "FIELD_HEADER_DEST_PORT" : "Vzdálený port:", + "FIELD_HEADER_DISABLE_COPY" : "Zakázat kopírování ze vzdálené plochy:", + "FIELD_HEADER_DISABLE_PASTE" : "Zakázat vkládání z klienta:", + "FIELD_HEADER_ENABLE_AUDIO" : "Zapnout audio:", + "FIELD_HEADER_ENABLE_SFTP" : "Povolit SFTP:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Vynutit bezeztrátovou kompresi:", + "FIELD_HEADER_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", + "FIELD_HEADER_PASSWORD" : "Heslo:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Pouze čtení:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Vynechat myš:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Vynechat grafiku/stremování:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Zahrnout události kláves:", + "FIELD_HEADER_RECORDING_NAME" : "Název záznamu:", + "FIELD_HEADER_RECORDING_PATH" : "Cesta pro záznam:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Výchozí složka pro uložení záznamu:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Zakázat stahování souborů:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Veřejný klíč hosta (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Jméno hostitele:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interval udržování SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Přístupová fráze:", + "FIELD_HEADER_SFTP_PASSWORD" : "Heslo:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privátní klíč:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Souborový prohlížeč kořenové složky:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Zakázat nahrávání souborů:", + "FIELD_HEADER_SFTP_USERNAME" : "Uživatelské jméno:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Přehodit červené/modré komponenty:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Vysílací adresa pro paket WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC adresa vzdáleného hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Odeslat paket WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port pro paket WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Doba čekání na spuštění hostitele:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 barev", + "FIELD_OPTION_COLOR_DEPTH_16" : "Nízké barvy (16-bitů)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Opravdové barvy (24-bitů)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Opravdové barvy (32-bitů)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Místní", + "FIELD_OPTION_CURSOR_REMOTE" : "Vzdálený", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Zvuk", + "SECTION_HEADER_AUTHENTICATION" : "Ověřování", + "SECTION_HEADER_CLIPBOARD" : "Schránka", + "SECTION_HEADER_DISPLAY" : "Zobrazení", + "SECTION_HEADER_NETWORK" : "Síť", + "SECTION_HEADER_RECORDING" : "Záznam obrazovky", + "SECTION_HEADER_REPEATER" : "VNC opakovač", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Nastavení" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Zde jsou uvedeny záznamy o historii připojení a lze je třídit kliknutím na záhlaví sloupců. Chcete-li vyhledat konkrétní záznamy, zadejte řetězec filtrů a klikněte na tlačítko Hledat. Zobrazí se pouze záznamy, které odpovídají zadanému řetězci filtrů.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Žádné shodné záznamy", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Název připojení", + "TABLE_HEADER_SESSION_DURATION" : "Doba trvání", + "TABLE_HEADER_SESSION_LOGS" : "Protokoly", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Vzdálený host", + "TABLE_HEADER_SESSION_STARTDATE" : "Doba spuštění", + "TABLE_HEADER_SESSION_USERNAME" : "Uživatelské jméno", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", + "ACTION_NEW_CONNECTION" : "Nové připojení", + "ACTION_NEW_CONNECTION_GROUP" : "Nový skupina", + "ACTION_NEW_SHARING_PROFILE" : "Nový sdílený profil", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Toto připojení můžete spravovat klepnutím nebo klepnutím na níže uvedené připojení. V závislosti na vaší úrovni přístupu lze přidávat a mazat připojení a měnit jejich vlastnosti (protokol, název hostitele, port atd.).", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Připojení" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Jazyk zobrazení:", + "FIELD_HEADER_PASSWORD" : "Heslo:", + "FIELD_HEADER_PASSWORD_OLD" : "Aktuální heslo:", + "FIELD_HEADER_PASSWORD_NEW" : "Nové heslo:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Potvrďte nové heslo:", + "FIELD_HEADER_TIMEZONE" : "Časové pásmo:", + "FIELD_HEADER_USERNAME" : "Uživatelské jméno:", + + "HELP_DEFAULT_INPUT_METHOD" : "Výchozí metoda vstupu určuje, jak Guacamole přijímá události klávesnice. Změna tohoto nastavení může být nezbytná při používání mobilního zařízení nebo při psaní přes IME. Toto nastavení může být přepsáno na základě připojení v rámci nabídky Guacamole.", + "HELP_DEFAULT_MOUSE_MODE" : "Výchozí režim emulace myši určuje, jak se bude vzdálená myš chovat v nových spojeních s ohledem na dotyky. Toto nastavení může být přepsáno na základě připojení v rámci nabídky Guacamole.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Níže uvedené možnosti se vztahují k místu uživatele a ovlivní způsob zobrazení různých částí rozhraní.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Pokud chcete změnit heslo, zadejte své aktuální heslo a níže požadované nové heslo a klikněte na tlačítko „Aktualizovat heslo“. Změna se projeví okamžitě.", + + "INFO_PASSWORD_CHANGED" : "Heslo bylo změněno.", + "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "Uživatelská nastavení uložena.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Výchozí metoda vstupu", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Výchozí mód emulace myši", + "SECTION_HEADER_UPDATE_PASSWORD" : "Změnit heslo" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Nový uživatel", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Chcete-li spravovat daného uživatele, klepněte na něj nebo klepněte na něj. V závislosti na úrovni přístupu mohou být uživatelé přidáváni a mazáni a jejich hesla mohou být změněna.", + + "SECTION_HEADER_USERS" : "Uživatel", + + "TABLE_HEADER_FULL_NAME" : "Celé jméno", + "TABLE_HEADER_LAST_ACTIVE" : "Naposledy aktivní", + "TABLE_HEADER_ORGANIZATION" : "Organizace", + "TABLE_HEADER_USERNAME" : "Uživatelské jméno" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Nová skupina", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Chcete-li tuto skupinu spravovat, klepněte na ni nebo klepněte na ni. V závislosti na úrovni přístupu lze skupiny přidávat a mazat a jejich členské uživatele a skupiny lze měnit.", + + "SECTION_HEADER_USER_GROUPS" : "Skupiny", + + "TABLE_HEADER_USER_GROUP_NAME" : "Jméno skupiny" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Ukončit sezení", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Ukončit sezení", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Tato stránka bude naplněna aktuálně aktivními připojeními. Uvedená připojení a schopnost zabít tato připojení závisí na úrovni přístupu. Pokud chcete zabít jednu nebo více relací, zaškrtněte políčko vedle těchto relací a klepněte na tlačítko \"Zabít relace\". Zabití relace okamžitě odpojí uživatele od přidruženého připojení.", + + "INFO_NO_SESSIONS" : "Žádné aktivní sezení", + + "SECTION_HEADER_SESSIONS" : "Aktivní sezení", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Název připojení", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Vzdálený host", + "TABLE_HEADER_SESSION_STARTDATE" : "Aktivní od", + "TABLE_HEADER_SESSION_USERNAME" : "Uživatelské jméno", + + "TEXT_CONFIRM_DELETE" : "Jste si jisti, že chcete ukončit vybrané připojení? Uživatelé využívající toto připojení budou okamžitě odpojeni." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Emailová adresa:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Celé jméno:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organizace:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Role:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/de.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/de.json new file mode 100644 index 0000000000..f252c6192a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/de.json @@ -0,0 +1,878 @@ +{ + + "NAME" : "Deutsch", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Abbruch", + "ACTION_CLONE" : "Kopieren", + "ACTION_CONTINUE" : "Weiter", + "ACTION_DELETE" : "Löschen", + "ACTION_DELETE_SESSIONS" : "Sitzung beenden", + "ACTION_DOWNLOAD" : "Download", + "ACTION_LOGIN" : "Anmelden", + "ACTION_LOGOUT" : "Abmelden", + "ACTION_MANAGE_CONNECTIONS" : "Verbindungen", + "ACTION_MANAGE_PREFERENCES" : "Einstellungen", + "ACTION_MANAGE_SETTINGS" : "Einstellungen", + "ACTION_MANAGE_SESSIONS" : "Aktive Sitzungen", + "ACTION_MANAGE_USERS" : "Benutzer", + "ACTION_MANAGE_USER_GROUPS" : "Gruppen", + "ACTION_NAVIGATE_BACK" : "Zurück", + "ACTION_NAVIGATE_HOME" : "Startseite", + "ACTION_SAVE" : "Speichern", + "ACTION_SEARCH" : "Suche", + "ACTION_SHARE" : "Teilen", + "ACTION_UPDATE_PASSWORD" : "Passwort aktualisieren", + "ACTION_VIEW_HISTORY" : "Verlauf", + + "DIALOG_HEADER_ERROR" : "Fehler", + + "ERROR_PAGE_UNAVAILABLE" : "Ein Fehler ist aufgetreten und die gewünschte Aktion kann nicht fortgesetzt werden. Bitte informieren Sie ihren Systemadministrator oder prüfen Sie die Logdateien, falls das Problem bestehen bleiben sollte.", + "ERROR_PASSWORD_BLANK" : "Das Passwort darf nicht leer sein.", + "ERROR_PASSWORD_MISMATCH" : "Die Passwörter stimmen nicht überein.", + + "FIELD_HEADER_PASSWORD" : "Passwort:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Wiederhole Passwort:", + + "FIELD_PLACEHOLDER_FILTER" : "Filter", + + "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "In Benutzung durch {USERS} Benutzer.", + + "TEXT_ANONYMOUS_USER" : "Anonymer Benutzer", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{Sekunde} other{Sekunden}}} minute{{VALUE, plural, one{Minute} other{Minuten}}} hour{{VALUE, plural, one{Stunde} other{Stunden}}} day{{VALUE, plural, one{Tag} other{Tage}}} other{}}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Entferne abgeschlossene Übertragungen", + "ACTION_DISCONNECT" : "Trennen", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Neu verbinden", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Dateien hochladen", + + "DIALOG_HEADER_CONNECTING" : "Verbinden", + "DIALOG_HEADER_CONNECTION_ERROR" : "Verbindungsfehler", + "DIALOG_HEADER_DISCONNECTED" : "Verbindung getrennt", + + "ERROR_CLIENT_201" : "Aufgrund hoher Serverauslastung wurde diese Verbindung zurückgesetzt. Versuchen Sie es in wenigen Minuten erneut.", + "ERROR_CLIENT_202" : "Der Verbindungsaufbau wurde durch den Guacamole Server abgebrochen da der entfernte Computer nicht reagiert. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_CLIENT_203" : "Der entfernte Computer hat einen Fehler hervorgerufen und die Verbindung geschlossen. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_CLIENT_207" : "Der entfernte Computer ist gegenwärtig nicht erreichbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_CLIENT_208" : "Der entfernte Computer ist gegenwärtig nicht verfügbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_CLIENT_209" : "Der entfernte Computer hat die Verbindung geschlossen, da sie mit einer anderen Verbindung in Konflikt steht. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_CLIENT_20A" : "Der entfernte Computer hat die Verbindung geschlossen, da sie als inaktiv erkannt wurde. Bitte kontaktieren Sie Ihren Systemadministrator oder prüfen Sie Ihre Verbindungseinstellungen.", + "ERROR_CLIENT_20B" : "Der entfernte Computer hat die Verbindung geschlossen. Bitte kontaktieren Sie Ihren Systemadministrator oder prüfen Sie die Systemlogs falls dieses Verhalten unerwünscht oder unerwartet sein sollte.", + "ERROR_CLIENT_301" : "Anmeldung Fehlgeschlagen. Bitte versuchen Sie es erneut.", + "ERROR_CLIENT_303" : "Sie haben keine Berechtigung auf diese Verbindung zuzugreifen. Wenn Sie diese Berechtigung benötigen, bitten Sie den Systemadministrator diese Berechtigung hinzuzufügen oder prüfen Sie Ihre Systemeinstellungen.", + "ERROR_CLIENT_308" : "Die Verbindung wurde durch den Guacamole Server geschlossen da keine aktive Interkommunikation mit dem Browser besteht. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut..", + "ERROR_CLIENT_31D" : "Der Zugang zu dieser Verbindung wurde durch den Guacamole Server verweigert, da die maximale Anzahl der gleichzeitigen Zugriffe für diese Verbindung für einen einzelnen Benutzer erreicht wurde.", + "ERROR_CLIENT_DEFAULT" : "Die Verbindung wurde aufgrund eines internen Fehlers im Guacamole Server beendet. Sollte dieses Problem weiterhin bestehen informieren Sie den Systemadministrator oder überprüfen Sie die Protokolle.", + + "ERROR_TUNNEL_201" : "Der Verbindungsversuch wurde aufgrund zu vieler bestehender Verbindungen durch den Guacamole Server zurückgewiesen. Versuchen Sie es in wenigen Minuten erneut.", + "ERROR_TUNNEL_202" : "Die Verbindung zum Server wurde aufgrund hoher Latenz geschlossen. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", + "ERROR_TUNNEL_203" : "Die Verbindung wurde aufgrund eines internen Fehlers beendet. Versuche Sie es noch einmal oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_TUNNEL_204" : "Die angeforderte Verbindung existiert nicht. Bitte überprüfen Sie den Verbindungsnamen und versuchen Sie es erneut.", + "ERROR_TUNNEL_205" : "Diese Verbindung ist in Verwendung, ein konkurrierender Zugriff ist nicht gestattet. Versuche Sie es bitte später erneut.", + "ERROR_TUNNEL_207" : "Der Guacamole Server ist gegenwärtig nicht erreichbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_TUNNEL_208" : "Der Guacamole Server ist gegenwärtig nicht verfügbar. Versuchen Sie die Aktion erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_TUNNEL_301" : "Sie haben keine Zugriffsberechtigung für diese Verbindung. Bitte melden Sie sich an und versuchen es erneut.", + "ERROR_TUNNEL_303" : "Sie haben keine Zugriffsberechtigung für diese Verbindung. Wenn Sie diese Berechtigung benötigen, bitten Sie den Systemadministrator diese Berechtigung hinzuzufügen oder prüfen Sie Ihre Systemeinstellungen.", + "ERROR_TUNNEL_308" : "Die Verbindung wurde durch den Guacamole Server geschlossen da keine aktive Interkommunikation mit dem Browser besteht. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", + "ERROR_TUNNEL_31D" : "Der Zugang zu dieser Verbindung wurde durch den Guacamole Server verweigert, da die maximale Anzahl der gleichzeitigen Zugriffe für einen einzelnen Benutzer erreicht wurde. Bitte schliessen Sie eine oder mehrere Verbindungen und versuchen Sie es erneut.", + "ERROR_TUNNEL_DEFAULT" : "Die Verbindung wurde aufgrund eines internen Fehlers im Guacamole Server beendet. Sollte dieses Problem weiterhin bestehen informieren Sie Ihren Systemadministrator oder überprüfen Sie die Protokolle.", + + "ERROR_UPLOAD_100" : "Dateiübertragungen werden entweder nicht unterstützt oder sind nicht aktiviert. Bitte kontaktieren Sie Ihren Systemadministrator oder überprüfen die Protokolle.", + "ERROR_UPLOAD_201" : "Die maximale Anzahl gleichzeitiger Dateiübertragungen ist erreicht. Bitte warten Sie bis laufende Dateiübertragungen abgeschlossen sind und versuchen Sie es dann erneut.", + "ERROR_UPLOAD_202" : "Die Dateiübertragung konnte nicht gestartet werden da der entfernte Computer nicht reagiert. Bitte versuchen Sie es erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_UPLOAD_203" : "Der entfernte Computer hat bei der Übertragungen einen Fehler verursacht. Bitte versuchen Sie es erneut oder kontaktieren Ihren Systemadministrator.", + "ERROR_UPLOAD_204" : "Das Übertragungsziel existiert nicht. Bitte überprüfen Sie ob der Zielort wirklich existiert und versuchen Sie es dann erneut oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_UPLOAD_205" : "Das Übertragungsziel ist zur Zeit gesperrt. Bitte warten Sie bis alle laufenden Prozesse beendet wurden und versuchen Sie es dann erneut.", + "ERROR_UPLOAD_301" : "Es besteht ohne Anmeldung keine Berechtigung zur Dateiübertragung. Bitte melden Sie sich an und versuchen Sie es erneut.", + "ERROR_UPLOAD_303" : "Es besteht keine Berechtigung zur Dateiübertragung. Wenn Sie diese Berechtigung benötigen überprüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Systemadministrator.", + "ERROR_UPLOAD_308" : "Die Dateiübertragung weist keinen Fortschritt auf. Dies wird gewöhnlich durch Netzwerkprobleme verursacht, wie eine schlechte drahtlose Verbindung oder eine sehr langsame Netzwerkverbindung. Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.", + "ERROR_UPLOAD_31D" : "Die maximale Anzahl gleichzeitiger Dateiübertragungen erreicht. Bitte warten Sie bis eine oder mehrere laufende Dateiübertragungen abgeschlossen sind und versuche Sie es dann erneut.", + "ERROR_UPLOAD_DEFAULT" : "Die Verbindung wurde aufgrund eines internen Fehlers im Guacamole Server beendet. Sollte dieses Problem weiterhin bestehen informieren Sie Ihren Systemadministrator oder überprüfen Sie die Protokolle.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Kopierter oder ausgeschnittener Text aus Guacamole wird hier angezeigt. Änderungen am Text werden direkt auf die entfernte Zwischenablage angewandt.", + "HELP_INPUT_METHOD_NONE" : "Keine Eingabemethode in Verwendung. Tastatureingaben werden von der Hardwaretastatur akzeptiert.", + "HELP_INPUT_METHOD_OSK" : "Bildschirmeingaben und die eingebettete Guacamole Bildschirmtastatur werden akzeptiert. Die Bildschirmtastatur gestattet Tastenkombinationen die ansonsten unmöglich sind (z.B.: Strg-Alt-Del).", + "HELP_INPUT_METHOD_TEXT" : "Gestattet Eingaben von Text und emuliert Tastaturkombinationen basierend auf den eingegebenen Text. Dies wird benötigt für Geräte ohne Hardwaretastatur.", + "HELP_MOUSE_MODE" : "Beeinflusst, wie sich die entfernte Maus bei Touchpadberührungen verhält.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Tippen Sie auf die Zielposition, der Klick erfolgt am Ort der Berührung des Touchscreen's.", + "HELP_MOUSE_MODE_RELATIVE" : "Den Mauszeiger zur Zielposition bewegen und klicken. Der Klick erfolgt an der Position des Mauszeigers.", + "HELP_SHARE_LINK" : "Die aktuelle Verbindung wird gegenwärtig geteilt und kann von jeder Person über den folgenden Link erreicht werden:", + + "INFO_CONNECTION_SHARED" : "Diese Verbindung wird nun geteilt.", + "INFO_NO_FILE_TRANSFERS" : "Keine Dateiübertragungen.", + + "NAME_INPUT_METHOD_NONE" : "Keine", + "NAME_INPUT_METHOD_OSK" : "Bildschirmtastatur", + "NAME_INPUT_METHOD_TEXT" : "Texteingabe", + "NAME_KEY_CTRL" : "Strg", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Touchscreen", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", + "SECTION_HEADER_DEVICES" : "Geräte", + "SECTION_HEADER_DISPLAY" : "Anzeige", + "SECTION_HEADER_FILE_TRANSFERS" : "Dateiübertragung", + "SECTION_HEADER_INPUT_METHOD" : "Eingabemethode", + "SECTION_HEADER_MOUSE_MODE" : "Mausemulationsmodus", + + "TEXT_ZOOM_AUTO_FIT" : "Autoanpassung Fenstergröße", + "TEXT_CLIENT_STATUS_IDLE" : "Inaktiv.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Verbindungsaufbau zu Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Verbindung wurde getrennt.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "Die Verbindung zum Guacamole-Server ist nicht stabil.", + "TEXT_CLIENT_STATUS_WAITING" : "Verbindungsaufbau zu Guacamole. Bitte warten...", + "TEXT_RECONNECT_COUNTDOWN" : "Neuverbindung in {REMAINING} {REMAINING, plural, one{Sekunde} other{Sekunden}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/de-de-qwertz.json" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Standard (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Passwort anzeigen", + "HELP_HIDE_PASSWORD" : "Passwort ausblenden" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Keine aktiven Verbindungen.", + + "PASSWORD_CHANGED" : "Passwort geändert.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Alle Verbindungen", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Letzte Verbindungen" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "Anonymer Benutzer" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Anmeldungsfehler", + + "FIELD_HEADER_USERNAME" : "Benutzername", + "FIELD_HEADER_PASSWORD" : "Passwort" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Verbindung löschen", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Standort:", + "FIELD_HEADER_NAME" : "Name:", + "FIELD_HEADER_PROTOCOL" : "Protokoll:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Aktivieren", + "INFO_CONNECTION_NOT_USED" : "Diese Verbindung wurde bisher nicht verwendet.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Bearbeite Verbindung", + "SECTION_HEADER_HISTORY" : "Verlauf", + "SECTION_HEADER_PARAMETERS" : "Parameter", + + "TABLE_HEADER_HISTORY_USERNAME" : "Benutzername", + "TABLE_HEADER_HISTORY_START" : "Beginn", + "TABLE_HEADER_HISTORY_DURATION" : "Dauer", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Entfernter Host", + + "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Soll diese Verbindung wirklich gelöscht werden?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Lösche Verbindungsgruppe", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Standort:", + "FIELD_HEADER_NAME" : "Name:", + "FIELD_HEADER_TYPE" : "Typ:", + + "NAME_TYPE_BALANCING" : "Balancing", + "NAME_TYPE_ORGANIZATIONAL" : "Organisation", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Ändere Verbindungsgruppe", + + "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie diese Verbindungsgruppe wirklich löschen?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Verteil-Profil löschen", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Name:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Primäre Verbindung:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Verteil-Profil ändern", + "SECTION_HEADER_PARAMETERS" : "Parameter", + + "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie dieses Verteil-Profil wirklich löschen?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Lösche Benutzer", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administration:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Eigenes Passwort ändern:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Neuen Benutzer erstellen:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Neue Benutzergruppe erstellen:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Neue Verbindung erstellen:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Neue Verbindungsgruppe erstellen:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Neues Verteil-Profil erstellen:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Benutzername:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Dieser Benutzer gehört aktuell keiner Benutzergruppe an. Erweitern Sie diesen Abschnitt, um eine neue Benutzergruppe zu erstellen.", + + "INFO_READ_ONLY" : "Dieser Benutzer kann nicht bearbeitet werden.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "Keine Benutzergruppen verfügbar.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Alle Verbindungen", + "SECTION_HEADER_CONNECTIONS" : "Verbindungen", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Aktuelle Verbindungen", + "SECTION_HEADER_EDIT_USER" : "Benutzer bearbeiten", + "SECTION_HEADER_PERMISSIONS" : "Berechtigungen", + "SECTION_HEADER_USER_GROUPS" : "Benutzergruppen", + + "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie diesen Benutzer wirklich löschen?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Benutzergrupperuppe löschen", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Name der Benutzergruppe:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Diese Benutzergruppe gehört keiner Benutzergruppe an. Erweitern Sie diesen Abschnitt um eine neue Benutzergruppe hinzuzufügen.", + "HELP_NO_MEMBER_USER_GROUPS" : "Dieser Benutzergruppe gehört keine Benutzergruppe an. Erweitern Sie diesen Abschnitt um eine neue Benutzergruppe hinzuzufügen.", + "HELP_NO_MEMBER_USERS" : "Dieser Benutzergruppe gehört kein Benutzer an. Erweitern Sie diesen Abschnitt um einen neuen Benutzer hinzuzufügen.", + + "INFO_READ_ONLY" : "Diese Benutzergruppe kann nicht bearbeitet werden.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "Keine Benutzer verfügbar.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Gruppe bearbeiten", + "SECTION_HEADER_MEMBER_USERS" : "Mitglieder einer Benutzergruppe", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Benutzergruppen", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Übergeordnete Benutzergruppen", + + "TEXT_CONFIRM_DELETE" : "Dieser Löschvorgang ist unumkehrbar. Möchten Sie diese Benutzergruppe wirklich löschen?" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Client-Name:", + "FIELD_HEADER_COLOR_DEPTH" : "Farbtiefe:", + "FIELD_HEADER_CONSOLE" : "Mit Konsole verbinden (Windows 2003 / 2003 R2):", + "FIELD_HEADER_CONSOLE_AUDIO" : "Audiounterstützung Konsole:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Austauschlaufwerk automatisch erstellen:", + "FIELD_HEADER_CREATE_RECORDING_PATH": "Aufzeichnungspfad automatisch erstellen:", + "FIELD_HEADER_DISABLE_AUDIO" : "Audio deaktivieren:", + "FIELD_HEADER_DISABLE_AUTH" : "Authentifizierung deaktivieren:", + "FIELD_HEADER_DOMAIN" : "Domäne:", + "FIELD_HEADER_DPI" : "Auflösung (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Laufwerksname:", + "FIELD_HEADER_DRIVE_PATH" : "Laufwerkspfad:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Audioeingänge (Mikrofon) aktivieren:", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Desktop Gestaltung (Aero) aktivieren:", + "FIELD_HEADER_ENABLE_DRIVE" : "Austauschlaufwerk aktivieren:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Schriftartglättung (ClearType) aktivieren:", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Fensterziehen aktivieren:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Menüanimationen aktivieren:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Bitmap-Zwischenspeicherung deaktivieren:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Offscreen-Caching deaktivieren:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Glyph-Caching deaktivieren:", + "FIELD_HEADER_ENABLE_PRINTING" : "Druckunterstützung aktivieren:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTP aktivieren:", + "FIELD_HEADER_ENABLE_THEMING" : "Themen-Unterstützung aktivieren:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Desktophintergrund aktivieren:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Domäne:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Hostname:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Passwort:", + "FIELD_HEADER_GATEWAY_PORT" : "Port:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Benutzername:", + "FIELD_HEADER_HEIGHT" : "Höhe:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_IGNORE_CERT" : "Serverzertifikat ignorieren:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Startprogramme:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Lastverteilungs-Info/Cookie:", + "FIELD_HEADER_PASSWORD" : "Passwort:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRINTER_NAME" : "Name des weitergeleiteten Druckers:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Vorverbindungs-BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDP-Quell-ID:", + "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausaufzeichnung deaktivieren:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", + "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", + "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", + "FIELD_HEADER_RESIZE_METHOD" : "Grössenänderungs-Methode:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameter:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Arbeitsverzeichnis der Remote-Applikation:", + "FIELD_HEADER_REMOTE_APP" : "Remote-Applikation:", + "FIELD_HEADER_SECURITY" : "Sicherheitsmodus:", + "FIELD_HEADER_SERVER_LAYOUT" : "Tastaturlayout:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Standardverzeichnis:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Öffentlicher Schlüssel des Host (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive Intervall:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Passwort:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privater Schlüssel:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "SFTP-Wurzelverzeichnis:", + "FIELD_HEADER_SFTP_USERNAME" : "Benutzername¨:", + "FIELD_HEADER_STATIC_CHANNELS" : "Statische Kanäle:", + "FIELD_HEADER_USERNAME" : "Benutzername:", + "FIELD_HEADER_WIDTH" : "Breite:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Hohe Farbtiefe (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Echtfarben (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Echtfarben (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 Farben", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Display Update\" virtual channel (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Erneut verbinden", + + "FIELD_OPTION_SECURITY_ANY" : "Jede", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Netzwerkebene Authentifizierung)", + "FIELD_OPTION_SECURITY_RDP" : "RDP Verschlüsselung", + "FIELD_OPTION_SECURITY_TLS" : "TLS Verschlüsselung", + + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY": "Dänisch (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Deutsch (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Englisch (GB) (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Englisch (US) (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanisch (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Schweiz/Französisch (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Französisch (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italienisch (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanisch (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polnisches (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugiesisch (BR) (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugiesisch (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Schwedisch (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Türkisch (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", + "SECTION_HEADER_BASIC_PARAMETERS" : "Basiseinstellungen", + "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Geräteumleitung", + "SECTION_HEADER_DISPLAY" : "Bildschirm", + "SECTION_HEADER_GATEWAY" : "Remote Desktop Gateway", + "SECTION_HEADER_LOAD_BALANCING" : "Load Balancing", + "SECTION_HEADER_NETWORK" : "Netzwerk", + "SECTION_HEADER_PERFORMANCE" : "Geschwindigkeit", + "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", + "SECTION_HEADER_REMOTEAPP" : "Entferntes Programm", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Rücktaste:", + "FIELD_HEADER_COLOR_SCHEME" : "Farbschema:", + "FIELD_HEADER_COMMAND" : "Befehl ausführen:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Bildschirmaufzeichnungspfad automatisch erzeugen:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Textaufzeichnungspfad automatisch erzeugen:", + "FIELD_HEADER_FONT_NAME" : "Schriftart:", + "FIELD_HEADER_FONT_SIZE" : "Schriftgröße:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTP aktivieren:", + "FIELD_HEADER_HOST_KEY" : "Öffentlicher Schlüssel des Hosts (Base64):", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_USERNAME" : "Benutzername:", + "FIELD_HEADER_PASSWORD" : "Passwort:", + "FIELD_HEADER_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Privater Schlüssel:", + "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausaufzeichnung deaktivieren:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", + "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", + "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Server keepalive Intervall:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "SFTP-Wurzelverzeichnis:", + "FIELD_HEADER_TERMINAL_TYPE" : "Terminaltyp:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Textaufzeichnungsname:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Textaufzeichnungspfad:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Rücktaste (Strg-H)", + "FIELD_OPTION_BACKSPACE_127" : "Löschtaste (Strg-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Schwarz auf Weiß", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grau auf Schwarz", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grün auf Schwarz", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Weiß auf Schwarz", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", + "SECTION_HEADER_BEHAVIOR" : "Terminalverhalten", + "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", + "SECTION_HEADER_DISPLAY" : "Bildschirm", + "SECTION_HEADER_NETWORK" : "Netzwerk", + "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", + "SECTION_HEADER_SESSION" : "Sitzung / Umgebung", + "SECTION_HEADER_TYPESCRIPT" : "Textaufzeichnung", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Rücktaste:", + "FIELD_HEADER_COLOR_SCHEME" : "Farbschema:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Bildschirmaufzeichnungspfad automatisch erzeugen:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Textaufzeichnungspfad automatisch erzeugen:", + "FIELD_HEADER_FONT_NAME" : "Schriftart:", + "FIELD_HEADER_FONT_SIZE" : "Schriftgröße:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Regulärer Ausdruck für Anmeldefehler:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Regulärer Ausdruck für erfolgreiche Anmeldungen:", + "FIELD_HEADER_USERNAME" : "Benutzername:", + "FIELD_HEADER_USERNAME_REGEX" : "Regulärer Ausdruck für Benutzername:", + "FIELD_HEADER_PASSWORD" : "Passwort:", + "FIELD_HEADER_PASSWORD_REGEX" : "Regulärer Ausdruck für Passwort:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausaufzeichnung deaktivieren:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", + "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", + "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", + "FIELD_HEADER_TERMINAL_TYPE" : "Terminaltyp:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Textaufzeichnungsname:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Textaufzeichnungspfad:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Rücktaste (Strg-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Strg-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Schwarz auf Weiß", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grau auf Schwarz", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grün auf Schwarz", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Weiß auf Schwarz", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", + "SECTION_HEADER_BEHAVIOR" : "Terminalverhalten", + "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", + "SECTION_HEADER_DISPLAY" : "Bildschirm", + "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", + "SECTION_HEADER_TYPESCRIPT" : "Textaufzeichnung", + "SECTION_HEADER_NETWORK" : "Netzwerk" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Audioservername:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codierung:", + "FIELD_HEADER_COLOR_DEPTH" : "Farbtiefe:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Aufzeichnungspfad automatisch erzeugen:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DEST_HOST" : "Ziel Host:", + "FIELD_HEADER_DEST_PORT" : "Ziel Port:", + "FIELD_HEADER_ENABLE_AUDIO" : "Audio aktivieren:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTP aktivieren:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_USERNAME" : "Benutzername:", + "FIELD_HEADER_PASSWORD" : "Passwort:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Nur-Lesen:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Mausbewegungen nicht aufzeichnen:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Aufzeichnung der Anzeige deaktivieren:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Tastendrücke aufzeichnen:", + "FIELD_HEADER_RECORDING_NAME" : "Aufzeichnungsname:", + "FIELD_HEADER_RECORDING_PATH" : "Aufzeichnungspfad:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Standard Uploadverzeichnis:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Öffentlicher Schlüssel des Host (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY": "SFTP-Wurzelverzeichnis:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive Intervall:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Passwort:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privater Schlüssel:", + "FIELD_HEADER_SFTP_USERNAME" : "Benutzername:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Vertausche rot/blau Komponenten:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 Farben", + "FIELD_OPTION_COLOR_DEPTH_16" : "Hohe Farbtiefe (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Echtfarben (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Echtfarben (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Lokal", + "FIELD_OPTION_CURSOR_REMOTE" : "Entfernt", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Audio", + "SECTION_HEADER_AUTHENTICATION" : "Authentifizierung", + "SECTION_HEADER_CLIPBOARD" : "Zwischenablage", + "SECTION_HEADER_DISPLAY" : "Bildschirm", + "SECTION_HEADER_NETWORK" : "Netzwerk", + "SECTION_HEADER_RECORDING" : "Bildschirmaufzeichnung", + "SECTION_HEADER_REPEATER" : "VNC Repeater", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Einstellungen" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Die letzten Verbindungen werden hier historisch aufgelistet und können durch Klicken auf die Spaltenüberschriften sortiert werden. Zum Aufsuchen von bestimmten Datensätzen, geben Sie eine Filterzeichenfolge ein und klicken Sie auf \"Suchen\". Nur Datensätze, die die vorgesehenen Filterzeichenfolge entsprechen, werden aufgelistet.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Keine passenden Datensätze", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindungsname", + "TABLE_HEADER_SESSION_DURATION" : "Verbindungsdauer", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Entfernter Host", + "TABLE_HEADER_SESSION_STARTDATE" : "Sitzung aktiv seit", + "TABLE_HEADER_SESSION_USERNAME" : "Benutzername", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Neue Verbindung", + "ACTION_NEW_CONNECTION_GROUP" : "Neue Verbindungsgruppe", + "ACTION_NEW_SHARING_PROFILE" : "Neues Verteil-Profil", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Klicken Sie auf eine Verbindung um diese zu verwalten. Abhängig von Ihrer Zugriffsebene können Verbindungen hinzugefügt, gelöscht oder Parameter (Protokoll, Hostname, Port, etc.) geändert werden.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Verbindungen" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Anzeigesprache:", + "FIELD_HEADER_PASSWORD" : "Passwort:", + "FIELD_HEADER_PASSWORD_OLD" : "Aktuelles Passwort:", + "FIELD_HEADER_PASSWORD_NEW" : "Neues Passwort:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Passwort wiederholen:", + "FIELD_HEADER_USERNAME" : "Benutzername:", + + "HELP_DEFAULT_INPUT_METHOD" : "Die Standardeingabemethode bestimmt wie Tastaturereignisse an Guacamole weitergeleitet werden. Eine Änderung dieser Einstellung kann erforderlich sein, wenn ein mobiles Gerät verwendet wird oder bei der Eingabe durch einen IME. Dieses Verhalten kann im Menü innerhalb der Guacamole Verbindung geändert werden.", + "HELP_DEFAULT_MOUSE_MODE" : "Der Standard Mausemulationsmodus bestimmt wie sich die entfernte Maus bei Touchpad Berührungen verhält. Dieses Verhalten kann im Menü innerhalb der Guacamole Verbindung geändert werden.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LANGUAGE" : "Um die Spracheinstellungen von Guacamole zu ändern, wählen Sie eine der verfügbaren Sprachen.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Wenn Sie das Passwort ändern wollen, geben Sie das aktuelle und das gewünschte Passwort ein und klicken Sie auf \"Ändere Passwort\". Die Änderung wird sofort wirksam.", + + "INFO_PASSWORD_CHANGED" : "Passwort geändert.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Standard Eingabemethode", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Standard Mausemulationsmodus", + "SECTION_HEADER_UPDATE_PASSWORD" : "Passwort ändern" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Neuer Benutzer", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Klicken Sie auf einen der unten stehenden Benutzer, um diesen zu modifizieren. Je nach Berechtigungsstufe können Sie Benutzer hinzufügen, bearbeiten, löschen oder die Passwörter ändern.", + + "SECTION_HEADER_USERS" : "Benutzer", + + "TABLE_HEADER_FULL_NAME" : "Voller Name", + "TABLE_HEADER_LAST_ACTIVE" : "Zuletzt aktiv", + "TABLE_HEADER_ORGANIZATION" : "Organisation", + "TABLE_HEADER_USERNAME" : "Benutzername" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Neue Gruppe", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Klicken Sie auf eine der unten stehenden Gruppen, um diese zu modifizieren. Je nach Berechtigungsstufe können Sie Gruppen und deren Mitglieder hinzufügen, bearbeiten oder löschen.", + + "SECTION_HEADER_USER_GROUPS" : "Gruppen", + + "TABLE_HEADER_USER_GROUP_NAME" : "Gruppenname" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Beende Sitzung", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Beende Sitzung", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Diese Seite wird mit derzeit aktiven Verbindungen gefüllt. Die aufgelisteten Verbindungen und die Möglichkeit, diese Verbindungen zu beenden, hängen von Ihrer Zugriffsebene ab. Wenn Sie eine oder mehrere Sitzungen beenden wollen, wählen Sie diese Sitzung durch Aktivierung der nebenstehende Box und klicken auf \"Beende Sitzung\". Beendung einer Sitzung trennt den Benutzer von dessen Verbindung unverzüglich.", + + "INFO_NO_SESSIONS" : "Keine aktiven Sitzungen", + + "SECTION_HEADER_SESSIONS" : "Aktive Sitzungen", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindungsname", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Entfernter Host", + "TABLE_HEADER_SESSION_STARTDATE" : "Sitzung aktiv seit", + "TABLE_HEADER_SESSION_USERNAME" : "Benutzername", + + "TEXT_CONFIRM_DELETE" : "Sind Sie sicher, dass alle ausgewählten Sitzungen beendet werden sollen? Die Benutzer dieser Sitzungen werden unverzüglich getrennt." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "E-Mailadresse:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Voller Name:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organisation:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Rolle:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/en.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/en.json new file mode 100644 index 0000000000..0826f33542 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/en.json @@ -0,0 +1,1140 @@ +{ + + "NAME" : "English", + + "APP" : { + + "NAME" : "Apache Guacamole", + "VERSION" : "${project.version}", + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Cancel", + "ACTION_CLEAR" : "Clear", + "ACTION_CLONE" : "Clone", + "ACTION_CONTINUE" : "Continue", + "ACTION_DELETE" : "Delete", + "ACTION_DELETE_SESSIONS" : "Kill Sessions", + "ACTION_DOWNLOAD" : "Download", + "ACTION_IMPORT" : "Import", + "ACTION_LOGIN" : "Login", + "ACTION_LOGIN_AGAIN" : "Re-login", + "ACTION_LOGOUT" : "Logout", + "ACTION_MANAGE_CONNECTIONS" : "Connections", + "ACTION_MANAGE_PREFERENCES" : "Preferences", + "ACTION_MANAGE_SETTINGS" : "Settings", + "ACTION_MANAGE_SESSIONS" : "Active Sessions", + "ACTION_MANAGE_USERS" : "Users", + "ACTION_MANAGE_USER_GROUPS" : "Groups", + "ACTION_NAVIGATE_BACK" : "Back", + "ACTION_NAVIGATE_HOME" : "Home", + "ACTION_PAUSE" : "Pause", + "ACTION_PLAY" : "Play", + "ACTION_SAVE" : "Save", + "ACTION_SEARCH" : "Search", + "ACTION_SHARE" : "Share", + "ACTION_UPDATE_PASSWORD" : "Update Password", + "ACTION_VIEW_HISTORY" : "History", + "ACTION_VIEW_RECORDING" : "View", + + "DIALOG_HEADER_ERROR" : "Error", + + "ERROR_PAGE_UNAVAILABLE" : "An error has occurred and this action cannot be completed. If the problem persists, please notify your system administrator or check your system logs.", + "ERROR_PASSWORD_BLANK" : "Your password cannot be blank.", + "ERROR_PASSWORD_MISMATCH" : "The provided passwords do not match.", + "ERROR_SINGLE_FILE_ONLY" : "Please upload only a single file at a time", + + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Re-enter Password:", + + "FIELD_PLACEHOLDER_FILTER" : "Filter", + + "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Currently in use by {USERS} {USERS, plural, one{user} other{users}}.", + "INFO_LOGGED_OUT" : "You have been logged out.", + + "TEXT_ANONYMOUS_USER" : "Anonymous", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{second} other{seconds}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{hour} other{hours}}} day{{VALUE, plural, one{day} other{days}}} other{}}", + "TEXT_UNTRANSLATED" : "{MESSAGE}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR_CLIENT_MESSAGES" : "@:APP.ACTION_CLEAR", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "@:APP.ACTION_CLEAR", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_DISCONNECT" : "Disconnect", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Reconnect", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Upload Files", + + "DIALOG_HEADER_CONNECTING" : "Connecting", + "DIALOG_HEADER_CONNECTION_ERROR" : "Connection Error", + "DIALOG_HEADER_DISCONNECTED" : "Disconnected", + + "ERROR_CLIENT_201" : "This connection has been closed because the server is busy. Please wait a few minutes and try again.", + "ERROR_CLIENT_202" : "The Guacamole server has closed the connection because the remote desktop is taking too long to respond. Please try again or contact your system administrator.", + "ERROR_CLIENT_203" : "The remote desktop server encountered an error and has closed the connection. Please try again or contact your system administrator.", + "ERROR_CLIENT_207" : "The remote desktop server is currently unreachable. If the problem persists, please notify your system administrator, or check your system logs.", + "ERROR_CLIENT_208" : "The remote desktop server is currently unavailable. If the problem persists, please notify your system administrator, or check your system logs.", + "ERROR_CLIENT_209" : "The remote desktop server has closed the connection because it conflicts with another connection. Please try again later.", + "ERROR_CLIENT_20A" : "The remote desktop server has closed the connection because it appeared to be inactive. If this is undesired or unexpected, please notify your system administrator, or check your system settings.", + "ERROR_CLIENT_20B" : "The remote desktop server has forcibly closed the connection. If this is undesired or unexpected, please notify your system administrator, or check your system logs.", + "ERROR_CLIENT_301" : "Log in failed. Please reconnect and try again.", + "ERROR_CLIENT_303" : "The remote desktop server has denied access to this connection. If you require access, please ask your system administrator to grant your account access, or check your system settings.", + "ERROR_CLIENT_308" : "The Guacamole server has closed the connection because there has been no response from your browser for long enough that it appeared to be disconnected. This is commonly caused by network problems, such as spotty wireless signal, or simply very slow network speeds. Please check your network and try again.", + "ERROR_CLIENT_31D" : "The Guacamole server is denying access to this connection because you have exhausted the limit for simultaneous connection use by an individual user. Please close one or more connections and try again.", + "ERROR_CLIENT_DEFAULT" : "An internal error has occurred within the Guacamole server, and the connection has been terminated. If the problem persists, please notify your system administrator, or check your system logs.", + + "ERROR_TUNNEL_201" : "The Guacamole server has rejected this connection attempt because there are too many active connections. Please wait a few minutes and try again.", + "ERROR_TUNNEL_202" : "The connection has been closed because the server is taking too long to respond. This is usually caused by network problems, such as a spotty wireless signal, or slow network speeds. Please check your network connection and try again or contact your system administrator.", + "ERROR_TUNNEL_203" : "The server encountered an error and has closed the connection. Please try again or contact your system administrator.", + "ERROR_TUNNEL_204" : "The requested connection does not exist. Please check the connection name and try again.", + "ERROR_TUNNEL_205" : "This connection is currently in use, and concurrent access to this connection is not allowed. Please try again later.", + "ERROR_TUNNEL_207" : "The Guacamole server is not currently reachable. Please check your network and try again.", + "ERROR_TUNNEL_208" : "The Guacamole server is not accepting connections. Please check your network and try again.", + "ERROR_TUNNEL_301" : "You do not have permission to access this connection because you are not logged in. Please log in and try again.", + "ERROR_TUNNEL_303" : "You do not have permission to access this connection. If you require access, please ask your system administrator to add you the list of allowed users, or check your system settings.", + "ERROR_TUNNEL_308" : "The Guacamole server has closed the connection because there has been no response from your browser for long enough that it appeared to be disconnected. This is commonly caused by network problems, such as spotty wireless signal, or simply very slow network speeds. Please check your network and try again.", + "ERROR_TUNNEL_31D" : "The Guacamole server is denying access to this connection because you have exhausted the limit for simultaneous connection use by an individual user. Please close one or more connections and try again.", + "ERROR_TUNNEL_DEFAULT" : "An internal error has occurred within the Guacamole server, and the connection has been terminated. If the problem persists, please notify your system administrator, or check your system logs.", + + "ERROR_UPLOAD_100" : "File transfer is either not supported or not enabled. Please contact your system administrator, or check your system logs.", + "ERROR_UPLOAD_201" : "Too many files are currently being transferred. Please wait for existing transfers to complete, and then try again.", + "ERROR_UPLOAD_202" : "The file cannot be transferred because the remote desktop server is taking too long to respond. Please try again or contact your system administrator.", + "ERROR_UPLOAD_203" : "The remote desktop server encountered an error during transfer. Please try again or contact your system administrator.", + "ERROR_UPLOAD_204" : "The destination for the file transfer does not exist. Please check that the destination exists and try again.", + "ERROR_UPLOAD_205" : "The destination for the file transfer is currently locked. Please wait for any in-progress tasks to complete and try again.", + "ERROR_UPLOAD_301" : "You do not have permission to upload this file because you are not logged in. Please log in and try again.", + "ERROR_UPLOAD_303" : "You do not have permission to upload this file. If you require access, please check your system settings, or check with your system administrator.", + "ERROR_UPLOAD_308" : "The file transfer has stalled. This is commonly caused by network problems, such as spotty wireless signal, or simply very slow network speeds. Please check your network and try again.", + "ERROR_UPLOAD_31D" : "Too many files are currently being transferred. Please wait for existing transfers to complete, and then try again.", + "ERROR_UPLOAD_DEFAULT" : "An internal error has occurred within the Guacamole server, and the connection has been terminated. If the problem persists, please notify your system administrator, or check your system logs.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Text copied/cut within Guacamole will appear here. Changes to the text below will affect the remote clipboard.", + "HELP_INPUT_METHOD_NONE" : "No input method is used. Keyboard input is accepted from a connected, physical keyboard.", + "HELP_INPUT_METHOD_OSK" : "Display and accept input from the built-in Guacamole on-screen keyboard. The on-screen keyboard allows typing of key combinations that may otherwise be impossible (such as Ctrl-Alt-Del).", + "HELP_INPUT_METHOD_TEXT" : "Allow typing of text, and emulate keyboard events based on the typed text. This is necessary for devices such as mobile phones that lack a physical keyboard.", + "HELP_MOUSE_MODE" : "Determines how the remote mouse behaves with respect to touches.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Tap to click. The click occurs at the location of the touch.", + "HELP_MOUSE_MODE_RELATIVE" : "Drag to move the mouse pointer and tap to click. The click occurs at the location of the pointer.", + "HELP_SHARE_LINK" : "The current connection is being shared, and can be accessed by anyone with the following {LINKS, plural, one{link} other{links}}:", + + "INFO_ANONYMOUS_USER_COUNT" : "Anonymous{COUNT, plural, one{} other{ (#)}}", + "INFO_CONNECTION_SHARED" : "This connection is now shared.", + "INFO_NO_FILE_TRANSFERS" : "No file transfers.", + "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", + + "NAME_INPUT_METHOD_NONE" : "None", + "NAME_INPUT_METHOD_OSK" : "On-screen keyboard", + "NAME_INPUT_METHOD_TEXT" : "Text input", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Touchscreen", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIENT_MESSAGES" : "Messages", + "SECTION_HEADER_CLIPBOARD" : "Clipboard", + "SECTION_HEADER_DEVICES" : "Devices", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_FILE_TRANSFERS" : "File Transfers", + "SECTION_HEADER_INPUT_METHOD" : "Input method", + + "SECTION_HEADER_MOUSE_MODE" : "Mouse emulation mode", + + "TEXT_ANONYMOUS_USER_JOINED" : "An anonymous user has joined the connection.", + "TEXT_ANONYMOUS_USER_LEFT" : "An anonymous user has left the connection.", + "TEXT_ZOOM_AUTO_FIT" : "Automatically fit to browser window", + "TEXT_CLIENT_STATUS_IDLE" : "Idle.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Connecting to Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "You have been disconnected.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "The network connection to the Guacamole server appears unstable.", + "TEXT_CLIENT_STATUS_WAITING" : "Connected to Guacamole. Waiting for response...", + "TEXT_USER_JOINED" : "{USERNAME} has joined the connection.", + "TEXT_USER_LEFT" : "{USERNAME} has left the connection.", + "TEXT_RECONNECT_COUNTDOWN" : "Reconnecting in {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + "TEXT_CLIPBOARD_AWAITING_FOCUS" : "Click to view clipboard data...", + + "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Hide", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Show", + + "FIELD_HEADER_BACKGROUND" : "Background", + "FIELD_HEADER_FOREGROUND" : "Foreground", + + "FIELD_OPTION_CUSTOM" : "Custom...", + + "SECTION_HEADER_DETAILS" : "Details:" + + }, + + "IMPORT": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_BROWSE" : "Browse for File", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", + "ACTION_VIEW_FORMAT_HELP" : "View Format Tips", + "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", + "ACTION_IMPORT_CONNECTIONS" : "Import Connections", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + "DIALOG_HEADER_SUCCESS" : "Success", + + "ERROR_AMBIGUOUS_CSV_HEADER" : "Ambiguous CSV Header \"{HEADER}\" could be either a connection attribute or parameter", + "ERROR_AMBIGUOUS_PARENT_GROUP" : "Both group and parentIdentifier may be not specified at the same time", + "ERROR_ARRAY_REQUIRED" : "The provided file must contain a list of connections", + "ERROR_DETECTED_INVALID_TYPE" : "Unsupported file type. Please make sure the file is valid CSV, JSON, or YAML.", + "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "Duplicated connection \"{NAME}\" at \"{PATH}\" in import file", + "ERROR_DUPLICATE_CSV_HEADER" : "Duplicate CSV Header: {HEADER}", + "ERROR_EMPTY_FILE" : "The provided file is empty", + "ERROR_INVALID_CSV_HEADER" : "Invalid CSV Header \"{HEADER}\" is neither an attribute or parameter", + "ERROR_INVALID_MIME_TYPE" : "Unsupported file type: \"{TYPE}\"", + "ERROR_INVALID_GROUP" : "No group matching \"{GROUP}\" found", + "ERROR_INVALID_GROUP_IDENTIFIER" : "No connection group with identifier \"{IDENTIFIER}\" found", + "ERROR_INVALID_GROUP_TYPE" : "Invalid group - must be a string.", + "ERROR_INVALID_PROTOCOL" : "Invalid protocol \"{PROTOCOL}\"", + "ERROR_INVALID_USER_GROUPS_TYPE" : "Invalid user groups - must be an array of user group identifiers.", + "ERROR_INVALID_USERS_TYPE" : "Invalid users - must be an array of user identifiers.", + "ERROR_NO_FILE_SUPPLIED" : "Please select a file to import", + "ERROR_PARSE_FAILURE_CSV" : "Please make sure your file is valid CSV. Parsing failed with error \"{ERROR}\". ", + "ERROR_PARSE_FAILURE_JSON" : "Please make sure your file is valid JSON. Parsing failed with error \"{ERROR}\". ", + "ERROR_PARSE_FAILURE_YAML" : "Please make sure your file is valid YAML. Parsing failed with error \"{ERROR}\". ", + "ERROR_REJECT_UPDATE_CONNECTION" : "Connection \"{NAME}\" already exists at \"{PATH}\"", + "ERROR_REQUIRED_NAME_CONNECTION" : "The connection name is required", + "ERROR_REQUIRED_PROTOCOL_CONNECTION" : "The connection protocol is required", + "ERROR_REQUIRED_NAME_FILE" : "No connection name found in the provided file", + "ERROR_REQUIRED_PROTOCOL_FILE" : "No connection protocol found in the provided file", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "Replace/Update existing connections", + "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "Reset permissions", + + "HELP_CSV_DESCRIPTION" : "A connection import CSV file has one connection record per row. Each column will specify a connection field. At minimum the connection name and protocol must be specified.", + "HELP_CSV_EXAMPLE" : "name,protocol,username,password,hostname,group,users,groups,guacd-encryption (attribute)\nconn1,vnc,alice,pass1,conn1.web.com,ROOT,guac user 1;guac user 2,Connection 1 Users,none\nconn2,rdp,bob,pass2,conn2.web.com,ROOT/Parent Group,guac user 1,,ssl\nconn3,ssh,carol,pass3,conn3.web.com,ROOT/Parent Group/Child Group,guac user 2;guac user 3,,\nconn4,kubernetes,,,,,,,", + "HELP_CSV_MORE_DETAILS" : "The CSV header for each row specifies the connection field. The connection group ID that the connection should be imported into may be directly specified with \"parentIdentifier\", or the path to the parent group may be specified using \"group\" as shown below. In most cases, there should be no conflict between fields, but if needed, an \" (attribute)\" or \" (parameter)\" suffix may be added to disambiguate. Lists of user or user group identifiers must be semicolon-separated.¹", + "HELP_FILE_TYPE_DESCRIPTION" : "Three file types are supported for connection import: CSV, JSON, and YAML. The same data may be specified by each file type. This must include the connection name and protocol. Optionally, a connection group location, a list of users and/or user groups to grant access, connection parameters, or connection protocols may also be specified. Any users or user groups that do not exist in the current data source will be automatically created. Note that any existing connection permissions will not be removed for updated connections, unless \"Reset permissions\" is checked.", + "HELP_FILE_TYPE_HEADER" : "File Types", + "HELP_JSON_DESCRIPTION" : "A connection import JSON file is a list of connection objects. At minimum the connection name and protocol must be specified in each connection object.", + "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"conn1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"username\": \"alice\", \"password\": \"pass1\", \"hostname\": \"conn1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac user 1\", \"guac user 2\" ],\n \"groups\": [ \"Connection 1 Users\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"username\": \"bob\", \"password\": \"pass2\", \"hostname\": \"conn2.web.com\" \\},\n \"group\": \"ROOT/Parent Group\",\n \"users\": [ \"guac user 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"username\": \"carol\", \"password\": \"pass3\", \"hostname\": \"conn3.web.com\" \\},\n \"group\": \"ROOT/Parent Group/Child Group\",\n \"users\": [ \"guac user 2\", \"guac user 3\" ]\n \\},\n \\{\n \"name\": \"conn4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", + "HELP_JSON_MORE_DETAILS" : "The connection group ID that the connection should be imported into may be directly specified with a \"parentIdentifier\" field, or the path to the parent group may be specified using a \"group\" field as shown below. An array of user and user group identifiers to grant access to may be specified per connection.", + "HELP_EXISTING_CONNECTION_MODE" : "Entirely replace/update existing connections if their names and parent connection groups match the values in the provided file. If unchecked, attempting to import a connection with the same name and parent connection group of an existing connection will be considered an error.", + "HELP_EXISTING_PERMISSION_MODE" : "Fully reset the permissions granted for all connections in the provided file to the permissions specified in that file. If no permissions are specified, all relevant connection permissions will be revoked. If unchecked, existing permissions are preserved, and any permissions specified in the file will be added.", + "HELP_SEMICOLON_FOOTNOTE" : "If present, semicolons can be escaped with a backslash, e.g. \"first\\\\;last\"", + "HELP_UPLOAD_DROP_TITLE" : "Drop a File Here", + "HELP_UPLOAD_FILE_TYPES" : "CSV, JSON, or YAML", + "HELP_YAML_DESCRIPTION" : "A connection import YAML file is a list of connection objects with exactly the same structure as the JSON format.", + "HELP_YAML_EXAMPLE" : "---\n - name: conn1\n protocol: vnc\n parameters:\n username: alice\n password: pass1\n hostname: conn1.web.com\n group: ROOT\n users:\n - guac user 1\n - guac user 2\n groups:\n - Connection 1 Users\n attributes:\n guacd-encryption: none\n - name: conn2\n protocol: rdp\n parameters:\n username: bob\n password: pass2\n hostname: conn2.web.com\n group: ROOT/Parent Group\n users:\n - guac user 1\n attributes:\n guacd-encryption: none\n - name: conn3\n protocol: ssh\n parameters:\n username: carol\n password: pass3\n hostname: conn3.web.com\n group: ROOT/Parent Group/Child Group\n users:\n - guac user 2\n - guac user 3\n - name: conn4\n protocol: kubernetes", + + "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} {NUMBER, plural, one{connection} other{connections}} imported successfully.", + + "SECTION_HEADER_CONNECTION_IMPORT" : "Connection Import", + "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "Connection Import File Format", + "SECTION_HEADER_CSV" : "CSV Format", + "SECTION_HEADER_JSON" : "JSON Format", + "SECTION_HEADER_YAML" : "YAML Format", + + "TABLE_HEADER_ERRORS" : "Errors", + "TABLE_HEADER_GROUP" : "Group", + "TABLE_HEADER_NAME" : "Name", + "TABLE_HEADER_PROTOCOL" : "Protocol", + "TABLE_HEADER_ROW_NUMBER" : "Row #" + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Default (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Click to show password", + "HELP_HIDE_PASSWORD" : "Click to hide password" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "No recent connections.", + + "PASSWORD_CHANGED" : "Password changed.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "All Connections", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Recent Connections" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "Anonymous" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Invalid Login", + + "FIELD_HEADER_USERNAME" : "Username", + "FIELD_HEADER_PASSWORD" : "Password" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Connection", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Location:", + "FIELD_HEADER_NAME" : "Name:", + "FIELD_HEADER_PROTOCOL" : "Protocol:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Active Now", + "INFO_CONNECTION_NOT_USED" : "This connection has not yet been used.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Edit Connection", + "SECTION_HEADER_HISTORY" : "Usage History", + "SECTION_HEADER_PARAMETERS" : "Parameters", + + "TABLE_HEADER_HISTORY_USERNAME" : "Username", + "TABLE_HEADER_HISTORY_START" : "Start Time", + "TABLE_HEADER_HISTORY_DURATION" : "Duration", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Remote Host", + + "TEXT_CONFIRM_DELETE" : "Connections cannot be restored after they have been deleted. Are you sure you want to delete this connection?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Connection Group", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Location:", + "FIELD_HEADER_NAME" : "Name:", + "FIELD_HEADER_TYPE" : "Type:", + + "NAME_TYPE_BALANCING" : "Balancing", + "NAME_TYPE_ORGANIZATIONAL" : "Organizational", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Edit Connection Group", + + "TEXT_CONFIRM_DELETE" : "Connection groups cannot be restored after they have been deleted. Are you sure you want to delete this connection group?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Sharing Profile", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Name:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Primary Connection:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Edit Sharing Profile", + "SECTION_HEADER_PARAMETERS" : "Parameters", + + "TEXT_CONFIRM_DELETE" : "Sharing profiles cannot be restored after they have been deleted. Are you sure you want to delete this sharing profile?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Delete User", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administer system:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Change own password:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Create new users:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Create new user groups:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Create new connections:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Create new connection groups:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Create new sharing profiles:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Username:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "This user does not currently belong to any groups. Expand this section to add groups.", + + "INFO_READ_ONLY" : "Sorry, but this user account cannot be edited.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "No groups available.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "All Connections", + "SECTION_HEADER_CONNECTIONS" : "Connections", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Current Connections", + "SECTION_HEADER_EDIT_USER" : "Edit User", + "SECTION_HEADER_PERMISSIONS" : "Permissions", + "SECTION_HEADER_USER_GROUPS" : "Groups", + + "TEXT_CONFIRM_DELETE" : "Users cannot be restored after they have been deleted. Are you sure you want to delete this user?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Group", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Group name:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "This group does not currently belong to any groups. Expand this section to add groups.", + "HELP_NO_MEMBER_USER_GROUPS" : "This group does not currently contain any groups. Expand this section to add groups.", + "HELP_NO_MEMBER_USERS" : "This group does not currently contain any users. Expand this section to add users.", + + "INFO_READ_ONLY" : "Sorry, but this group cannot be edited.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "No users available.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Edit Group", + "SECTION_HEADER_MEMBER_USERS" : "Member Users", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Member Groups", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Parent Groups", + + "TEXT_CONFIRM_DELETE" : "Groups cannot be restored after they have been deleted. Are you sure you want to delete this group?" + + }, + + "PLAYER" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", + "ACTION_PLAY" : "@:APP.ACTION_PLAY", + + "INFO_LOADING_RECORDING" : "Your recording is now being loaded. Please wait...", + "INFO_SEEK_IN_PROGRESS" : "Seeking to the requested position. Please wait..." + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Backspace key sends:", + "FIELD_HEADER_CA_CERT" : "Certificate authority certificate:", + "FIELD_HEADER_CLIENT_CERT" : "Client certificate:", + "FIELD_HEADER_CLIENT_KEY" : "Client key:", + "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:", + "FIELD_HEADER_CONTAINER" : "Container name:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:", + "FIELD_HEADER_EXEC_COMMAND" : "Command (exec):", + "FIELD_HEADER_FONT_NAME" : "Font name:", + "FIELD_HEADER_FONT_SIZE" : "Font size:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_IGNORE_CERT" : "Ignore server certificate:", + "FIELD_HEADER_NAMESPACE" : "Namespace:", + "FIELD_HEADER_POD" : "Pod name:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", + "FIELD_HEADER_RECORDING_NAME" : "Recording name:", + "FIELD_HEADER_RECORDING_PATH" : "Recording path:", + "FIELD_HEADER_SCROLLBACK" : "Maximum scrollback size:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript path:", + "FIELD_HEADER_USE_SSL" : "Use SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Black on white", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gray on black", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Green on black", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "White on black", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_BEHAVIOR" : "Terminal behavior", + "SECTION_HEADER_CONTAINER" : "Container", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_RECORDING" : "Screen Recording", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Recording)", + "SECTION_HEADER_NETWORK" : "Network" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Client name:", + "FIELD_HEADER_COLOR_DEPTH" : "Color depth:", + "FIELD_HEADER_CONSOLE" : "Administrator console:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Support audio in console:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automatically create drive:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", + "FIELD_HEADER_DISABLE_AUDIO" : "Disable audio:", + "FIELD_HEADER_DISABLE_AUTH" : "Disable authentication:", + "FIELD_HEADER_DISABLE_COPY" : "Disable copying from remote desktop:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "Disable file download:", + "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", + "FIELD_HEADER_DISABLE_UPLOAD" : "Disable file upload:", + "FIELD_HEADER_DOMAIN" : "Domain:", + "FIELD_HEADER_DPI" : "Resolution (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Drive name:", + "FIELD_HEADER_DRIVE_PATH" : "Drive path:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Enable audio input (microphone):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Enable desktop composition (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Enable drive:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Enable font smoothing (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Enable full-window drag:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Enable menu animations:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Disable bitmap caching:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Disable off-screen caching:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Disable glyph caching:", + "FIELD_HEADER_DISABLE_GFX" : "Disable Graphics Pipeline Extension:", + "FIELD_HEADER_ENABLE_PRINTING" : "Enable printing:", + "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Enable theming:", + "FIELD_HEADER_ENABLE_TOUCH" : "Enable multi-touch:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Enable wallpaper:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Force lossless compression:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Domain:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Hostname:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Password:", + "FIELD_HEADER_GATEWAY_PORT" : "Port:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Username:", + "FIELD_HEADER_HEIGHT" : "Height:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_IGNORE_CERT" : "Ignore server certificate:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Initial program:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Load balance info/cookie:", + "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Line endings:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRINTER_NAME" : "Redirected printer name:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDP source ID:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", + "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Exclude touch events:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", + "FIELD_HEADER_RECORDING_NAME" : "Recording name:", + "FIELD_HEADER_RECORDING_PATH" : "Recording path:", + "FIELD_HEADER_RESIZE_METHOD" : "Resize method:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameters:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Working directory:", + "FIELD_HEADER_REMOTE_APP" : "Program:", + "FIELD_HEADER_SECURITY" : "Security mode:", + "FIELD_HEADER_SERVER_LAYOUT" : "Keyboard layout:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Default upload directory:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Disable file download:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Public host key (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive interval:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Password:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Private key:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "File browser root directory:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Disable file upload:", + "FIELD_HEADER_SFTP_USERNAME" : "Username:", + "FIELD_HEADER_STATIC_CHANNELS" : "Static channel names:", + "FIELD_HEADER_TIMEZONE" : "Time zone:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_WIDTH" : "Width:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet: ", + "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", + + "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Preserve as-is", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Display Update\" virtual channel (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconnect", + + "FIELD_OPTION_SECURITY_ANY" : "Any", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", + "FIELD_OPTION_SECURITY_RDP" : "RDP encryption", + "FIELD_OPTION_SECURITY_TLS" : "TLS encryption", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Swiss German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Canadian French (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Swiss French (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanese (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norwegian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguese Brazilian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguese (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Romanian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turkish-Q (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_BASIC_PARAMETERS" : "Basic Settings", + "SECTION_HEADER_CLIPBOARD" : "Clipboard", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Device Redirection", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_GATEWAY" : "Remote Desktop Gateway", + "SECTION_HEADER_LOAD_BALANCING" : "Load Balancing", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_PERFORMANCE" : "Performance", + "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Screen Recording", + "SECTION_HEADER_REMOTEAPP" : "RemoteApp", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Backspace key sends:", + "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:", + "FIELD_HEADER_COMMAND" : "Execute command:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:", + "FIELD_HEADER_DISABLE_COPY" : "Disable copying from terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", + "FIELD_HEADER_FONT_NAME" : "Font name:", + "FIELD_HEADER_FONT_SIZE" : "Font size:", + "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", + "FIELD_HEADER_HOST_KEY" : "Public host key (Base64):", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_LOCALE" : "Language/Locale ($LANG):", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Private key:", + "FIELD_HEADER_SCROLLBACK" : "Maximum scrollback size:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", + "FIELD_HEADER_RECORDING_NAME" : "Recording name:", + "FIELD_HEADER_RECORDING_PATH" : "Recording path:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Server keepalive interval:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Disable file download:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "File browser root directory:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Disable file upload:", + "FIELD_HEADER_TERMINAL_TYPE" : "Terminal type:", + "FIELD_HEADER_TIMEZONE" : "Time zone ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript path:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Black on white", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gray on black", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Green on black", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "White on black", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_BEHAVIOR" : "Terminal behavior", + "SECTION_HEADER_CLIPBOARD" : "Clipboard", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_RECORDING" : "Screen Recording", + "SECTION_HEADER_SESSION" : "Session / Environment", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Recording)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Backspace key sends:", + "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:", + "FIELD_HEADER_DISABLE_COPY" : "Disable copying from terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", + "FIELD_HEADER_FONT_NAME" : "Font name:", + "FIELD_HEADER_FONT_SIZE" : "Font size:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Login failure regular expression:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Login success regular expression:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_USERNAME_REGEX" : "Username regular expression:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSWORD_REGEX" : "Password regular expression:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", + "FIELD_HEADER_RECORDING_NAME" : "Recording name:", + "FIELD_HEADER_RECORDING_PATH" : "Recording path:", + "FIELD_HEADER_SCROLLBACK" : "Maximum scrollback size:", + "FIELD_HEADER_TERMINAL_TYPE" : "Terminal type:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript name:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript path:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Black on white", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gray on black", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Green on black", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "White on black", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_BEHAVIOR" : "Terminal behavior", + "SECTION_HEADER_CLIPBOARD" : "Clipboard", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_RECORDING" : "Screen Recording", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Text Session Recording)", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Audio server name:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Encoding:", + "FIELD_HEADER_COLOR_DEPTH" : "Color depth:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DEST_HOST" : "Destination host:", + "FIELD_HEADER_DEST_PORT" : "Destination port:", + "FIELD_HEADER_DISABLE_COPY" : "Disable copying from remote desktop:", + "FIELD_HEADER_DISABLE_PASTE" : "Disable pasting from client:", + "FIELD_HEADER_ENABLE_AUDIO" : "Enable audio:", + "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Force lossless compression:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclude mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclude graphics/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Include key events:", + "FIELD_HEADER_RECORDING_NAME" : "Recording name:", + "FIELD_HEADER_RECORDING_PATH" : "Recording path:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Default upload directory:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Disable file download:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Public host key (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive interval:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Password:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Private key:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "File browser root directory:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Disable file upload:", + "FIELD_HEADER_SFTP_USERNAME" : "Username:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Swap red/blue components:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Broadcast address for WoL packet:", + "FIELD_HEADER_WOL_MAC_ADDR" : "MAC address of the remote host:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Send WoL packet:", + "FIELD_HEADER_WOL_UDP_PORT" : "UDP port for WoL packet:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Host boot wait time:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Local", + "FIELD_OPTION_CURSOR_REMOTE" : "Remote", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Audio", + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_CLIPBOARD" : "Clipboard", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_RECORDING" : "Screen Recording", + "SECTION_HEADER_REPEATER" : "VNC Repeater", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Settings" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "History records for past connections are listed here and can be sorted by clicking the column headers. To search for specific records, enter a filter string and click \"Search\". Only records which match the provided filter string will be listed.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "No matching records", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Connection name", + "TABLE_HEADER_SESSION_DURATION" : "Duration", + "TABLE_HEADER_SESSION_LOGS" : "Logs", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Remote host", + "TABLE_HEADER_SESSION_STARTDATE" : "Start time", + "TABLE_HEADER_SESSION_USERNAME" : "Username", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", + "ACTION_NEW_CONNECTION" : "New Connection", + "ACTION_NEW_CONNECTION_GROUP" : "New Group", + "ACTION_NEW_SHARING_PROFILE" : "New Sharing Profile", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Click or tap on a connection below to manage that connection. Depending on your access level, connections can be added and deleted, and their properties (protocol, hostname, port, etc.) can be changed.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Connections" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Display language:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSWORD_OLD" : "Current Password:", + "FIELD_HEADER_PASSWORD_NEW" : "New Password:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirm New Password:", + "FIELD_HEADER_TIMEZONE" : "Timezone:", + "FIELD_HEADER_USERNAME" : "Username:", + + "HELP_DEFAULT_INPUT_METHOD" : "The default input method determines how keyboard events are received by Guacamole. Changing this setting may be necessary when using a mobile device, or when typing through an IME. This setting can be overridden on a per-connection basis within the Guacamole menu.", + "HELP_DEFAULT_MOUSE_MODE" : "The default mouse emulation mode determines how the remote mouse will behave in new connections with respect to touches. This setting can be overridden on a per-connection basis within the Guacamole menu.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Options below are related to the locale of the user and will impact how various parts of the interface are displayed.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "If you wish to change your password, enter your current password and the desired new password below, and click \"Update Password\". The change will take effect immediately.", + + "INFO_PASSWORD_CHANGED" : "Password changed.", + "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "User settings saved.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Default Input Method", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Default Mouse Emulation Mode", + "SECTION_HEADER_UPDATE_PASSWORD" : "Change Password" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "New User", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Click or tap on a user below to manage that user. Depending on your access level, users can be added and deleted, and their passwords can be changed.", + + "SECTION_HEADER_USERS" : "Users", + + "TABLE_HEADER_FULL_NAME" : "Full name", + "TABLE_HEADER_LAST_ACTIVE" : "Last active", + "TABLE_HEADER_ORGANIZATION" : "Organization", + "TABLE_HEADER_USERNAME" : "Username" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "New Group", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Click or tap on a group below to manage that group. Depending on your access level, groups can be added and deleted, and their member users and groups can be changed.", + + "SECTION_HEADER_USER_GROUPS" : "Groups", + + "TABLE_HEADER_USER_GROUP_NAME" : "Group Name" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Kill Sessions", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Kill Sessions", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "This page will be populated with currently-active connections. The connections listed and the ability to kill those connections is dependent upon your access level. If you wish to kill one or more sessions, check the box next to those sessions and click \"Kill Sessions\". Killing a session will immediately disconnect the user from the associated connection.", + + "INFO_NO_SESSIONS" : "No active sessions", + + "SECTION_HEADER_SESSIONS" : "Active Sessions", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Connection name", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Remote host", + "TABLE_HEADER_SESSION_STARTDATE" : "Active since", + "TABLE_HEADER_SESSION_USERNAME" : "Username", + + "TEXT_CONFIRM_DELETE" : "Are you sure you want to kill all selected sessions? The users using these sessions will be immediately disconnected." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Email address:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Full name:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organization:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Role:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/es.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/es.json new file mode 100644 index 0000000000..ffbb25c0d2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/es.json @@ -0,0 +1,1016 @@ +{ + + "NAME" : "Spanish", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Cancelar", + "ACTION_CLONE" : "Clonar", + "ACTION_CONTINUE" : "Continuar", + "ACTION_DELETE" : "Borrar", + "ACTION_DELETE_SESSIONS" : "Finalizar Sesiones", + "ACTION_DOWNLOAD" : "Descargar", + "ACTION_LOGIN" : "Iniciar Sesión", + "ACTION_LOGOUT" : "Cerrar Sesión", + "ACTION_MANAGE_CONNECTIONS" : "Conexiones", + "ACTION_MANAGE_PREFERENCES" : "Preferencias", + "ACTION_MANAGE_SETTINGS" : "Configuración", + "ACTION_MANAGE_SESSIONS" : "Sesiones Activas", + "ACTION_MANAGE_USERS" : "Usuarios", + "ACTION_MANAGE_USER_GROUPS" : "Grupos de Usuarios", + "ACTION_NAVIGATE_BACK" : "Atrás", + "ACTION_NAVIGATE_HOME" : "Inicio", + "ACTION_SAVE" : "Guardar", + "ACTION_SEARCH" : "Buscar", + "ACTION_SHARE" : "Compartir", + "ACTION_UPDATE_PASSWORD" : "Actualizar Contraseña", + "ACTION_VIEW_HISTORY" : "Historial", + + "DIALOG_HEADER_ERROR" : "Error", + + "ERROR_PAGE_UNAVAILABLE" : "Ha ocurrido un error y esta acción no se puede completar. Si el problema persiste, notifique al administrador del sistema o verifique los registros del sistema.", + "ERROR_PASSWORD_BLANK" : "La contraseña no puede estar en blanco.", + "ERROR_PASSWORD_MISMATCH" : "Las contraseñas no coinciden.", + + "FIELD_HEADER_PASSWORD" : "Contraseña:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Validar Contraseña:", + + "FIELD_PLACEHOLDER_FILTER" : "Filtros", + + "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Actualmente en uso por {USERS} {USERS, plural, one{user} other{users}}.", + + "TEXT_ANONYMOUS_USER" : "Anónimo", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{second} other{seconds}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{hour} other{hours}}} day{{VALUE, plural, one{day} other{days}}} other{}}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Limpiar", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_DISCONNECT" : "Disconnect", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Reconectar", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Subir ficheros", + + "DIALOG_HEADER_CONNECTING" : "Conectando", + "DIALOG_HEADER_CONNECTION_ERROR" : "Error de conexión", + "DIALOG_HEADER_DISCONNECTED" : "Desconectado", + + "ERROR_CLIENT_201" : "Esta conexión se ha cerrado porque el servidor esta ocupado. Por favor espera unos minutos e intenta de nuevo.", + "ERROR_CLIENT_202" : "El servidor Guacamole ha cerrado la conexión porque el escritorio remoto está tardando mucho en responder. Por favor intente de nuevo o contacte al administrador del sistema.", + "ERROR_CLIENT_203" : "El servidor de escritorio remoto encontró un error y ha cerrado la conexión. Por favor, intente de nuevo o contacte al administrador del sistema.", + "ERROR_CLIENT_207" : "El servidor de escritorio remoto no está disponible actualmente. Si el problema persiste, por favor notifique al administrador o verifique los registros del sistema.", + "ERROR_CLIENT_208" : "El servidor de escritorio remoto no está disponible actualmente. Si el problema persiste, por favor notifique al administrador o verifique los registros del sistema.", + "ERROR_CLIENT_209" : "El servidor de escritorio remoto ha cerrado la conexión porque hay conflicto con otra conexión. Por favor intenta de nuevo mas tarde.", + "ERROR_CLIENT_20A" : "El servidor de escritorio remoto ha cerrado la conexión porque parece estar inactivo. Si esto fué inesperado, notifíquelo al administrador o verifique la configuración del sistema.", + "ERROR_CLIENT_20B" : "El servidor de escritorio remoto ha forzado el cierre de la conexión. Si esto fué inesperado, notifíquelo al administrador o verifique la configuración del sistema.", + "ERROR_CLIENT_301" : "Inicio fallido. Por favor vuelva a conectar e intente de nuevo.", + "ERROR_CLIENT_303" : "El servidor de escritorio remoto ha denegado el acceso a esta conexión. Si necesita acceso, por favor solicítelo a un administrador para que permita el acceso de su cuenta, o verifique la configuración del sistema.", + "ERROR_CLIENT_308" : "El servidor Guacamole ha cerrado la conexión porque no ha habido respuesta del navegador por tiempo suficiente como para asumir que está desconectado. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intente de nuevo.", + "ERROR_CLIENT_31D" : "El servidor Guacamole está denegando el acceso a esta conexión porque ha agotado el límite de conexiones simultaneas por usuario. Por favor cierre una o mas conexiones e intente de nuevo.", + "ERROR_CLIENT_DEFAULT" : "Ha ocurrido un error interno en el servidor Guacamole y la conexión ha finalizado. Si el problema persiste, por favor notifíquelo al administrador o verifique los registros del sistema.", + + "ERROR_TUNNEL_201" : "El servidor Guacamole ha rechazado este intento de conexión porque hay muchas conexiones activas. Por favor espere unos minutos e intente de nuevo.", + "ERROR_TUNNEL_202" : "Se ha cerrado la conexión porque el servidor está tardando mucho en responder. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intenta de nuevo.", + "ERROR_TUNNEL_203" : "El servidor encontró un error y ha cerrado la conexión. Por favor intente de nuevo o contacte al administrador del sistema.", + "ERROR_TUNNEL_204" : "La conexión solicitada no existe. Por favor verifique el nombre de conexión e intente de nuevo.", + "ERROR_TUNNEL_205" : "Esta conexión esta actualmente en uso y el acceso concurrente a la misma no está permitido. Por favor intente de nuevo mas tarde.", + "ERROR_TUNNEL_207" : "El servidor Guacamole no esta disponible actualmente. Por favor verifique la configuración de red e intente de nuevo.", + "ERROR_TUNNEL_208" : "El servidor Guacamole no está aceptando conexiones. Por favor verifique la conexión a red e intente de nuevo.", + "ERROR_TUNNEL_301" : "No tiene permiso para acceder a esta conexión porque no ha iniciado sesión. Por favor incie sesión e intente de nuevo.", + "ERROR_TUNNEL_303" : "No tiene permiso para acceder a esta conexión. Si requiere acceso, por favor solicite al administrador que le agregue a la lista de usuarios permitidos o verifique la configuración del sistema.", + "ERROR_TUNNEL_308" : "El servidor Guacamole ha cerrado la conexión porque ho ha habido respuesta desde el navegador por tiempo suficiente como para asumir que está desconectado. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intente de nuevo.", + "ERROR_TUNNEL_31D" : "El servidor Guacamole esta denegando el acceso a esta conexión porque ha agotado el límite de conexiones simultaneas por usuario. Por favor cierre una o mas conexiones e intente de nuevo.", + "ERROR_TUNNEL_DEFAULT" : "Ha ocurrido un error interno en el servidor Guacamole y la conexión ha finalizado. Si el problema persiste, por favor notifíquelo al administrador o verifique los registros del sistema.", + + "ERROR_UPLOAD_100" : "La transferencia de ficheros no está habilitada o soportada. Por favor contacte al administrador o verifique los registros del sistema.", + "ERROR_UPLOAD_201" : "Se estan transfiriendo muchos ficheros actualmente. Por favor espere a que se completen las transferencias existentes e intente de nuevo.", + "ERROR_UPLOAD_202" : "El fichero no se puede transferir porque el servidor de escritorio remoto está tardando demasiado en responder. Por favor intente de nuevo o contacte con el administrador del sistema.", + "ERROR_UPLOAD_203" : "El servidor de escritorio remoto encontró un error durante la transferencia. Por favor intente denuevo o contacte con el administrador del sistema.", + "ERROR_UPLOAD_204" : "El destino para la transferencia de fichero no existe. Por favor verifique que exista el destino e intente de nuevo.", + "ERROR_UPLOAD_205" : "El destino para la transferencia de fichero está bloqueado. Por favor espere a que finalicen las tareas en progreso e intente de nuevo.", + "ERROR_UPLOAD_301" : "No tiene permiso para subir este fichero porque no ha iniciado sesión. Por favor inicie sesión e intente de nuevo.", + "ERROR_UPLOAD_303" : "No tiene permiso para subir este fichero. Si necesita acceso, por favor verifique la configuración del sistema o contacte con el administrador del sistema.", + "ERROR_UPLOAD_308" : "La transferencia de ficheros se ha parado. Normalmente esto es debido a problemas de red, como señal inalámbrica irregular, o simplemente velocidades de red muy lentas. Por favor revisa tu red e intente de nuevo.", + "ERROR_UPLOAD_31D" : "Se estan transfiriendo muchos ficheros actualmente. Por favor espere a que finalicen las transferencias de fichero existentes e intente de nuevo.", + "ERROR_UPLOAD_DEFAULT" : "Ha ocurrido un error interno en el servidor Guacamole y la conexión ha finalizado. Si el problema persiste, por favor notifíquelo al administrador o verifique los registros del sistema.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Aquí aparecerá el texto copiado/cortado en Guacamole. Los cambios en el texto de abajo afectaran al portapapeles remoto.", + "HELP_INPUT_METHOD_NONE" : "No se está usando un método de entrada. La entrada de teclado se acepta desde un teclado físico conectado.", + "HELP_INPUT_METHOD_OSK" : "Muestra y acepta entrada desde el teclado en pantalla incorporado de Guacamole. El teclado en pantalla permite escribir combinaciones que serían imposible de otro modo (como Ctrl-Alt-Sup).", + "HELP_INPUT_METHOD_TEXT" : "Permite escribir texto y emular eventos de teclado basados en el texto escrito. Este modo es necesario para dispositivos como teléfonos móviles que no tienen teclado físico.", + "HELP_MOUSE_MODE" : "Determina el comportamiento del ratón remoto respecto a los toques.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Toque para clic. El clic ocurre en la ubicación del toque.", + "HELP_MOUSE_MODE_RELATIVE" : "Arrastre para mover el puntero del ratón y toque para hacer clic. El clic ocurre en la ubicación del puntero.", + "HELP_SHARE_LINK" : "Se está compartiendo la conexión actual y puede acceder a la misma cualquiera con el siguiente {LINKS, plural, one{link} other{links}}:", + + "INFO_CONNECTION_SHARED" : "Esta conexión está compartida.", + "INFO_NO_FILE_TRANSFERS" : "No hay transferencia de ficheros.", + + "NAME_INPUT_METHOD_NONE" : "Ninguno", + "NAME_INPUT_METHOD_OSK" : "Teclado en pantalla", + "NAME_INPUT_METHOD_TEXT" : "Entrada de Texto", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Pantalla táctil", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Portapapeles", + "SECTION_HEADER_DEVICES" : "Dispositivos", + "SECTION_HEADER_DISPLAY" : "Monitor", + "SECTION_HEADER_FILE_TRANSFERS" : "Transferencia de ficheros", + "SECTION_HEADER_INPUT_METHOD" : "Método de entrada", + "SECTION_HEADER_MOUSE_MODE" : "Modo de emulación de ratón", + + "TEXT_ZOOM_AUTO_FIT" : "Ajustar automáticamente a la ventana del navegador", + "TEXT_CLIENT_STATUS_IDLE" : "Inactivo.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Conectando a Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Ha sido desconectado.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "La conexión al servidor Guacamole es inestable.", + "TEXT_CLIENT_STATUS_WAITING" : "Conectado a Guacamole. Esperando respuesta...", + "TEXT_RECONNECT_COUNTDOWN" : "Reconectando en {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/es-es-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Ocultar", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Mostrar", + + "FIELD_HEADER_BACKGROUND" : "Fondo", + "FIELD_HEADER_FOREGROUND" : "Primer plano", + + "FIELD_OPTION_CUSTOM" : "Custom...", + + "SECTION_HEADER_DETAILS" : "Details:" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Default (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "DD--MM-YYYY", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Clic para mostrar contraseña", + "HELP_HIDE_PASSWORD" : "Clic para esconder contraseña" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Sin conexiones recientes.", + + "PASSWORD_CHANGED" : "Contraseña cambiada.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Todas las conexiones", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Conexiones Recientes" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "Anónimo" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Inicio de sesión inválido", + + "FIELD_HEADER_USERNAME" : "Usuario", + "FIELD_HEADER_PASSWORD" : "Contraseña" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Borrar conexión", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Ubicación:", + "FIELD_HEADER_NAME" : "Nombre:", + "FIELD_HEADER_PROTOCOL" : "Protocolo:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Activo Ahora", + "INFO_CONNECTION_NOT_USED" : "Esta conexión no se ha usado todavía.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Editar Conexión", + "SECTION_HEADER_HISTORY" : "Historial de uso", + "SECTION_HEADER_PARAMETERS" : "Parámetros", + + "TABLE_HEADER_HISTORY_USERNAME" : "Usuario", + "TABLE_HEADER_HISTORY_START" : "Activo Desde", + "TABLE_HEADER_HISTORY_DURATION" : "Duración", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Host Remoto", + + "TEXT_CONFIRM_DELETE" : "Las conexiones no se pueden restaurar despues de haberlas eliminado. ¿Está seguro que quiere eliminar esta conexión?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Borrar Grupo de conexiones", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Ubicación:", + "FIELD_HEADER_NAME" : "Nombre:", + "FIELD_HEADER_TYPE" : "Tipo:", + + "NAME_TYPE_BALANCING" : "Balanceo", + "NAME_TYPE_ORGANIZATIONAL" : "Organizativo", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Editar Grupo de conexiones", + + "TEXT_CONFIRM_DELETE" : "Los Grupos de conexiones no se pueden restaurar despues de haberlos eliminado. ¿Esta seguro que quiere borrar este grupo de conexiones?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar perfil de compartir", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Nombre:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Conexión primaria:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Editar perfil de compartir", + "SECTION_HEADER_PARAMETERS" : "Parámetros", + + "TEXT_CONFIRM_DELETE" : "El perfil de compartir no se podrá restaurar después de eliminarlo. ¿Está seguro de que desea eliminar este perfil de compartir?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar Usuario", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrar sistema:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Cambiar contraseña:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Crear nuevos usuarios:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Crear nuevos grupo de usuarios:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Crear nuevas conexiones:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Crear nuevos grupos de conexión:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Crear nuevos perfiles de compartir:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Nombre de usuario:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Este usuario no pertenece actualmente a ningún grupo. Expanda esta sección para agregar grupos.", + + "INFO_READ_ONLY" : "Lo siento, pero esta cuenta de usuario no puede ser editada.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "No hay grupos disponibles.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Todas las conexiones", + "SECTION_HEADER_CONNECTIONS" : "Conexiones", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Conexiones actuales", + "SECTION_HEADER_EDIT_USER" : "Editar Usuario", + "SECTION_HEADER_PERMISSIONS" : "Permisos", + "SECTION_HEADER_USER_GROUPS" : "Groups", + + "TEXT_CONFIRM_DELETE" : "Los usuarios no se pueden restaurar despues de haberlos eliminado. ¿Esta seguro de querer eliminar este usuario?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Eliminar grupo", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Nombre del grupo:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Este grupo no pertenece actualmente a ningún grupo. Expanda esta sección para agregar grupos.", + "HELP_NO_MEMBER_USER_GROUPS" : "Este grupo no contiene actualmente ningun grupo. Expanda esta sección para agregar grupos.", + "HELP_NO_MEMBER_USERS" : "Este grupo no contiene actualmente ningun usuario. Expanda esta sección para agregar usuarios.", + + "INFO_READ_ONLY" : "Lo siento, este grupo no se puede editar.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "No hay usuarios disponibles.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Editar grupo", + "SECTION_HEADER_MEMBER_USERS" : "Usuarios asociados", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Grupos asociados", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Grupo principal", + + "TEXT_CONFIRM_DELETE" : "Los grupos no se pueden restaurar despues de haberlos eliminado. ¿Esta seguro de querer eliminar este grupo?" + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "La tecla de retroceso envía:", + "FIELD_HEADER_CA_CERT" : "Autoridad de certificación:", + "FIELD_HEADER_CLIENT_CERT" : "Certificado Cliente:", + "FIELD_HEADER_CLIENT_KEY" : "Clave Cliente:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de Color:", + "FIELD_HEADER_CONTAINER" : "Nombre de contenedor:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear automáticamente la ruta de grabación:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crear automáticamente la ruta de transcripción:", + "FIELD_HEADER_EXEC_COMMAND" : "Commando (exec):", + "FIELD_HEADER_FONT_NAME" : "Nombre de fuente:", + "FIELD_HEADER_FONT_SIZE" : "Tamaño de fuente:", + "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado de servidor:", + "FIELD_HEADER_NAMESPACE" : "Namespace:", + "FIELD_HEADER_POD" : "Nombre de Pod:", + "FIELD_HEADER_PORT" : "Puerto:", + "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", + "FIELD_HEADER_RECORDING_NAME" : "Nombre de grabación:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta de grabación:", + "FIELD_HEADER_SCROLLBACK" : "Tamaño máximo de desplazamiento:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nombre de transcripción:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta de transcripción:", + "FIELD_HEADER_USE_SSL" : "Usar SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Retroceso (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Borrar (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negro sobre blanco", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negro", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre negro", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanco sobre negro", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticación", + "SECTION_HEADER_BEHAVIOR" : "Comportamiento del terminal", + "SECTION_HEADER_CONTAINER" : "Contenedor", + "SECTION_HEADER_DISPLAY" : "Monitor", + "SECTION_HEADER_RECORDING" : "Grabación de Pantalla", + "SECTION_HEADER_TYPESCRIPT" : "Transcripción (Grabación de texto de la sesión)", + "SECTION_HEADER_NETWORK" : "Red" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Nombre de Cliente:", + "FIELD_HEADER_COLOR_DEPTH" : "Profundidad color:", + "FIELD_HEADER_CONSOLE" : "Consola de Administración:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Soporte de audio en consola:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Crear unidad automáticamente:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear ruta de grabación automáticamente:", + "FIELD_HEADER_DISABLE_AUDIO" : "Desactivar audio:", + "FIELD_HEADER_DISABLE_AUTH" : "Desactivar autenticación:", + "FIELD_HEADER_DISABLE_COPY" : "Desactivar copia desde escritorio remoto:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde cliente:", + "FIELD_HEADER_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", + "FIELD_HEADER_DOMAIN" : "Dominio:", + "FIELD_HEADER_DPI" : "Resolución (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Unidad:", + "FIELD_HEADER_DRIVE_PATH" : "Ruta Unidad:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Activar entrada de audio (Microfono):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Activar composición de escritorio (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Activar unidad:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Activar suavizado de fuente (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Activar arrastre de ventana completa:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Activar animaciones de menú:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Desactivar caché bitmap:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Desactivar caché off-screen:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Desactivar caché glyph:", + "FIELD_HEADER_ENABLE_PRINTING" : "Activar impresión:", + "FIELD_HEADER_ENABLE_SFTP" : "Activar SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Activar temas:", + "FIELD_HEADER_ENABLE_TOUCH" : "Activar multi-touch:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Activar Fondo de pantalla:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Forzar compresión sin pérdida:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Dominio:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nombre de Host:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Contraseña:", + "FIELD_HEADER_GATEWAY_PORT" : "Puerto:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Usuario:", + "FIELD_HEADER_HEIGHT" : "Altura:", + "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado del servidor:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Programa de Inicio:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Información de carga balanceada info/cookie:", + "FIELD_HEADER_PASSWORD" : "Contraseña:", + "FIELD_HEADER_PORT" : "Puerto:", + "FIELD_HEADER_PRINTER_NAME" : "Nombre de impresora redireccionada:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconexión BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDP ID origen:", + "FIELD_HEADER_READ_ONLY" : "Solo lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Excluir eventos táctiles:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", + "FIELD_HEADER_RECORDING_NAME" : "Nombre grabación:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta grabación:", + "FIELD_HEADER_RESIZE_METHOD" : "Método de redimensión:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parametros:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Directorio de trabajo:", + "FIELD_HEADER_REMOTE_APP" : "Programa:", + "FIELD_HEADER_SECURITY" : "Modo seguridad:", + "FIELD_HEADER_SERVER_LAYOUT" : "Disposición teclado:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Directorio de subida por defecto:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Clave pública de host (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nombre de Host:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo Keepalive SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase de paso:", + "FIELD_HEADER_SFTP_PASSWORD" : "Contraseña:", + "FIELD_HEADER_SFTP_PORT" : "Puerto:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Llave Privada:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directorio raiz del navegador de ficheros:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", + "FIELD_HEADER_SFTP_USERNAME" : "Usuario:", + "FIELD_HEADER_STATIC_CHANNELS" : "Nombres de Canales estáticos:", + "FIELD_HEADER_TIMEZONE" : "Zora horaria:", + "FIELD_HEADER_USERNAME" : "Usuario:", + "FIELD_HEADER_WIDTH" : "Ancho:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección Broadcast para paquete WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC del host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Color verdadero (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 colores", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Actualizar pantalla\" canal virtual (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconectar", + + "FIELD_OPTION_SECURITY_ANY" : "Cualquier", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Autenticación de nivel de red)", + "FIELD_OPTION_SECURITY_RDP" : "Encriptación RDP", + "FIELD_OPTION_SECURITY_TLS" : "Encriptación TLS", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Alemán Suizo (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Alemán (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Inglés UK (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Inglés US (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Español (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Francés Belga (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Francés Suizo (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francés (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Húngaro (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiano (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japones (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polaco (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugués Brazileño (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugués (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Rumano (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Sueco (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danés (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turco-Q (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticación", + "SECTION_HEADER_BASIC_PARAMETERS" : "Configuración básica", + "SECTION_HEADER_CLIPBOARD" : "Portapapeles", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirección dispositivo", + "SECTION_HEADER_DISPLAY" : "Visualización", + "SECTION_HEADER_GATEWAY" : "Puerta de enlace remota", + "SECTION_HEADER_LOAD_BALANCING" : "Balanceo de carga", + "SECTION_HEADER_NETWORK" : "Red", + "SECTION_HEADER_PERFORMANCE" : "Rendimiento", + "SECTION_HEADER_PRECONNECTION_PDU" : "Preconexión PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Grabación de pantalla", + "SECTION_HEADER_REMOTEAPP" : "Aplicación remota", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Tecla retroceso envía:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de color:", + "FIELD_HEADER_COMMAND" : "Ejecutar comando:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear ruta de grabación automáticamente:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crear ruta de transcripción automáticamente:", + "FIELD_HEADER_DISABLE_COPY" : "Desactivar copia desde el terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde el cliente:", + "FIELD_HEADER_FONT_NAME" : "Nombre de Fuente:", + "FIELD_HEADER_FONT_SIZE" : "Tamaño de Fuente:", + "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", + "FIELD_HEADER_HOST_KEY" : "Clave pública host (Base64):", + "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", + "FIELD_HEADER_LOCALE" : "Idioma/Especificación local ($LANG):", + "FIELD_HEADER_USERNAME" : "Usuario:", + "FIELD_HEADER_PASSWORD" : "Contraseña:", + "FIELD_HEADER_PASSPHRASE" : "Frase de paso:", + "FIELD_HEADER_PORT" : "Puerto:", + "FIELD_HEADER_PRIVATE_KEY" : "Llave Privada:", + "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", + "FIELD_HEADER_RECORDING_NAME" : "Nombre de grabación:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta de grabación:", + "FIELD_HEADER_SCROLLBACK" : "Tamaño máximo de desplazamiento:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Intervalo keepalive servidor:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directorio raiz del navegador de ficheros:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", + "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal:", + "FIELD_HEADER_TIMEZONE" : "Zona horaria ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nombre transcripción:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta transcripción:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección broadcast para paquete WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC del host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Retroceso (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Borrar (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negro sobre blanco", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negro", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre negro", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanco sobre negro", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticación", + "SECTION_HEADER_BEHAVIOR" : "Comportamiento del terminal", + "SECTION_HEADER_CLIPBOARD" : "Portapapeles", + "SECTION_HEADER_DISPLAY" : "Mostrar", + "SECTION_HEADER_NETWORK" : "Red", + "SECTION_HEADER_RECORDING" : "Grabación de pantalla", + "SECTION_HEADER_SESSION" : "Sesión / Entorno", + "SECTION_HEADER_TYPESCRIPT" : "Script de Escritura (Grabación sesión texto)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Tecla de retroceso envía:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de color:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear automáticamente ruta de grabación:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Crear automáticamente ruta de transcripción:", + "FIELD_HEADER_DISABLE_COPY" : "Desactivar copia desde el terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde el cliente:", + "FIELD_HEADER_FONT_NAME" : "Nombre Fuente:", + "FIELD_HEADER_FONT_SIZE" : "Tamaño Fuente:", + "FIELD_HEADER_HOSTNAME" : "Nombre Host:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expresión regular de inicio de sesión fallido:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expresión regular de inicio de sesión correcto:", + "FIELD_HEADER_USERNAME" : "Usuario:", + "FIELD_HEADER_USERNAME_REGEX" : "Expresión regular nombre de usuario:", + "FIELD_HEADER_PASSWORD" : "Contraseña:", + "FIELD_HEADER_PASSWORD_REGEX" : "Contraseña expresión regular:", + "FIELD_HEADER_PORT" : "Puerto:", + "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", + "FIELD_HEADER_RECORDING_NAME" : "Nombre grabación:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta grabación:", + "FIELD_HEADER_SCROLLBACK" : "Tamaño máximo de desplazamiento:", + "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nombre transcripción:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ruta transcripción:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección broadcast para paquete WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC de host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Retroceso (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Borrar (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Negro sobre blanco", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sobre negro", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre negro", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanco sobre negro", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticación", + "SECTION_HEADER_BEHAVIOR" : "Comportamiento del Terminal", + "SECTION_HEADER_CLIPBOARD" : "Portapapeles", + "SECTION_HEADER_DISPLAY" : "Mostrar", + "SECTION_HEADER_RECORDING" : "Grabación pantalla", + "SECTION_HEADER_TYPESCRIPT" : "Transcripción (Próxima sesión de grabación)", + "SECTION_HEADER_NETWORK" : "Red", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Nombre servidor Audio:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codificación:", + "FIELD_HEADER_COLOR_DEPTH" : "Profundidad color:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Crear ruta de grabación automáticamente:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DEST_HOST" : "Host Destino:", + "FIELD_HEADER_DEST_PORT" : "Puerto Destino:", + "FIELD_HEADER_DISABLE_COPY" : "Desactivar copiar desde escritorio remoto:", + "FIELD_HEADER_DISABLE_PASTE" : "Desactivar pegar desde cliente:", + "FIELD_HEADER_ENABLE_AUDIO" : "Habilitar audio:", + "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Forzar compresión sin pérdida:", + "FIELD_HEADER_HOSTNAME" : "Nombre de Host:", + "FIELD_HEADER_USERNAME" : "Usuario:", + "FIELD_HEADER_PASSWORD" : "Contraseña:", + "FIELD_HEADER_PORT" : "Puerto:", + "FIELD_HEADER_READ_ONLY" : "Solo Lectura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir ratón:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir pulsaciones de teclas:", + "FIELD_HEADER_RECORDING_NAME" : "Nombre grabación:", + "FIELD_HEADER_RECORDING_PATH" : "Ruta grabación:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Directorio de subida por defecto:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desactivar descarga de ficheros:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Clave pública de host (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nombre de Host:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo keepalive SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase de contraseña:", + "FIELD_HEADER_SFTP_PASSWORD" : "Contraseña:", + "FIELD_HEADER_SFTP_PORT" : "Puerto:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clave privada:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Directorio raiz del navegador de ficheros:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desactivar subida de ficheros:", + "FIELD_HEADER_SFTP_USERNAME" : "Usuario:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Invertir componentes rojo/azul:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Dirección broadcast para paquete WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Dirección MAC del host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar paquete WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tiempo espera arranque host:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 colores", + "FIELD_OPTION_COLOR_DEPTH_16" : "Color bajo(16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Color verdadero (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Color verdadero (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Local", + "FIELD_OPTION_CURSOR_REMOTE" : "Remoto", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Audio", + "SECTION_HEADER_AUTHENTICATION" : "Autenticación", + "SECTION_HEADER_CLIPBOARD" : "Portapapeles", + "SECTION_HEADER_DISPLAY" : "Monitor", + "SECTION_HEADER_NETWORK" : "Red", + "SECTION_HEADER_RECORDING" : "Grabación pantalla", + "SECTION_HEADER_REPEATER" : "Repetidor VNC", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Configuraciones" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Aquí se detalla el historial de las últimas conexiones y se pueden ordernar haciendo clic en los encabezados de la columna. Para buscar un registro específico, introduzca la cadena de texto a filtrar y haga clic en \"Buscar\". Solo se listaran los registros que coincidan con el filtro introducido.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "No hay registros coincidentes", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nombre de conexión", + "TABLE_HEADER_SESSION_DURATION" : "Duración", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Host Remoto", + "TABLE_HEADER_SESSION_STARTDATE" : "Activo Desde", + "TABLE_HEADER_SESSION_USERNAME" : "Usuario", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Nueva Conexión", + "ACTION_NEW_CONNECTION_GROUP" : "Nuevo Grupo", + "ACTION_NEW_SHARING_PROFILE" : "Nuevo perfil de compartir", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Haga clic o toque en una de las conexiones de abajo para gestionar esa conexión. Dependiendo de su nivel de acceso, podrá añadir/borrar conexiones y cambiar sus propiedades (Protocolo, Nombre de Host, Puerto, etc.) .", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Conexiones" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Idioma para mostrar:", + "FIELD_HEADER_PASSWORD" : "Contraseña:", + "FIELD_HEADER_PASSWORD_OLD" : "Contraseña actual:", + "FIELD_HEADER_PASSWORD_NEW" : "Nueva Contraseña:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirmar Nueva contraseña:", + "FIELD_HEADER_TIMEZONE" : "Zona horaria:", + "FIELD_HEADER_USERNAME" : "Usuario:", + + "HELP_DEFAULT_INPUT_METHOD" : "El método de entrada por defecto determina como se reciben en Guacamole los eventos de teclado. Es posible que sea necesario cambiar esta configuración cuando se usa un dispositivo móvil, o cuando se escribe a través de un método de entrada. Esta configuración se puede cambiar tambien en cada conexión desde el menú de Guacamole.", + "HELP_DEFAULT_MOUSE_MODE" : "El modo de emulación de ratón por defecto determina como se comportará el ratón remoto en nuevas conexiones con respecto a los toques. Esta configuración se puede cambiar tambien en cada conexión desde el menú de Guacamole.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Las siguientes opciones están relacionadas con la configuración regional del usuario e impactarán en cómo se muestran varias partes de la interfaz.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Si quiere cambiar su contraseña, introduzca abajo su contraseña actual y la nueva contraseña deseada y haga clic en \"Actualizar Contraseña\". El cambio será efectivo inmediatamente.", + + "INFO_PASSWORD_CHANGED" : "Contraseña Cambiada.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Método de entrada por defecto", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Modo de emulación de ratón por Defecto", + "SECTION_HEADER_UPDATE_PASSWORD" : "Cambiar Contraseña" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Nuevo Usuario", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Haga Clic o toque un usuario de la lista inferior para gestionar ese usuario. Dependiendo de su nivel de acceso, podrá añadir/borrar usuarios y cambiar sus contraseñas.", + + "SECTION_HEADER_USERS" : "Usuarios", + + "TABLE_HEADER_FULL_NAME" : "Nombre completo", + "TABLE_HEADER_LAST_ACTIVE" : "ültima conexión", + "TABLE_HEADER_ORGANIZATION" : "Organización", + "TABLE_HEADER_USERNAME" : "Usuario" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Nuevo Grupo", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Haga clic o toque un grupo de la lista inferior para gestionar ese grupo. Dependiendo de su nivel de acceso, podrá agregar/borrar grupos y cambiar los miembros y grupos del mismo.", + + "SECTION_HEADER_USER_GROUPS" : "Grupos", + + "TABLE_HEADER_USER_GROUP_NAME" : "Nombre de Grupo" + + }, + + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Finalizar Sesiones", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Finalizar Sesiones", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "En esta página se mostrarán las conexiones que estan activas actualmente. Las conexiones enumeradas y la capacidad de eliminar esas conexiones dependen de su nivel de acceso. Si quiere finalizar una o mas sesiones, marque la casilla correspondiente a esa/s sesión/es y haga clic en \"Finalizar Sesiones\". Si finaliza una sesión desconectará inmediatamente al usuario de la conexión asociada.", + + "INFO_NO_SESSIONS" : "No hay sesiones activas", + + "SECTION_HEADER_SESSIONS" : "Sesiones Activas", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nombre Conexión", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Host Remoto", + "TABLE_HEADER_SESSION_STARTDATE" : "Activo desde", + "TABLE_HEADER_SESSION_USERNAME" : "Usuario", + + "TEXT_CONFIRM_DELETE" : "¿Está seguro que quiere finalizar las sesiones seleccionadas? Los usuarios que estan usando estas sesiones serán desconectados inmediatamente." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Correo electrónico:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Nombre completo:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organización:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Puesto:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/fr.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/fr.json new file mode 100644 index 0000000000..2c7d5bc8e2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/fr.json @@ -0,0 +1,1010 @@ +{ + + "NAME" : "Français", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "Confirmer", + "ACTION_CANCEL" : "Annuler", + "ACTION_CLONE" : "Cloner", + "ACTION_CONTINUE" : "Continuer", + "ACTION_DELETE" : "Supprimer", + "ACTION_DELETE_SESSIONS" : "Fermer les Sessions", + "ACTION_DOWNLOAD" : "Télécharger", + "ACTION_LOGIN" : "Se connecter", + "ACTION_LOGOUT" : "Se déconnecter", + "ACTION_MANAGE_CONNECTIONS" : "Connexions", + "ACTION_MANAGE_PREFERENCES" : "Préférences", + "ACTION_MANAGE_SETTINGS" : "Paramètres", + "ACTION_MANAGE_SESSIONS" : "Sessions Actives", + "ACTION_MANAGE_USERS" : "Utilisateurs", + "ACTION_MANAGE_USER_GROUPS" : "Groupes", + "ACTION_NAVIGATE_BACK" : "Retour", + "ACTION_NAVIGATE_HOME" : "Accueil", + "ACTION_SAVE" : "Enregistrer", + "ACTION_SEARCH" : "Rechercher", + "ACTION_SHARE" : "Partager", + "ACTION_UPDATE_PASSWORD" : "Mettre à jour mot de passe", + "ACTION_VIEW_HISTORY" : "Historique", + + "DIALOG_HEADER_ERROR" : "Erreur", + + "ERROR_PAGE_UNAVAILABLE" : "Une erreur est apparue et cette action ne pourra pas être achevé. Si le problème persiste, merci de contacter votre administrateur ou regarder les journaux système.", + "ERROR_PASSWORD_BLANK" : "Votre mot de passe ne peut pas être vide.", + "ERROR_PASSWORD_MISMATCH" : "Le mot de passe ne correspond pas.", + + "FIELD_HEADER_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Répéter mot de passe:", + + "FIELD_PLACEHOLDER_FILTER" : "Filtre", + + "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Actuellement utilisé par {USERS} {USERS, plural, one{utilisateur} other{utilisateurs}}.", + + "TEXT_ANONYMOUS_USER" : "Anonyme", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{seconde} other{secondes}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{heure} other{heures}}} day{{VALUE, plural, one{jour} other{jours}}} other{}}", + "TEXT_UNTRANSLATED" : "{MESSAGE}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Vider", + "ACTION_DISCONNECT" : "Déconnecter", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Reconnecter", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Envoyer Fichiers", + + "DIALOG_HEADER_CONNECTING" : "Connexion", + "DIALOG_HEADER_CONNECTION_ERROR" : "Erreur de connexion", + "DIALOG_HEADER_DISCONNECTED" : "Déconnecté", + + "ERROR_CLIENT_201" : "Cette connexion a été fermée car le serveur est occupé. Merci d'attendre quelques minutes et de réessayer.", + "ERROR_CLIENT_202" : "Le serveur Guacamole a fermé cette connexion car l'ordinateur distant a mis trop de temps à répondre. Merci de réessayer ou de contacter l'administrateur.", + "ERROR_CLIENT_203" : "Le serveur distant a rencontré une erreur et a fermé la connexion. Merci de réessayer ou de contacter l'administrateur.", + "ERROR_CLIENT_207" : "Le server distant est inaccessible. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", + "ERROR_CLIENT_208" : "Le server distant est indisponible. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", + "ERROR_CLIENT_209" : "Le serveur distant a fermé la connexion car elle est en conflit avec une autre. Merci de réessayer plus tard.", + "ERROR_CLIENT_20A" : "Le serveur distant a fermé la connexion car il semblait être inactive. Si cela est inattendu, merci de notifier l'administrateur ou verifier vos paramètres système.", + "ERROR_CLIENT_20B" : "Le serveur distant a forcé la fermeture de la connexion. Si cela est inattendu, merci de notifier l'administrateur ou de regarder les journaux système.", + "ERROR_CLIENT_301" : "Connexion echouée. Merci d'essayer encore.", + "ERROR_CLIENT_303" : "Vous ne disposez pas des permissions pour accéder à cette connexion. Si vous avez besoin de ces droits demandez à l'administrateur qu'il vous ajoute à la lise des utilisateurs autorisés, ou de vérifier les paramètres système.", + "ERROR_CLIENT_308" : "Le serveur Guacamole a fermé la connexion car il n'y avait pas de réponse de votre navigateur Internet et qu'il l'a considéré comme déconnecté. Cela se produit à cause de problèmes réseaux (mauvais signal Wi-Fi ou réseau très lent). Merci de vérifier votre réseau et de réessayer.", + "ERROR_CLIENT_31D" : "Le serveur Guacamole interdit les connexions car vous avez dépassé la limite de connexion simultanée par utilisateur. Merci de fermer une ou plusieurs connexions et de reéssayer.", + "ERROR_CLIENT_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", + + "ERROR_TUNNEL_201" : "Le serveur Guacamole a rejeté cette tentative de connexion car il y a trop de connexions ouvertes. Merci d'attendre quelques minutes et de réessayer.", + "ERROR_TUNNEL_202" : "La connexion a été fermée car le serveur met trop de temps à répondre. En général, il s'agit de problème réseau comme un réseau Wi-Fi trop lent ou un réseau très lent. Merci de vérifier votre réseau ou de contacter l'administrateur.", + "ERROR_TUNNEL_203" : "Le serveur a rencontré une erreur et a fermé la connexion. Merci de réessayer ou de contacter l'administrateur.", + "ERROR_TUNNEL_204" : "Le connexion demandée n'existe pas. Merci de vérifier le nom et de réessayer.", + "ERROR_TUNNEL_205" : "Cette connexion est actuellement utilisée et les connexions multiples ne sont pas autorisées. Merci de réeassyer plus tard.", + "ERROR_TUNNEL_207" : "Le serveur Guacamole n'est pas actuellement accessible. Veuillez vérifier votre réseau et réessayer..", + "ERROR_TUNNEL_208" : "Le serveur Guacamole n'accepte pas les connexions. Veuillez vérifier votre réseau et réessayer.", + "ERROR_TUNNEL_301" : "Vous n'avez pas le droit d'accéder à cette connexion car vous n'êtes pas connecté. Merci de vous connecter et de réessayer.", + "ERROR_TUNNEL_303" : "Vous n'avez pas le droit d'accéder à cette connexion. Si vous souhaitez y avoir accès, merci de demander à l'administrateur de vous ajouter dans la liste des utilisateurs autorisés ou de vérifier les paramètres système.", + "ERROR_TUNNEL_308" : "Le serveur Guacamole a fermé la connexion car il n'y avait pas de réponse de votre navigateur Internet et qu'il l'a considéré comme déconnecté. Cela se produit à cause de problèmes réseaux (mauvais signal Wi-Fi ou réseau très lent). Merci de vérifier votre réseau et de réessayer.", + "ERROR_TUNNEL_31D" : "Le serveur Guacamole interdit cette connexion car vous avez dépassé la limite de connexions simultanées par utilisateur. Merci de fermer une ou plusieurs connexions et de reéssayer.", + "ERROR_TUNNEL_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", + + "ERROR_UPLOAD_100" : "Le transfert de fichier n'est pas activé ou supporté. Merci de contacter l'administrateur ou de vérifier les journaux système.", + "ERROR_UPLOAD_201" : "Trop de fichiers sont transférés. Merci d'attendre que les transferts en cours se terminent et réessayer.", + "ERROR_UPLOAD_202" : "Le fichier ne peut être transféré car le serveur distant met trop de temps à répondre. Merci de réessayer ou de contacter votre administrateur.", + "ERROR_UPLOAD_203" : "Le serveur distant a rencontré une erreur durant le transfert. Merci de reéssayer et de contacter l'administrateur.", + "ERROR_UPLOAD_204" : "La destination du transfert de fichier n'existe pas. Merci de vérifier que la destination existe et de réessayer.", + "ERROR_UPLOAD_205" : "La destination du transfert de fichier est actuellement verrouillée. Merci de patienter la fin des tâches en cours et de réessayer.", + "ERROR_UPLOAD_301" : "Vous n'avez pas la permission d'envoyer ce fichier car vous n'êtes pas connecté. Merci de vous connecter et de réessayer.", + "ERROR_UPLOAD_303" : "Vous n'avez pas la permission d'envoyer le fichier. Si vous avez besoin de cet accès, merci de vérifier vos paramètres system ou de valider avec votre administrateur.", + "ERROR_UPLOAD_308" : "Le transfert de fichier s'est bloqué. En général, il s'agit d'un problème réseau comme un signal Wi-Fi faible ou un réseau très lent. Merci de vérifier votre réseau et de réessayer.", + "ERROR_UPLOAD_31D" : "Trop de fichiers sont actuellement transférés. Merci d'attendre que les transferts en cours soient terminés et de réessayer plus tard.", + "ERROR_UPLOAD_DEFAULT" : "Une erreur interne est apparue dans le serveur Guacamole et la connexion a été fermée. Si le problème persiste, merci de notifier l'administrateur ou de regarder les journaux système.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Texte copié/coupé dans Guacamole apparaîtra ici. Changer le texte ci-dessous affectera le presse-papiers distant.", + "HELP_INPUT_METHOD_NONE" : "Aucune méthode de saisie utilisée. Clavier accepté depuis un clavier physique connecté.", + "HELP_INPUT_METHOD_OSK" : "Affiche et utilise la saisie du clavier virtuel intégré dans Guacamole. Le clavier virtuel permet d'utiliser des combinaisons de touches autrement impossibles (comme Ctrl-Alt-Supp).", + "HELP_INPUT_METHOD_TEXT" : "Affiche et utilise la saisie du clavier virtuel intégré dans Guacamole. Ceci est nécessaire pou les périphériques mobiles ne disposant pas de clavier physique.", + "HELP_MOUSE_MODE" : "Détermine comment la souris distante se comporte selon les événements.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Appuyer pour cliquer. Le clique s'effectue à l'endroit de l'appui.", + "HELP_MOUSE_MODE_RELATIVE" : "Glisser pour déplacer le pointeur de la souris et appuyer opur cliquer. Le clique s'effectue à l'endroit du pointeur.", + "HELP_SHARE_LINK" : "La connexion actuelle est en cours de partage et est accessible à toute personne possédant les caractéristiques suivantes: {LINKS, plusieurs, un{link} autres{links}}:", + + "INFO_CONNECTION_SHARED" : "Cette connexion est partagée maintenant.", + "INFO_NO_FILE_TRANSFERS" : "Pas de transfert de fichier.", + + "NAME_INPUT_METHOD_NONE" : "Aucune", + "NAME_INPUT_METHOD_OSK" : "Clavier virtuel", + "NAME_INPUT_METHOD_TEXT" : "Clavier", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Echap", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Écran tactile", + "NAME_MOUSE_MODE_RELATIVE" : "Pavé tactile", + + "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", + "SECTION_HEADER_DEVICES" : "Appareils", + "SECTION_HEADER_DISPLAY" : "Affichage", + "SECTION_HEADER_FILE_TRANSFERS" : "Transferts de fichiers", + "SECTION_HEADER_INPUT_METHOD" : "Méthode de saisie", + "SECTION_HEADER_MOUSE_MODE" : "Mode émulation souris", + + "TEXT_ZOOM_AUTO_FIT" : "Adapté à la fenêtre du navigateur", + "TEXT_CLIENT_STATUS_IDLE" : "Inactif.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Connexion à Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Vous avez été deconnecté.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "La connexion réseau au serveur Guacamole est instable.", + "TEXT_CLIENT_STATUS_WAITING" : "Connecté à Guacamole. En attente de réponse...", + "TEXT_RECONNECT_COUNTDOWN" : "Reconnexion dans {REMAINING} {REMAINING, plural, one{seconde} other{secondes}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/fr-fr-azerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Masquer", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Afficher", + + "FIELD_HEADER_BACKGROUND" : "Fond", + "FIELD_HEADER_FOREGROUND" : "Avant-plan", + + "FIELD_OPTION_CUSTOM" : "Personnaliser...", + + "SECTION_HEADER_DETAILS" : "Détails:" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Standard (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "AAAA-MM-JJ", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Cliquer pour afficher le mot de passe", + "HELP_HIDE_PASSWORD" : "Cliquer pour masquer le mot de passe" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Pas de connexion récente.", + + "PASSWORD_CHANGED" : "Mot de passe changé.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Toutes les Connexions", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Connexions récentes" + + }, + + "LIST": { + + "TEXT_ANONYMOUS_USER" : "Anonyme" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Identifiant Incorrect", + + "FIELD_HEADER_USERNAME" : "Identifiant", + "FIELD_HEADER_PASSWORD" : "Mot de passe" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Connexion", + "DIALOG_HEADER_ERROR" : "Erreur", + + "FIELD_HEADER_LOCATION" : "Lieu:", + "FIELD_HEADER_NAME" : "Nom:", + "FIELD_HEADER_PROTOCOL" : "Protocole:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Active", + "INFO_CONNECTION_NOT_USED" : "Cette connexion n'a jamais été utilisée.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Modifier Connexion", + "SECTION_HEADER_HISTORY" : "Historique d'utilisation", + "SECTION_HEADER_PARAMETERS" : "Paramètres", + + "TABLE_HEADER_HISTORY_USERNAME" : "Identifiant", + "TABLE_HEADER_HISTORY_START" : "Ouverture", + "TABLE_HEADER_HISTORY_DURATION" : "Durée", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Ordinateur distant", + + "TEXT_CONFIRM_DELETE" : "Les connexions ne pourront être restaurées une fois supprimées. Êtes-vous certains de vouloir supprimer cette connexion ?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Groupe de Connexion", + "DIALOG_HEADER_ERROR" : "Erreur", + + "FIELD_HEADER_LOCATION" : "Lieu:", + "FIELD_HEADER_NAME" : "Nom:", + "FIELD_HEADER_TYPE" : "Type:", + + "NAME_TYPE_BALANCING" : "Répartition", + "NAME_TYPE_ORGANIZATIONAL" : "Organizationel", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Modifier Groupe de Connexion", + + "TEXT_CONFIRM_DELETE" : "Les groupes de connexions ne pourront être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer ce groupe de connexion ?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer le Profil de Partage", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Nom:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Connexion Primaire:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Modifier le Profil de Partage", + "SECTION_HEADER_PARAMETERS" : "Paramètres", + + "TEXT_CONFIRM_DELETE" : "Les profils de partage ne peuvent pas être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer ce profil de partage ?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Utilisateur", + "DIALOG_HEADER_ERROR" : "Erreur", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administration du système:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Modifier son propre mot de passe:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Créer de nouveaux utilisateurs:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Créer de nouveaux groupes d'utilisateurs:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Créer de nouvelles connexions:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Créer de nouveaux groupes de connexion:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Créer de nouveaux profils de partage:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Identifiant:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Cet utilisateur n'appartient à aucun groupe. Développer cette section pour ajouter des groupes..", + + "INFO_READ_ONLY" : "Désolé, mais ce compte ne peut pas être modifié.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "Pas de groupes disponibles.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Toutes les Connexions", + "SECTION_HEADER_CONNECTIONS" : "Connexions", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Connexions en cours", + "SECTION_HEADER_EDIT_USER" : "Modifier Utilisateur", + "SECTION_HEADER_PERMISSIONS" : "Permissions", + "SECTION_HEADER_USER_GROUPS" : "Groupes", + + "TEXT_CONFIRM_DELETE" : "Les utilisateurs ne pourront être restaurés une fois supprimés. Êtes-vous certains de vouloir supprimer cet utilisateur?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Supprimer Groupe", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Nom Groupe:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Ce groupe n'appartient actuellement à aucun groupe. Développez cette section pour ajouter des groupes.", + "HELP_NO_MEMBER_USER_GROUPS" : "Ce groupe n'appartient actuellement à aucun groupe. Développez cette section pour ajouter des groupes.", + "HELP_NO_MEMBER_USERS" : "Ce groupe ne contient actuellement aucun utilisateur. Développez cette section pour ajouter des utilisateurs.", + + "INFO_READ_ONLY" : "Désolé, mais ce groupe ne peut pas être modifié.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "Pas d'utilisateur disponible.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Modifier Groupe", + "SECTION_HEADER_MEMBER_USERS" : "Utilisateurs Membre", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Groupes Membre", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Groupes Parent", + + "TEXT_CONFIRM_DELETE" : "Les groupes ne peuvent pas être restaurés après leur suppression. Êtes-vous certains de vouloir supprimer ce groupe?" + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Touche Retour Arrière envoyée:", + "FIELD_HEADER_CA_CERT" : "Certificat d'autorité de certification:", + "FIELD_HEADER_CLIENT_CERT" : "Certificat client:", + "FIELD_HEADER_CLIENT_KEY" : "Clé du certificat client:", + "FIELD_HEADER_COLOR_SCHEME" : "Palette de couleur:", + "FIELD_HEADER_CONTAINER" : "Nom du conteneur:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement le chemin d'enregistrement:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Créer automatiquement le chemin typescript:", + "FIELD_HEADER_FONT_NAME" : "Nom police:", + "FIELD_HEADER_FONT_SIZE" : "Taille police:", + "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorer le certificat serveur:", + "FIELD_HEADER_NAMESPACE" : "Espace de noms:", + "FIELD_HEADER_POD" : "Nom du pod:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les évenements clavier:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", + "FIELD_HEADER_RECORDING_PATH" : "Chemin de l,enregistrement:", + "FIELD_HEADER_SCROLLBACK" : "Taille maximum du défilement arrière:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Chemin Typescript:", + "FIELD_HEADER_USE_SSL" : "Utiliser SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Retour Arrière (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Suppr. (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sur noir", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Vert sur noir", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sur noir", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Authentification", + "SECTION_HEADER_BEHAVIOR" : "Comportement Terminal", + "SECTION_HEADER_CONTAINER" : "Conteneur", + "SECTION_HEADER_DISPLAY" : "Affichage", + "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Enregistrement Session Texte)", + "SECTION_HEADER_NETWORK" : "Réseau" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Nom du Client:", + "FIELD_HEADER_COLOR_DEPTH" : "Qualité couleur:", + "FIELD_HEADER_CONSOLE" : "Console Administrateur:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Support son en console:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Créer automatiquement le chemin du lecteur:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement un chemin d'enregistrement:", + "FIELD_HEADER_DISABLE_AUDIO" : "Désactiver son:", + "FIELD_HEADER_DISABLE_AUTH" : "Désactiver l'authentification:", + "FIELD_HEADER_DISABLE_COPY" : "Désactiver la copie depuis l'ordinateur distant:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", + "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller à partir du client:", + "FIELD_HEADER_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", + "FIELD_HEADER_DOMAIN" : "Nom de domaine:", + "FIELD_HEADER_DPI" : "Résolution (ppp):", + "FIELD_HEADER_DRIVE_NAME" : "Nom du lecteur:", + "FIELD_HEADER_DRIVE_PATH" : "Chemin du lecteur:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Activer l'entrée audio (microphone):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Activer la composition du bureau (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Activer lecteur réseau:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Activer le lissage des polices (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Activer pleine fenêtre de glisser:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Activer les animations de menu:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Désactiver le cache bitmap:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Désactiver le cache hors écran :", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Désactiver le cache glyph:", + "FIELD_HEADER_ENABLE_PRINTING" : "Activer imprimante:", + "FIELD_HEADER_ENABLE_SFTP" : "Activer SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Activer thématisation:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Activer fond d'écran:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Nom de domaine:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_GATEWAY_PORT" : "Port:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Identifiant:", + "FIELD_HEADER_HEIGHT" : "Hauteur:", + "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorer le certificat du serveur:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Programme de démarrage:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Equilibrage de charge info/cookie:", + "FIELD_HEADER_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRINTER_NAME" : "Nom de l'imprimante redirigée:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Préconnexion BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "Source RDP ID:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", + "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", + "FIELD_HEADER_RESIZE_METHOD" : "Méthode de redimensionnement:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Paramètres:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Répertoire de travail:", + "FIELD_HEADER_REMOTE_APP" : "Programme:", + "FIELD_HEADER_SECURITY" : "Mode de Sécurité:", + "FIELD_HEADER_SERVER_LAYOUT" : "Agencement clavier:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Répertoire d'upload par défaut:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Clé publique de l'hôte (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalle keepalive SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Phrase secrète:", + "FIELD_HEADER_SFTP_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clé privée:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Dossier racine de l'explorateur de fichier:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", + "FIELD_HEADER_SFTP_USERNAME" : "Identifiant:", + "FIELD_HEADER_STATIC_CHANNELS" : "Noms des canaux statiques:", + "FIELD_HEADER_TIMEZONE" : "Fuseau horaire:", + "FIELD_HEADER_USERNAME" : "Identifiant:", + "FIELD_HEADER_WIDTH" : "Largeur:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Faibles couleurs (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Vraies couleurs (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Vraies couleurs (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 couleurs", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Afficher Mise à jour\" canal virtuel (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconnecter", + + "FIELD_OPTION_SECURITY_ANY" : "Négotiation automatique", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", + "FIELD_OPTION_SECURITY_RDP" : "Chiffrement RDP", + "FIELD_OPTION_SECURITY_TLS" : "Chiffrement TLS", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Suisse Allemand (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Allemand (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Anglais UK (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Anglais US (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Enspagnol (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latino-Américain (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Français Belge (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Français Canada (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Français Suisse (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Français (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hongrois (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italien (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonais (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polonais (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugais Brésilien (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugais (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Roumaine (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Suédois (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danois (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turque (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Authentification", + "SECTION_HEADER_BASIC_PARAMETERS" : "Paramètres de base", + "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirection Périphérique", + "SECTION_HEADER_DISPLAY" : "Affichage", + "SECTION_HEADER_GATEWAY" : "Passerelle du bureau à distance", + "SECTION_HEADER_LOAD_BALANCING" : "Equilibrage de charge", + "SECTION_HEADER_NETWORK" : "Réseau", + "SECTION_HEADER_PERFORMANCE" : "Performance", + "SECTION_HEADER_PRECONNECTION_PDU" : "Préconnexion PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Enregistrement écran", + "SECTION_HEADER_REMOTEAPP" : "RemoteApp", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Touche Retour Arrière envoyée:", + "FIELD_HEADER_COLOR_SCHEME" : "Palette de couleurs:", + "FIELD_HEADER_COMMAND" : "Exécuter une commande:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement le chemin d'enregistrement:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Créer automatiquement le chemin typescript :", + "FIELD_HEADER_DISABLE_COPY" : "Désactiver copier depuis le terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller depuis le terminal:", + "FIELD_HEADER_FONT_NAME" : "Nom police:", + "FIELD_HEADER_FONT_SIZE" : "Taille police:", + "FIELD_HEADER_ENABLE_SFTP" : "Activer SFTP:", + "FIELD_HEADER_HOST_KEY" : "Clé publique de l'hôte (Base64):", + "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_LOCALE" : "Langue/Locale ($LANG):", + "FIELD_HEADER_USERNAME" : "Identifiant:", + "FIELD_HEADER_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_PASSPHRASE" : "Phrase secrète:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Clé privée:", + "FIELD_HEADER_SCROLLBACK" : "Taille maximum du défilement arrière:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", + "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Intervalle keepalive Serveur:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Dossier racine de l'explorateur de fichier:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", + "FIELD_HEADER_TERMINAL_TYPE" : "Type du terminal:", + "FIELD_HEADER_TIMEZONE" : "Fuseau horaire ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript :", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Chemin Typescript :", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Retour Arrière (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Suppr. (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sur noir", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Vert sur noir", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sur noir", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Authentification", + "SECTION_HEADER_BEHAVIOR" : "Comportement Terminal", + "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", + "SECTION_HEADER_DISPLAY" : "Affichage", + "SECTION_HEADER_NETWORK" : "Réseau", + "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", + "SECTION_HEADER_SESSION" : "Session / Environnement", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Enregistrement session Texte)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Touche Retour Arrière envoyée:", + "FIELD_HEADER_COLOR_SCHEME" : "Palette de couleurs:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement le chemin d'enregistrement:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Créer automatiquement le chemin typescript:", + "FIELD_HEADER_DISABLE_COPY" : "Désactiver copier depuis le terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller depuis le terminal:", + "FIELD_HEADER_FONT_NAME" : "Nom police:", + "FIELD_HEADER_FONT_SIZE" : "Taille police:", + "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expression régulière Échec de connexion:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expression régulière Connexion réussie:", + "FIELD_HEADER_USERNAME" : "Identifiant:", + "FIELD_HEADER_USERNAME_REGEX" : "Expression régulière Identifiant:", + "FIELD_HEADER_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_PASSWORD_REGEX" : "Expression régulière Mot de passe:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", + "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", + "FIELD_HEADER_SCROLLBACK" : "Taille maximum du défilement arrière:", + "FIELD_HEADER_TERMINAL_TYPE" : "Type de terminal:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nom Typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Chemin Typescript:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Retour Arrière (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Suppr. (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Noir sur blanc", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Gris sur noir", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Vert sur noir", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Blanc sur noir", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Authentification", + "SECTION_HEADER_BEHAVIOR" : "Comportement Terminal", + "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", + "SECTION_HEADER_DISPLAY" : "Affichage", + "SECTION_HEADER_NETWORK" : "Réseau", + "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Enregistrement session Texte)", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Serveur de son:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Encodage:", + "FIELD_HEADER_COLOR_DEPTH" : "Qualité couleur:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Créer automatiquement un chemin d'enregistrement:", + "FIELD_HEADER_CURSOR" : "Curseur:", + "FIELD_HEADER_DEST_HOST" : "Hôte distant:", + "FIELD_HEADER_DEST_PORT" : "Port distant:", + "FIELD_HEADER_DISABLE_COPY" : "Désactiver la copie depuis l'ordinateur distant:", + "FIELD_HEADER_DISABLE_PASTE" : "Désactiver coller à partir du client:", + "FIELD_HEADER_ENABLE_AUDIO" : "Activer son:", + "FIELD_HEADER_ENABLE_SFTP" : "Activer SFTP:", + "FIELD_HEADER_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_USERNAME" : "Identifiant:", + "FIELD_HEADER_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Lecture seule:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Exclure la souris:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Exclure les graphiques/flux:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Inclure les événements clavier:", + "FIELD_HEADER_RECORDING_NAME" : "Nom de l'enregistrement:", + "FIELD_HEADER_RECORDING_PATH" : "Chemin de l'enregistrement:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Répertoire d'upload par défaut:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Désactiver le téléchargement de fichier:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Clé publique de l'hôte (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nom d'hôte:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervale keepalive SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Phrase secrète:", + "FIELD_HEADER_SFTP_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Clé privée:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Dossier racine de l'explorateur de fichier:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Désactiver l'envoi de fichier:", + "FIELD_HEADER_SFTP_USERNAME" : "Identifiant:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Inverser composantes rouges et bleues:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adresse de diffusion pour les paquets WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adresse MAC de l'hôte distant:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Envoi de paquets WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Temps d'attente du démarage de l'hôte:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 couleurs", + "FIELD_OPTION_COLOR_DEPTH_16" : "Faibles couleurs (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Vraies couleurs (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Vraies couleurs (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Local", + "FIELD_OPTION_CURSOR_REMOTE" : "Distant", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Son", + "SECTION_HEADER_AUTHENTICATION" : "Authentification", + "SECTION_HEADER_CLIPBOARD" : "Presse-papiers", + "SECTION_HEADER_DISPLAY" : "Affichage", + "SECTION_HEADER_NETWORK" : "Réseau", + "SECTION_HEADER_RECORDING" : "Enregistrement Ecran", + "SECTION_HEADER_REPEATER" : "Répétiteur VNC", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Paramètres" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "L'historique des dernières connexions est listé ici et peut être trié en cliquant sur l'en-tête des colonnes. Pour rechercher des enregistrements spécifiques, entrez un filtre et cliquez sur \"Rechercher\". Seuls les enregistrements correspondants au filtre renseigné seront listés.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Aucun enregistrement correspondant", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de connexion", + "TABLE_HEADER_SESSION_DURATION" : "Durée", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Hôte distant", + "TABLE_HEADER_SESSION_STARTDATE" : "Ouvert depuis", + "TABLE_HEADER_SESSION_USERNAME" : "Identifiant", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Nouvelle Connexion", + "ACTION_NEW_CONNECTION_GROUP" : "Nouveau Groupe", + "ACTION_NEW_SHARING_PROFILE" : "Nouveau Profil de Partage", + + "DIALOG_HEADER_ERROR" : "Erreur", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Cliquer ou appuyer sur une connexion en dessous pour la gérer. Selon vos permissions, les connexions peuvent être ajoutées, supprimées, leur propriétés (protocole, nom d'hôte, port, etc) changées.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Connexions" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "Votre mot de passe ne peut être vide.", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Langue affichée:", + "FIELD_HEADER_PASSWORD" : "Mot de passe:", + "FIELD_HEADER_PASSWORD_OLD" : "Mot de passe actuel:", + "FIELD_HEADER_PASSWORD_NEW" : "Nouveau mot de passe:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirmer nouveau mot de passe:", + "FIELD_HEADER_USERNAME" : "Identifiant:", + "FIELD_HEADER_TIMEZONE" : "Fuseau horaire:", + + "HELP_DEFAULT_INPUT_METHOD" : "La méthode de saisie par défaut détermine comment les événements clavier sont reçus par Guacamole. Modifier ces paramètres peut être nécessaire pour l'utilisateur des smartphone/tablette. Ces paramètres peuvent être écrasés pour chaque connexion dans le menu de Guacamole.", + "HELP_DEFAULT_MOUSE_MODE" : "Le mode d'émulation de la souris détermine comment la souris distante se comportera dans les nouvelles connexions. Ce paramètre peut être définit dans chaque connexion dans le menu de Guacamole.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Les options ci-dessous sont reliées aux paramètres de localisation de l'utilisateur et affectent ainsi la façon dont certaines parties de l'interface sont affichées.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Si vous souhaitez changer votre mot de passe, entrer votre mot de passe actuel et le nouveau mot de passe en dessous puis cliquer sur \"Mettre à jour Mot de passe\". Le changement prendra effet immédiatement.", + + "INFO_PASSWORD_CHANGED" : "Mot de passe changé.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Méthode de saisie par défaut", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Mode d'émulation souris par défaut", + "SECTION_HEADER_UPDATE_PASSWORD" : "Modifier Mot de passe" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Nouvel Utilisateur", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Cliquez ou appuyez sur un utilisateur en dessous pour le gérer. Selon vos permissions, les utilisateurs peuvent être ajoutés, supprimés et leur mot de passe changé.", + + "SECTION_HEADER_USERS" : "Utilisateur", + + "TABLE_HEADER_FULL_NAME" : "Nom", + "TABLE_HEADER_LAST_ACTIVE" : "Dernier actif", + "TABLE_HEADER_ORGANIZATION" : "Organisation", + "TABLE_HEADER_USERNAME" : "Identifiant" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Nouveau Groupe", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Cliquez ou appuyez sur un groupe ci-dessous pour gérer ce groupe. En fonction de votre niveau d'accès, des groupes peuvent être ajoutés et supprimés, ainsi que leurs utilisateurs et groupes membres.", + + "SECTION_HEADER_USER_GROUPS" : "Groupes", + + "TABLE_HEADER_USER_GROUP_NAME" : "Nom Groupe" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Fermer Sessions", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Fermer Sessions", + "DIALOG_HEADER_ERROR" : "Erreur", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Cette page sera remplie avec des connexions actuellement actives. Les connexions répertoriées et la possibilité de supprimer ces connexions dépendent de votre niveau d'accès. Si vous souhaitez en fermer une ou plusieurs, sélectionner les et cliquer sur \"Fermer Sessions\". La fermeture d'une session déconnectera immédiatement l'utilisateur.", + + "INFO_NO_SESSIONS" : "Pas de session ouverte", + + "SECTION_HEADER_SESSIONS" : "Sessions Actives", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nom de connexion", + "TABLE_HEADER_SESSION_STARTDATE" : "Ouvert depuis", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Hôte distant", + "TABLE_HEADER_SESSION_USERNAME" : "Identifiant", + + "TEXT_CONFIRM_DELETE" : "Êtes-vous certains de vouloir fermer toutes les connexions sélectionnées ? Les utilisateurs utilisant ces sessions seront immédiatement déconnectés." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Adresse Mail:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Nom:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organisation:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Rôle:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/it.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/it.json new file mode 100644 index 0000000000..51f5846515 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/it.json @@ -0,0 +1,604 @@ +{ + + "NAME" : "Italiano", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Annulla", + "ACTION_CLONE" : "Clona", + "ACTION_CONTINUE" : "Continua", + "ACTION_DELETE" : "Cancella", + "ACTION_DELETE_SESSIONS" : "Termina Sessione", + "ACTION_LOGIN" : "Entra", + "ACTION_LOGOUT" : "Esci", + "ACTION_MANAGE_CONNECTIONS" : "Connessioni", + "ACTION_MANAGE_PREFERENCES" : "Preferenze", + "ACTION_MANAGE_SETTINGS" : "Opzioni", + "ACTION_MANAGE_SESSIONS" : "Sessioni Attive", + "ACTION_MANAGE_USERS" : "Utenti", + "ACTION_NAVIGATE_BACK" : "Indietro", + "ACTION_NAVIGATE_HOME" : "Home", + "ACTION_SAVE" : "Salva", + "ACTION_UPDATE_PASSWORD" : "Aggiorna Password", + + "DIALOG_HEADER_ERROR" : "Errore", + + "ERROR_PASSWORD_BLANK" : "La password non può essere vuota.", + "ERROR_PASSWORD_MISMATCH" : "Le password inserite sono diverse!", + + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Re-inserisci la password:", + + "FIELD_PLACEHOLDER_FILTER" : "Filtro", + + "FORMAT_DATE_TIME_PRECISE" : "dd-MM-yyyy HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Ora utilizzato da {USERS} {USERS, plural, one{user} other{users}}." + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Pulisci i trasferimenti completati", + "ACTION_DISCONNECT" : "Disconnetti", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Riconnetti", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_UPLOAD_FILES" : "Carica un file", + + "DIALOG_HEADER_CONNECTING" : "Connessione in corso", + "DIALOG_HEADER_CONNECTION_ERROR" : "Errore di Connessione", + "DIALOG_HEADER_DISCONNECTED" : "Disconnesso", + + "ERROR_CLIENT_201" : "La connessione è stata chiusa perchè il server è sovraccarico. Attendi qualche minuto e riprova a collegarti.", + "ERROR_CLIENT_202" : "Il server Guacamole ha chiuso la connessione perchè il desktop remoto risponde troppo lentamente. Per favore riprova o contatta il tuo amministratore di sistema.", + "ERROR_CLIENT_203" : "Il desktop remoto ha riscontrato un errore ed ha chiuso la connessione. Per favore riprova o contatta il tuo amministratore di sistema.", + "ERROR_CLIENT_205" : "Questa connessione è stata chiusa a causa di un conflitto con un'altra connessione. Riprova tra qualche minuto.", + "ERROR_CLIENT_301" : "Autenticazione fallita. Prova ad effettaure nuovamente la connessione.", + "ERROR_CLIENT_303" : "Non hai i permessi per accedere a questa connessione. Se ne hai bisogno, chiedi ai tuoi amministratori di sistema di aggiungerti agli utenti abilitati.", + "ERROR_CLIENT_308" : "Il server Guacamole ha chiuso la connessione perchè il tuo browser non ha risposto per troppo tempo e sembrava essersi disconnesso. Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", + "ERROR_CLIENT_31D" : "Il server Guacamole rifiuta l'accesso alla connessione perchè hai raggiunto il limite massimo di connessioni simultanee per singolo utente. Chiudi una o più connessioni e riprova.", + "ERROR_CLIENT_DEFAULT" : "Si è verificato un errore interno sul server Guacamole, e la connessione è stata terminata. Se il problema persiste avvisa il tuo amministratore di sistema o controlla i file di log.", + + "ERROR_TUNNEL_201" : "Il server Guacamole ha rifiutato questa connessione perchè ci sono troppe connessioni attive. Attendi qualche minuto e riprova.", + "ERROR_TUNNEL_202" : "La connessione è stata chiusa dal server is taking too long to respond.Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", + "ERROR_TUNNEL_203" : "Si è verificato un errore sul server e la connessione è stata chiusa. Riprova o contatta il tuo amministratore di sistema.", + "ERROR_TUNNEL_204" : "La connessione richiesta non esiste. Controlla il nome della connessione e riprova. Grazie.", + "ERROR_TUNNEL_205" : "Questa connessione è già in uso, non sono possibili accessi concorrenti. Riprova più tardi. Grazie.", + "ERROR_TUNNEL_301" : "Non hai i permessi per accedere a questa connessione perchè non hai effettuato il login. Inserisci nome utente e password e riprova.", + "ERROR_TUNNEL_303" : "Non hai i permessi per accedere a questa connessione. Se ne hai bisogno, chiedi ai tuoi amministratori di sistema di aggiungerti agli utenti abilitati.", + "ERROR_TUNNEL_308" : "Il server Guacamole ha chiuso la connessione perchè il tuo browser non ha risposto per troppo tempo e sembrava essersi disconnesso. Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", + "ERROR_TUNNEL_31D" : "Il server Guacamole rifiuta l'accesso alla connessione perchè hai raggiunto il limite massimo di connessioni simultanee per singolo utente. Chiudi una o più connessioni e riprova. Grazie.", + "ERROR_TUNNEL_DEFAULT" : "Si è verificato un errore interno sul server Guacamole, e la connessione è stata terminata. Se il problema persiste avvisa il tuo amministratore di sistema o controlla i file di log.", + + "ERROR_UPLOAD_100" : "Il trasferimento di file non è supportato o non è attivo. Contatta il tuo amministratore di sistema.", + "ERROR_UPLOAD_201" : "Ci sono troppi file in coda per il trasferimento. Attendi che siano completati i trasferimenti in atto e riprova.", + "ERROR_UPLOAD_202" : "Trasferimento annullato: il desktop remoto risponde troppo lentamente. Per favore riprova o contatta il tuo amministratore di sistema.", + "ERROR_UPLOAD_203" : "Il desktop remoto ha incontrato un errore durante il trasferimento. Per favore riprova o contatta il tuo amministratore di sistema.", + "ERROR_UPLOAD_204" : "La destinazione del file non esiste. Controlla che la destinazione esista e riprova.", + "ERROR_UPLOAD_205" : "La destinazione del file non è bloccata. Per favore attendi che ogni processo in corso sia termianto e riprova.", + "ERROR_UPLOAD_301" : "Non hai i permessi per caricare i file perchè non hai fatto il login. Inserisci nome utente e password e riprova.", + "ERROR_UPLOAD_303" : "Non hai i permessi per caricare i file. Se ti serve questa funzionalità contatta il tuo amministratore di sistema.", + "ERROR_UPLOAD_308" : "Il trasferimento di file si è fermato. Solitamente la causa è un problema di rete, ad esempio un segnale wifi instabile o una connesisone molto lenta. Controlla la tua rete e riprova.", + "ERROR_UPLOAD_31D" : "Ci sono troppi file in coda per il trasferimento. Attendi che siano completati i trasferimenti in atto e riprova.", + "ERROR_UPLOAD_DEFAULT" : "Si è verificato un errore sul server e la connessione è stata chiusa. Riprova o contatta il tuo amministratore di sistema.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Il testo copiato/tagliato appare qui. I cambiamenti effettuati al testo qui sotto saranno riportati negli appunti remoti.", + "HELP_INPUT_METHOD_NONE" : "Non c'è nessun metodo di immissione. L'input da tastiera è accettato da una tastiera fisica connessa.", + "HELP_INPUT_METHOD_OSK" : "Mostra e accetta input dalla tastiera su schermo. La tastiera su schermo ti permette di scrivere combinazioni di tasti altrimenti mipossibli (ad esempio Ctrl-Alt-Canc).", + "HELP_INPUT_METHOD_TEXT" : "Abilita la battitura di testo ed emula gli eventi da tastiera basati sul testo battuto. Questo è necessario per tablet e smartphone che non hanno una tastiera fisica.", + "HELP_MOUSE_MODE" : "Determina come si deve comportare il mouse remoto in base al touch.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Tap to click. Il click è sostituito dal tocco.", + "HELP_MOUSE_MODE_RELATIVE" : "Trascina il dito per muovere il puntatore del mouse e fai tap al posto del click. Il click sarà effettuato dove si trova il puntatore.", + + "INFO_NO_FILE_TRANSFERS" : "Nessun trasferimento di file.", + + "NAME_INPUT_METHOD_NONE" : "Nessuno", + "NAME_INPUT_METHOD_OSK" : "Tastiera su schermo", + "NAME_INPUT_METHOD_TEXT" : "Inserimento Testo", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Touchscreen", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Appunti", + "SECTION_HEADER_DEVICES" : "Dispositivi", + "SECTION_HEADER_DISPLAY" : "Schermo", + "SECTION_HEADER_FILE_TRANSFERS" : "Trasferimento file", + "SECTION_HEADER_INPUT_METHOD" : "Metodo di input", + "SECTION_HEADER_MOUSE_MODE" : "Modalità di emulazione del mouse", + + "TEXT_ZOOM_AUTO_FIT" : "Automatically fit to browser window", + "TEXT_CLIENT_STATUS_IDLE" : "Inattivo.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Connessione in corso a Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Sei stato disconnesso.", + "TEXT_CLIENT_STATUS_WAITING" : "Connesso a Guacamole. Attendi una risposta...", + "TEXT_RECONNECT_COUNTDOWN" : "Riconnessione in {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/it-it-qwerty.json" + + }, + + "FORM" : { + + "HELP_SHOW_PASSWORD" : "Click to show password", + "HELP_HIDE_PASSWORD" : "Click to hide password" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Nessuna connessione recente.", + + "PASSWORD_CHANGED" : "Password modificata.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Tutte le Connessioni", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Connessioni Recenti" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Nome utente e/o password errati.", + + "FIELD_HEADER_USERNAME" : "Username", + "FIELD_HEADER_PASSWORD" : "Password" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Elimina connessione", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Location:", + "FIELD_HEADER_NAME" : "Name:", + "FIELD_HEADER_PROTOCOL" : "Protocol:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Attiva adesso", + "INFO_CONNECTION_NOT_USED" : "Questa connessione non è mai stata usata.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Modifica Connessione", + "SECTION_HEADER_HISTORY" : "Cronologia di utilizzo", + "SECTION_HEADER_PARAMETERS" : "Parametri", + + "TABLE_HEADER_HISTORY_USERNAME" : "Username", + "TABLE_HEADER_HISTORY_START" : "Start Time", + "TABLE_HEADER_HISTORY_DURATION" : "Durata", + + "TEXT_CONFIRM_DELETE" : "Le Connessioni non possono essere ripristinate dopo la loro eliminazione. Sei sicuro di volere eliminare questa connessione?" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Elimina Gruppo di Connesisoni", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Location:", + "FIELD_HEADER_NAME" : "Nome:", + "FIELD_HEADER_TYPE" : "Tipo:", + + "NAME_TYPE_BALANCING" : "Bilanciamento", + "NAME_TYPE_ORGANIZATIONAL" : "Organizzazione", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Modifica Gruppo di Connessioni", + + "TEXT_CONFIRM_DELETE" : "Un Gruppo di Connessioni non può essere ripristinato dopo l'eliminazione. Sei sicuro di volere eliminare questa gruppo?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Name:", + + "SECTION_HEADER_PARAMETERS" : "Parametri" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Elimina utente", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Amministartore di sistema:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Cambia la tua password:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Crea un utente:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Crea una connessione:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Crea un ruppo di connessioni:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Username:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "SECTION_HEADER_CONNECTIONS" : "Connessioni", + "SECTION_HEADER_EDIT_USER" : "Modifica Utente", + "SECTION_HEADER_PERMISSIONS" : "Permessi", + + "TEXT_CONFIRM_DELETE" : "L'utente non può essere ripristinato dopo l'eliminazione. Sei sicuro di volere eliminare l'utente?" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_COLOR_DEPTH" : "Color depth:", + "FIELD_HEADER_CONSOLE" : "Administrator console:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Support audio in console:", + "FIELD_HEADER_CLIENT_NAME" : "Client name:", + "FIELD_HEADER_DISABLE_AUDIO" : "Disable audio:", + "FIELD_HEADER_DISABLE_AUTH" : "Disable authentication:", + "FIELD_HEADER_DOMAIN" : "Domain:", + "FIELD_HEADER_DPI" : "Resolution (DPI):", + "FIELD_HEADER_DRIVE_PATH" : "Drive path:", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Enable desktop composition (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Enable drive:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Enable font smoothing (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Enable full-window drag:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Enable menu animations:", + "FIELD_HEADER_ENABLE_PRINTING" : "Enable printing:", + "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Enable theming:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Enable wallpaper:", + "FIELD_HEADER_HEIGHT" : "Height:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_IGNORE_CERT" : "Ignore server certificate:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Initial program:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameters:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Working directory:", + "FIELD_HEADER_REMOTE_APP" : "Program:", + "FIELD_HEADER_SECURITY" : "Security mode:", + "FIELD_HEADER_SERVER_LAYOUT" : "Keyboard layout:", + "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Password:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Private key:", + "FIELD_HEADER_SFTP_USERNAME" : "Username:", + "FIELD_HEADER_STATIC_CHANNELS" : "Static channel names:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_WIDTH" : "Width:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_SECURITY_ANY" : "Any", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", + "FIELD_OPTION_SECURITY_RDP" : "RDP encryption", + "FIELD_OPTION_SECURITY_TLS" : "TLS encryption", + + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polacca (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Rumeno (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_BASIC_PARAMETERS" : "Basic Settings", + "SECTION_HEADER_CLIPBOARD" : "Appunti", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Device Redirection", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_PERFORMANCE" : "Performance", + "SECTION_HEADER_REMOTEAPP" : "RemoteApp", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_FONT_NAME" : "Font name:", + "FIELD_HEADER_FONT_SIZE" : "Font size:", + "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Private key:", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_CLIPBOARD" : "Appunti", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_FONT_NAME" : "Font name:", + "FIELD_HEADER_FONT_SIZE" : "Font size:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSWORD_REGEX" : "Password regular expression:", + "FIELD_HEADER_PORT" : "Port:", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_CLIPBOARD" : "Appunti", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_NETWORK" : "Network" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Audio server name:", + "FIELD_HEADER_COLOR_DEPTH" : "Color depth:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DEST_HOST" : "Destination host:", + "FIELD_HEADER_DEST_PORT" : "Destination port:", + "FIELD_HEADER_ENABLE_AUDIO" : "Enable audio:", + "FIELD_HEADER_ENABLE_SFTP" : "Enable SFTP:", + "FIELD_HEADER_HOSTNAME" : "Hostname:", + "FIELD_HEADER_USERNAME" : "Username:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Read-only:", + "FIELD_HEADER_SFTP_HOSTNAME" : "Hostname:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passphrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Password:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Private key:", + "FIELD_HEADER_SFTP_USERNAME" : "Username:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Swap red/blue components:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Local", + "FIELD_OPTION_CURSOR_REMOTE" : "Remote", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Audio", + "SECTION_HEADER_AUTHENTICATION" : "Authentication", + "SECTION_HEADER_CLIPBOARD" : "Appunti", + "SECTION_HEADER_DISPLAY" : "Display", + "SECTION_HEADER_NETWORK" : "Network", + "SECTION_HEADER_REPEATER" : "VNC Repeater", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Settings" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Nuova Connessione", + "ACTION_NEW_CONNECTION_GROUP" : "Nuovo Gruppo", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Fai click o tap sulla connessione qui sotto per gestire quella connessione. In base al tuo livello di accesso, le connessioni possono essere craete, eliminate, e le relative proprietà (protocol, hostname, port, etc.) possono essere cambiate.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Connessioni" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome della connessione", + "TABLE_HEADER_SESSION_STARTDATE" : "Start Time", + "TABLE_HEADER_SESSION_DURATION" : "Durata", + "TABLE_HEADER_SESSION_USERNAME" : "Username" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Lingua dell'interfaccia:", + "FIELD_HEADER_PASSWORD" : "Password:", + "FIELD_HEADER_PASSWORD_OLD" : "Password Attuale:", + "FIELD_HEADER_PASSWORD_NEW" : "Nuova Password:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Conferma Nuova Password:", + "FIELD_HEADER_USERNAME" : "Username:", + + "HELP_DEFAULT_INPUT_METHOD" : "The default input method determines how keyboard events are received by Guacamole. Changing this setting may be necessary when using a mobile device, or when typing through an IME. This setting can be overridden on a per-connection basis within the Guacamole menu.", + "HELP_DEFAULT_MOUSE_MODE" : "The default mouse emulation mode determines how the remote mouse will behave in new connections with respect to touches. This setting can be overridden on a per-connection basis within the Guacamole menu.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LANGUAGE" : "Select a different language below to change the language of all text within Guacamole. Available choices will depend on which languages are installed.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Se desideri cambiare la tua password, inserisci la tua password attuale e sotto scriti quella che desideri come nuova password, clicca \"Modifica Password\". La modifica avrà effetto immediato.", + + "INFO_PASSWORD_CHANGED" : "Password Modificata.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Default Input Method", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Default Mouse Emulation Mode", + "SECTION_HEADER_UPDATE_PASSWORD" : "Modifica Password" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Nuovo utente", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Click or tap on a user below to manage that user. Depending on your access level, users can be added and deleted, and their passwords can be changed.", + + "SECTION_HEADER_USERS" : "Utenti", + + "TABLE_HEADER_USERNAME" : "Username" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Termian Sessione", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Termina Sessione", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Questa pagina verrà popolata con connessioni attualmente attive. Le connessioni elencate e la possibilità di uccidere tali connessioni dipende dal tuo livello di accesso. Se desideri uccidere una o più sessioni, seleziona la casella accanto a quelle sessioni e fai clic su \"Uccidi sessioni \". L'uccisione di una sessione interromperà immediatamente l'utente dalla connessione associata.", + + "INFO_NO_SESSIONS" : "Nessuna sessione attiva", + + "SECTION_HEADER_SESSIONS" : "Sessioni Attive", + + "TABLE_HEADER_SESSION_USERNAME" : "Username", + "TABLE_HEADER_SESSION_STARTDATE" : "Attivo da", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Remote host", + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome della connessione", + + "TEXT_CONFIRM_DELETE" : "Sei sicuro di voler termianre la sessione selezionata? L'utente che sta utilizzando questa sessione sarà immediatamente disconnesso." + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ja.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ja.json new file mode 100644 index 0000000000..e4c2ad0c4b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ja.json @@ -0,0 +1,841 @@ +{ + + "NAME" : "日本語", + + "APP" : { + + "ACTION_CANCEL" : "キャンセル", + "ACTION_CLONE" : "コピー", + "ACTION_CONTINUE" : "次へ", + "ACTION_DELETE" : "削除", + "ACTION_DELETE_SESSIONS" : "セッションの切断", + "ACTION_DOWNLOAD" : "ダウンロード", + "ACTION_LOGIN" : "ログイン", + "ACTION_LOGOUT" : "ログアウト", + "ACTION_MANAGE_CONNECTIONS" : "接続", + "ACTION_MANAGE_PREFERENCES" : "ユーザ設定", + "ACTION_MANAGE_SETTINGS" : "設定", + "ACTION_MANAGE_SESSIONS" : "アクティブなセッション", + "ACTION_MANAGE_USERS" : "ユーザ", + "ACTION_MANAGE_USER_GROUPS" : "グループ", + "ACTION_NAVIGATE_BACK" : "戻る", + "ACTION_NAVIGATE_HOME" : "ホーム", + "ACTION_SAVE" : "保存", + "ACTION_SEARCH" : "検索", + "ACTION_SHARE" : "シェア", + "ACTION_UPDATE_PASSWORD" : "パスワードの更新", + "ACTION_VIEW_HISTORY" : "履歴", + + "DIALOG_HEADER_ERROR" : "エラー", + + "ERROR_PAGE_UNAVAILABLE" : "エラーが発生したため、この操作を完了できませんでした。問題が解決しない場合は、システム管理者に連絡するか、システムログを確認してください。", + + "ERROR_PASSWORD_BLANK" : "パスワードが入力されていません。", + "ERROR_PASSWORD_MISMATCH" : "パスワードが一致しません。", + + "FIELD_HEADER_PASSWORD" : "パスワード:", + "FIELD_HEADER_PASSWORD_AGAIN" : "パスワード確認:", + + "FIELD_PLACEHOLDER_FILTER" : "フィルタ", + + "INFO_ACTIVE_USER_COUNT" : "現在以下のユーザが利用中です。 {USERS} {USERS, plural, one{user} other{users}}.", + + "TEXT_ANONYMOUS_USER" : "匿名ユーザ" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "クリア", + "ACTION_DISCONNECT" : "切断", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "再接続", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "ファイルアップロード", + + "DIALOG_HEADER_CONNECTING" : "接続", + "DIALOG_HEADER_CONNECTION_ERROR" : "接続エラー", + "DIALOG_HEADER_DISCONNECTED" : "切断", + + "ERROR_CLIENT_201": "サーバーがビジー状態のため、この接続は切断されました。数分待ってからもう一度お試しください。", + "ERROR_CLIENT_202": "リモートデスクトップの応答に時間がかかりすぎるため、Guacamoleサーバが接続を切断しました。再試行するか、システム管理者に連絡してください。", + "ERROR_CLIENT_203": "リモートデスクトップサーバーでエラーが発生し、接続を切断しました。再試行するかシステム管理者に連絡してください。", + "ERROR_CLIENT_207": "現在リモートデスクトップサーバーにアクセスできません。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", + "ERROR_CLIENT_208": "リモートデスクトップサーバーは現在利用できません。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", + "ERROR_CLIENT_209": "リモートデスクトップサーバーが他の接続と競合しています。後でもう一度やり直してください。", + "ERROR_CLIENT_20A": "リモートデスクトップサーバーが停止しているため接続を閉じました。システム管理者に連絡するか、システム設定を確認してください。", + "ERROR_CLIENT_20B": "リモートデスクトップサーバーが強制的に接続を切断しました。システム管理者に連絡するか、システムログを確認してください。", + "ERROR_CLIENT_301": "ログインに失敗しました。再接続してからもう一度お試しください。", + "ERROR_CLIENT_303": "リモートデスクトップサーバーがこの接続へのアクセスを拒否しました。アクセスが必要な場合は、システム管理者にアカウントのアクセスを許可を依頼するか、システム設定を確認してください。", + "ERROR_CLIENT_308": "ブラウザからの応答が十分でないため、Guacamoleサーバーが接続を切断しました。これは一般的にネットワークの問題が原因です。ネットワークの状態を確認して、もう一度やり直してください。 ", + "ERROR_CLIENT_31D": "同時接続の使用制限に達したため、Guacamoleサーバーはこの接続へのアクセスを拒否しています。1つ以上の接続を閉じてからやり直してください。", + "ERROR_CLIENT_DEFAULT": "Guacamoleサーバ内で内部エラーが発生し、接続が終了しました。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", + + "ERROR_TUNNEL_201": "アクティブな接続が多すぎるため、Guacamoleサーバーはこの接続を拒否しました。数分待ってからもう一度お試しください。", + "ERROR_TUNNEL_202": "サーバーの応答に時間がかかりすぎるため、接続が切断されました。通常はネットワーク問題によって引き起こされます。", + "ERROR_TUNNEL_203": "サーバーでエラーが発生し、接続を切断しました。再試行するかシステム管理者に連絡してください。", + "ERROR_TUNNEL_204": "指定された接続は存在しません。接続名を確認してもう一度やり直してください。", + "ERROR_TUNNEL_205": "この接続は現在使用中です。同時アクセスは許可されていません。後ほどやり直してください。", + "ERROR_TUNNEL_207": "現在Guacamoleサーバーにアクセスできません。ネットワークの状態を確認してもう一度やり直してください。", + "ERROR_TUNNEL_208": "Guacamoleサーバーは接続を受け付けていません。ネットワークの状態を確認してもう一度やり直してください。", + "ERROR_TUNNEL_301": "あなたはログインしていないため、この接続にアクセスする権限がありません。ログインしてからやり直してください。", + "ERROR_TUNNEL_303": "この接続にアクセスする権限がありません。アクセスが必要な場合は、システム管理者に許可を依頼するか、システム設定を確認してください。", + "ERROR_TUNNEL_308": "ブラウザからの応答がないため、Guacamoleサーバーが接続を切断しました。一般的にネットワークの問題が原因です。ネットワークの状態を確認して、もう一度やり直してください。 ", + "ERROR_TUNNEL_31D": "同時接続の使用制限に達したため、Guacamoleサーバーはこの接続へのアクセスを拒否しています。1つ以上の接続を閉じてからやり直してください。", + "ERROR_TUNNEL_DEFAULT": "Guacamoleサーバー内で内部エラーが発生し、接続が終了しました。問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", + + "ERROR_UPLOAD_100": "ファイル転送がサポートされていないか有効になっていません。システム管理者に連絡するか、システムログを確認してください。", + "ERROR_UPLOAD_201": "現在転送中のファイルが多すぎます。転送が完了するのを待ってからやり直してください。", + "ERROR_UPLOAD_202": "リモートデスクトップサーバーの応答に時間がかかりすぎるため、ファイルを転送できません。やりなおすかシステム管理者に連絡してください。", + "ERROR_UPLOAD_203": "転送中にリモートデスクトップサーバーでエラーが発生しました。もう一度やり直すか、システム管理者に連絡してください。", + "ERROR_UPLOAD_204": "ファイル転送先が存在しません。宛先が存在することを確認してやり直してください。", + "ERROR_UPLOAD_205": "ファイル転送先は現在ロックされています。進行中のタスクが完了するのを待ってからやり直してください。 ", + "ERROR_UPLOAD_301": "あなたはログインしていないため、このファイルをアップロードする権限がありません。ログインしてからやり直してください。", + "ERROR_UPLOAD_303": "このファイルをアップロードする権限がありません。アクセスが必要な場合は、システム設定を確認するか、システム管理者に確認してください。", + "ERROR_UPLOAD_308": "ファイル転送が停止しています。これは一般的にネットワーク速度が非常に遅いなどのネットワークの問題が原因で発生します。", + "ERROR_UPLOAD_31D": "現在転送中のファイルが多すぎます。転送が完了するのを待ってからやり直してください。", + "ERROR_UPLOAD_DEFAULT": "Guacamoleサーバ内で内部エラーが発生し、接続が終了しました。それでも問題が解決しない場合、システム管理者に連絡するか、システムログを確認してください。", + + "HELP_CLIPBOARD": "Guacamole内でコピー/カットされたテキストがここに表示されます。以下のテキストを変更するとリモートクリップボードに影響します。 ", + "HELP_INPUT_METHOD_NONE": "入力方法は指定されていません。キーボード入力は接続された物理的なキーボードから受け付けられます。 ", + "HELP_INPUT_METHOD_OSK": "内蔵のGuacamoleオンスクリーンキーボードからの入力を表示し、受け入れます。オンスクリーンキーボードを使用すると、不可能な場合もあるキーの組み合わせを入力できます(Ctrl-Alt-Delなど)。", + "HELP_INPUT_METHOD_TEXT": "テキストの入力を許可し、入力されたテキストに基づいてキーボードイベントをエミュレートします。これはスマートフォンのような物理的なキーボードがない機器に必要です。 ", + "HELP_MOUSE_MODE": "タッチに対するリモートマウスの動作を決定します。 ", + "HELP_MOUSE_MODE_ABSOLUTE": "タッチによってクリックを行います。タッチの位置でクリックしたとみなされます。 ", + "HELP_MOUSE_MODE_RELATIVE": "マウスポインタをドラッグしてからクリックします。マウスポインタの位置でクリックしたとみなされます。 ", + "HELP_SHARE_LINK": "現在の接続は共有されており、次の{LINKS、multiple、one {link} other {links}}を持つ人なら誰でもアクセスできます:", + + "INFO_CONNECTION_SHARED": "この接続は現在共有されています。", + "INFO_NO_FILE_TRANSFERS": "ファイル転送はありません。", + + + "NAME_INPUT_METHOD_NONE" : "なし", + "NAME_INPUT_METHOD_OSK" : "オンスクリーンキーボード", + "NAME_INPUT_METHOD_TEXT" : "テキストインプット", + "NAME_MOUSE_MODE_ABSOLUTE" : "タッチスクリーン", + "NAME_MOUSE_MODE_RELATIVE" : "タッチパッド", + + "SECTION_HEADER_CLIPBOARD" : "クリップボード", + "SECTION_HEADER_DEVICES" : "デバイス", + "SECTION_HEADER_DISPLAY" : "ディスプレイ", + "SECTION_HEADER_FILE_TRANSFERS" : "ファイル転送", + "SECTION_HEADER_INPUT_METHOD" : "インプットメソッド", + "SECTION_HEADER_MOUSE_MODE" : "マウスエミュレートモード", + + "TEXT_ZOOM_AUTO_FIT" : "自動的にブラウザのサイズに合わせる", + "TEXT_CLIENT_STATUS_IDLE" : "アイドル状態.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Guacamoleサーバに接続しています...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "切断されました。", + "TEXT_CLIENT_STATUS_UNSTABLE" : "Guacamoleサーバへのネットワーク接続が不安定です。", + "TEXT_CLIENT_STATUS_WAITING" : "Guacamoleサーバに接続しました。応答を待っています", + "TEXT_RECONNECT_COUNTDOWN" : "再接続しています... {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", + "TEXT_CLIPBOARD_AWAITING_FOCUS" : "クリックをしてコピー/カットされたテキストが表示されます..." + + }, + + "FORM" : { + + "HELP_SHOW_PASSWORD" : "パスワードを見る", + "HELP_HIDE_PASSWORD" : "パスワードを隠す" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "最近の接続情報はありません。", + + "PASSWORD_CHANGED" : "パスワードが変更されました。", + + "SECTION_HEADER_ALL_CONNECTIONS" : "全ての接続情報", + "SECTION_HEADER_RECENT_CONNECTIONS" : "最近の接続情報" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "匿名" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "不正なログインです。", + + "FIELD_HEADER_USERNAME" : "ユーザ名", + "FIELD_HEADER_PASSWORD" : "パスワード" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "接続の削除", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "ロケーション:", + "FIELD_HEADER_NAME" : "名前:", + "FIELD_HEADER_PROTOCOL" : "プロトコル:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "アクティブにする", + "INFO_CONNECTION_NOT_USED" : "この接続はまだ使用されていません。", + + "SECTION_HEADER_EDIT_CONNECTION" : "接続の編集", + "SECTION_HEADER_HISTORY" : "使用履歴", + "SECTION_HEADER_PARAMETERS" : "パラメータ", + + "TABLE_HEADER_HISTORY_USERNAME" : "ユーザ名", + "TABLE_HEADER_HISTORY_START" : "開始時間", + "TABLE_HEADER_HISTORY_DURATION" : "期間", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "接続元", + + "TEXT_CONFIRM_DELETE" : "削除した接続は元に戻せません。この接続を削除してもよろしいですか?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "接続グループの削除", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "ロケーション:", + "FIELD_HEADER_NAME" : "名前:", + "FIELD_HEADER_TYPE" : "タイプ:", + + "NAME_TYPE_BALANCING" : "バランシング", + "NAME_TYPE_ORGANIZATIONAL" : "組織", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "接続グループの編集", + + "TEXT_CONFIRM_DELETE" : "接続グループを削除した後に復元することはできません。この接続グループを削除してもよろしいですか?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "共有プロファイルの削除", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "名前:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "プライマリ接続:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "共有プロファイルの編集", + "SECTION_HEADER_PARAMETERS" : "パラメータ", + + "TEXT_CONFIRM_DELETE" : "削除した共有プロファイルは復元できません。この共有プロファイルを削除してもよろしいですか?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "ユーザ削除", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "システム管理者:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "自身のパスワードの変更:", + "FIELD_HEADER_CREATE_NEW_USERS" : "ユーザの作成:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "ユーザグループの作成:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "接続の作成:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "接続グループの作成:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "共有プロファイルの作成:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "ユーザ名:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "このユーザーは現在どのグループにも属していません。このセクションを展開してグループを追加してください。", + + "INFO_READ_ONLY" : "このユーザは編集できません。", + "INFO_NO_USER_GROUPS_AVAILABLE" : "利用可能なグループがありません。", + + "SECTION_HEADER_ALL_CONNECTIONS" : "すべての接続", + "SECTION_HEADER_CONNECTIONS" : "接続", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "現在の接続", + "SECTION_HEADER_EDIT_USER" : "ユーザの編集", + "SECTION_HEADER_PERMISSIONS" : "権限", + "SECTION_HEADER_USER_GROUPS" : "グループ", + + "TEXT_CONFIRM_DELETE" : "削除したユーザーは元に戻せません。このユーザーを削除してもよろしいですか?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "グループの削除", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "グループ名:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "このグループは現在どのグループにも属していません。グループを追加するにはこのセクションを展開してください。", + "HELP_NO_MEMBER_USER_GROUPS" : "このグループには現在グループが含まれていません。このセクションを展開してグループを追加してください。", + "HELP_NO_MEMBER_USERS" : "このグループには現在ユーザーが含まれていません。ユーザーを追加するにはこのセクションを展開してください。", + + "INFO_READ_ONLY" : "このグループは編集できません", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "利用可能なユーザがいません。", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "グループ編集", + "SECTION_HEADER_MEMBER_USERS" : "メンバーユーザ", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "メンバーグループ", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "親グループ", + + "TEXT_CONFIRM_DELETE" : "削除したグループは復元できません。このグループを削除してもよろしいですか?" + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Backspaceキーの送信:", + "FIELD_HEADER_CA_CERT" : "認証局証明書:", + "FIELD_HEADER_CLIENT_CERT" : "クライアント証明書:", + "FIELD_HEADER_CLIENT_KEY" : "クライアントの秘密鍵:", + "FIELD_HEADER_COLOR_SCHEME" : "カラースキーマ:", + "FIELD_HEADER_CONTAINER" : "コンテナ名:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリを自動的に作成する:", + "FIELD_HEADER_FONT_NAME" : "フォント名:", + "FIELD_HEADER_FONT_SIZE" : "フォントサイズ:", + "FIELD_HEADER_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_IGNORE_CERT" : "サーバ証明書を無視:", + "FIELD_HEADER_NAMESPACE" : "名前空間:", + "FIELD_HEADER_POD" : "ポッド名:", + "FIELD_HEADER_PORT" : "ポート:", + "FIELD_HEADER_READ_ONLY" : "読み取り専用:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", + "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", + "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", + "FIELD_HEADER_SCROLLBACK" : "スクロールバックサイズの最大値:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "タイプスクリプト名:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリ:", + "FIELD_HEADER_USE_SSL" : "SSL/TLS の利用", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "認証", + "SECTION_HEADER_BEHAVIOR" : "ターミナルのふるまい", + "SECTION_HEADER_CONTAINER" : "コンテナ", + "SECTION_HEADER_DISPLAY" : "ディスプレイ", + "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", + "SECTION_HEADER_TYPESCRIPT" : "タイプスクリプト (テキストの記録)", + "SECTION_HEADER_NETWORK" : "ネットワーク" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "クライアント名:", + "FIELD_HEADER_COLOR_DEPTH" : "カラー深度:", + "FIELD_HEADER_CONSOLE" : "管理者コンソール:", + "FIELD_HEADER_CONSOLE_AUDIO" : "コンソールでの音声サポート:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "ドライブの自動作成:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", + "FIELD_HEADER_DISABLE_AUDIO" : "オーディオの無効化:", + "FIELD_HEADER_DISABLE_AUTH" : "認証の無効化:", + "FIELD_HEADER_DISABLE_COPY" : "リモートデスクトップからのコピーを無効化:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", + "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", + "FIELD_HEADER_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", + "FIELD_HEADER_DOMAIN" : "ドメイン:", + "FIELD_HEADER_DPI" : "解像度 (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "ドライブ名:", + "FIELD_HEADER_DRIVE_PATH" : "ドライブパス:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "入力オーディオ(マイク)の有効化:", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "デスクトップコンポジション(Aero)の有効化:", + "FIELD_HEADER_ENABLE_DRIVE" : "ドライブの有効化:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "クリアタイプフォントの有効化:", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "フルウィンドウドラッグの有効化:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "メニューアニメーションの有効化:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "ビットマップキャッシュの無効化:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "オフスクリーンキャッシュの無効化:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "グリフキャッシュの無効化:", + "FIELD_HEADER_ENABLE_PRINTING" : "印刷の有効化:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTPの有効化:", + "FIELD_HEADER_ENABLE_THEMING" : "テーマの有効化:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "壁紙の有効化:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "ドメイン:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "パスワード:", + "FIELD_HEADER_GATEWAY_PORT" : "ポート:", + "FIELD_HEADER_GATEWAY_USERNAME" : "ユーザ名:", + "FIELD_HEADER_HEIGHT" : "高さ:", + "FIELD_HEADER_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_IGNORE_CERT" : "サーバ証明書を無視する:", + "FIELD_HEADER_INITIAL_PROGRAM" : "初期化プログラム:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "ロードバランス情報/クッキー:", + "FIELD_HEADER_PASSWORD" : "パスワード:", + "FIELD_HEADER_PORT" : "ポート:", + "FIELD_HEADER_PRINTER_NAME" : "リダイレクトされたプリンタ名:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "事前接続BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDPソースID:", + "FIELD_HEADER_READ_ONLY" : "読み取り専用:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", + "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", + "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", + "FIELD_HEADER_RESIZE_METHOD" : "サイズ変更方法:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "パラメータ:", + "FIELD_HEADER_REMOTE_APP_DIR" : "作業ディレクトリ:", + "FIELD_HEADER_REMOTE_APP" : "プログラム:", + "FIELD_HEADER_SECURITY" : "セキュリティモード:", + "FIELD_HEADER_SERVER_LAYOUT" : "キーボードレイアウト:", + "FIELD_HEADER_SFTP_DIRECTORY" : "デフォルトアップロードディレクトリ:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", + "FIELD_HEADER_SFTP_HOST_KEY" : "パブリックホストキー (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTPキープアライブ間隔:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "パスフレーズ:", + "FIELD_HEADER_SFTP_PASSWORD" : "パスワード:", + "FIELD_HEADER_SFTP_PORT" : "ポート:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "秘密鍵:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "ファイルブラウザのルートディレクトリ:", + "FIELD_HEADER_SFTP_USERNAME" : "ユーザ名:", + "FIELD_HEADER_STATIC_CHANNELS" : "静的チャンネル名:", + "FIELD_HEADER_TIMEZONE" : "タイムゾーン:", + "FIELD_HEADER_USERNAME" : "ユーザ名:", + "FIELD_HEADER_WIDTH" : "幅:", + + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", + "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", + "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Lowカラー (16ビット)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Trueカラー (24ビット)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Trueカラー (32ビット)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256カラー", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"ディスプレイアップデート\" 仮想チャンネル (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "再接続", + + "SECTION_HEADER_AUTHENTICATION" : "認証", + "SECTION_HEADER_BASIC_PARAMETERS" : "基本設定", + "SECTION_HEADER_CLIPBOARD" : "クリップボード", + "SECTION_HEADER_DEVICE_REDIRECTION" : "デバイスリダイレクト", + "SECTION_HEADER_DISPLAY" : "ディスプレイ", + "SECTION_HEADER_GATEWAY" : "リモートデスクトップゲートウェイ", + "SECTION_HEADER_LOAD_BALANCING" : "ロードバラシング", + "SECTION_HEADER_NETWORK" : "ネットワーク", + "SECTION_HEADER_PERFORMANCE" : "パフォーマンス", + "SECTION_HEADER_PRECONNECTION_PDU" : "事前接続 PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", + "SECTION_HEADER_REMOTEAPP" : "リモートアプリケーション" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Backspaceキーの送信:", + "FIELD_HEADER_COLOR_SCHEME" : "カラースキーマ:", + "FIELD_HEADER_COMMAND" : "コマンドの実行:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリを自動的に作成する:", + "FIELD_HEADER_DISABLE_COPY" : "端末からのコピーを無効化:", + "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", + "FIELD_HEADER_FONT_NAME" : "フォント名:", + "FIELD_HEADER_FONT_SIZE" : "フォントサイズ:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTPの有効化:", + "FIELD_HEADER_HOST_KEY" : "公開鍵(Base64):", + "FIELD_HEADER_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_LOCALE" : "言語/ロケール ($LANG):", + "FIELD_HEADER_USERNAME" : "ユーザ名:", + "FIELD_HEADER_PASSWORD" : "パスワード:", + "FIELD_HEADER_PASSPHRASE" : "パスフレーズ:", + "FIELD_HEADER_PORT" : "ポート:", + "FIELD_HEADER_PRIVATE_KEY" : "秘密鍵:", + "FIELD_HEADER_SCROLLBACK" : "スクロールバックサイズの最大値:", + "FIELD_HEADER_READ_ONLY" : "読み取り専用:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", + "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", + "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "キープアライブ間隔:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "ファイルブラウザのルートディレクトリ:", + "FIELD_HEADER_TERMINAL_TYPE" : "ターミナルタイプ:", + "FIELD_HEADER_TIMEZONE" : "タイムゾーン ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "タイプスクリプト名:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリ:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", + "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", + "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", + + "SECTION_HEADER_AUTHENTICATION" : "認証", + "SECTION_HEADER_BEHAVIOR" : "ターミナルのふるまい", + "SECTION_HEADER_CLIPBOARD" : "クリップボード", + "SECTION_HEADER_DISPLAY" : "ディスプレイ", + "SECTION_HEADER_NETWORK" : "ネットワーク", + "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", + "SECTION_HEADER_SESSION" : "セッション / 環境", + "SECTION_HEADER_TYPESCRIPT" : "タイプスクリプト (テキストの記録)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Backspaceキーの送信:", + "FIELD_HEADER_COLOR_SCHEME" : "カラースキーマ:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "タイプスクリプトの保存ディレクトリを自動的に作成する:", + "FIELD_HEADER_DISABLE_COPY" : "端末からのコピーを無効化:", + "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", + "FIELD_HEADER_FONT_NAME" : "フォント名:", + "FIELD_HEADER_FONT_SIZE" : "フォントサイズ:", + "FIELD_HEADER_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "ログイン失敗正規表現:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "ログイン成功正規表現:", + "FIELD_HEADER_USERNAME" : "ユーザ名:", + "FIELD_HEADER_USERNAME_REGEX" : "ユーザ名正規表現:", + "FIELD_HEADER_PASSWORD" : "パスワード:", + "FIELD_HEADER_PASSWORD_REGEX" : "パスワード正規表現:", + "FIELD_HEADER_PORT" : "ポート:", + "FIELD_HEADER_READ_ONLY" : "読み取り専用:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", + "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", + "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", + "FIELD_HEADER_SCROLLBACK" : "スクロールバックサイズの最大値:", + "FIELD_HEADER_TERMINAL_TYPE" : "ターミナルタイプ:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "タイプスクリプト名:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "タイプスクリプト保存ディレクトリ:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", + "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", + "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", + + "SECTION_HEADER_AUTHENTICATION" : "認証", + "SECTION_HEADER_BEHAVIOR" : "ターミナルのふるまい", + "SECTION_HEADER_CLIPBOARD" : "クリップボード", + "SECTION_HEADER_DISPLAY" : "ディスプレイ", + "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", + "SECTION_HEADER_TYPESCRIPT" : "タイプスクリプト (テキストの記録)", + "SECTION_HEADER_NETWORK" : "ネットワーク" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "オーディオサーバ名:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "エンコード:", + "FIELD_HEADER_COLOR_DEPTH" : "カラー深度:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "ログの保存ディレクトリを自動的に作成する::", + "FIELD_HEADER_CURSOR" : "カーソル:", + "FIELD_HEADER_DEST_HOST" : "宛先ホスト:", + "FIELD_HEADER_DEST_PORT" : "宛先ポート:", + "FIELD_HEADER_DISABLE_COPY" : "リモートデスクトップからのコピーを無効化:", + "FIELD_HEADER_DISABLE_PASTE" : "クライアントからの貼り付けを無効化:", + "FIELD_HEADER_ENABLE_AUDIO" : "オーディオの有効化:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTPの有効化:", + "FIELD_HEADER_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_USERNAME" : "ユーザ名:", + "FIELD_HEADER_PASSWORD" : "パスワード:", + "FIELD_HEADER_PORT" : "ポート:", + "FIELD_HEADER_READ_ONLY" : "読み取り専用:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "マウス動作の除外:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "画像/ストリームの除外:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "キーイベントの取得:", + "FIELD_HEADER_RECORDING_NAME" : "ログファイル名:", + "FIELD_HEADER_RECORDING_PATH" : "ログ保存ディレクトリ:", + "FIELD_HEADER_SFTP_DIRECTORY" : "デフォルトアップロードディレクトリ:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "ファイルのダウンロードを無効化:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "ファイルのアップロードを無効化:", + "FIELD_HEADER_SFTP_HOST_KEY" : "公開鍵 (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "ホスト名:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTPキープアライブ間隔:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "パスフレーズ:", + "FIELD_HEADER_SFTP_PASSWORD" : "パスワード:", + "FIELD_HEADER_SFTP_PORT" : "ポート:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "秘密鍵:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "ファイルブラウザのルートディレクトリ:", + "FIELD_HEADER_SFTP_USERNAME" : "ユーザ名:", + "FIELD_HEADER_SWAP_RED_BLUE" : "レッド・ブルー コンポーネントスワップ:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoLパケットを送信するブロードキャストアドレス:", + "FIELD_HEADER_WOL_MAC_ADDR" : "WoLパケットで使用するMACアドレス:", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoLパケットの送信を有効化:", + "FIELD_HEADER_WOL_WAIT_TIME" : "WoLパケット送信後の接続までの待機時間:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256カラー", + "FIELD_OPTION_COLOR_DEPTH_16" : "Lowカラー (16ビット)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Trueカラー (24ビット)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Trueカラー (32ビット)", + + "FIELD_OPTION_CURSOR_LOCAL" : "ローカル", + "FIELD_OPTION_CURSOR_REMOTE" : "リモート", + + "SECTION_HEADER_AUDIO" : "オーティオ", + "SECTION_HEADER_AUTHENTICATION" : "認証", + "SECTION_HEADER_CLIPBOARD" : "クリップボード", + "SECTION_HEADER_DISPLAY" : "ディスプレイ", + "SECTION_HEADER_NETWORK" : "ネットワーク", + "SECTION_HEADER_RECORDING" : "スクリーンレコーディング", + "SECTION_HEADER_REPEATER" : "VNCリピーター" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "設定" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "過去の接続履歴はここに表示されています。列の見出しをクリックしてソートすることができます。特定のレコードを検索するにはフィルタに検索キーワードを入力して、検索ボタンをクリックしてください。", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "一致するレコードがありません。", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "接続名", + "TABLE_HEADER_SESSION_DURATION" : "期間", + "TABLE_HEADER_SESSION_REMOTEHOST" : "接続元", + "TABLE_HEADER_SESSION_STARTDATE" : "開始時間", + "TABLE_HEADER_SESSION_USERNAME" : "ユーザ名", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "接続の追加", + "ACTION_NEW_CONNECTION_GROUP" : "グループの追加", + "ACTION_NEW_SHARING_PROFILE" : "共有プロファイルの追加", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "接続をクリックまたはタップすることで、管理画面が表示されます。権限に応じて接続のプロパティが変更できます。", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "接続" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "表示言語:", + "FIELD_HEADER_PASSWORD" : "パスワード:", + "FIELD_HEADER_PASSWORD_OLD" : "現在のパスワード:", + "FIELD_HEADER_PASSWORD_NEW" : "新しいパスワード:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "新しいパスワード(確認):", + "FIELD_HEADER_TIMEZONE" : "タイムゾーン:", + "FIELD_HEADER_USERNAME" : "ユーザ名:", + + "HELP_DEFAULT_INPUT_METHOD" : "デフォルトの入力メソッドは、Guacamoleがどのようにキーボード入力を受け取るかを設定します。この設定の変更は、モバイルデバイスまたはIMEを通して入力を行う際に必要です。", + "HELP_DEFAULT_MOUSE_MODE" : "デフォルトのマウスエミュレーションモードは、タッチに関して新しい接続でリモートマウスがどのように動作するかを決定します。この設定は、Guacamoleメニュー内で接続ごとに上書きすることができます。", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Guacamoleの言語を変更するには、下の言語を選択してください。選択可能な言語は、インストールされている言語によって異なります。", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "パスワードを変更する場合は、下に現在のパスワードと新しいパスワードを入力して、[パスワードの更新]をクリックしてください。変更はすぐに有効になります。", + + "INFO_PASSWORD_CHANGED" : "パスワードが変更されました。", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "デフォルトの入力方法", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "デフォルトのマウスエミュレーションモード", + "SECTION_HEADER_UPDATE_PASSWORD" : "パスワード変更" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "ユーザ追加", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "ユーザをクリックまたはタップすることで、ユーザを管理できます。権限に応じてユーザ情報の変更を行うことができます。", + + "SECTION_HEADER_USERS" : "ユーザ", + + "TABLE_HEADER_FULL_NAME" : "フルネーム", + "TABLE_HEADER_LAST_ACTIVE" : "最後にアクティブになった時期", + "TABLE_HEADER_ORGANIZATION" : "組織", + "TABLE_HEADER_USERNAME" : "ユーザ名" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "グループ追加", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "グループをクリックまたはタップすることで、グループを管理できます。権限に応じてグループ情報の変更を行うことができます。", + + "SECTION_HEADER_USER_GROUPS" : "グループ", + + "TABLE_HEADER_USER_GROUP_NAME" : "グループ名" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "強制切断", + + "DIALOG_HEADER_CONFIRM_DELETE" : "セッションの強制切断", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Guacamoleのアクティブなセッションが全て表示されています。 もしセッションを強制切断したい場合、 チェックボックスにチェックを入れて、強制切断ボタンをクリックしてください。", + + "INFO_NO_SESSIONS" : "アクティブセッションはありません", + + "SECTION_HEADER_SESSIONS" : "アクティブセッション", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "接続名", + "TABLE_HEADER_SESSION_REMOTEHOST" : "接続元", + "TABLE_HEADER_SESSION_USERNAME" : "ユーザ名", + + "TEXT_CONFIRM_DELETE" : "選択したすべてのセッションを強制終了しますか?これらのセッションを使用しているユーザーは直ちに切断されます。" + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "メールアドレス:", + "FIELD_HEADER_GUAC_FULL_NAME" : "名前:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "組織:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "役職/役割:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ko.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ko.json new file mode 100644 index 0000000000..957b3b571e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ko.json @@ -0,0 +1,991 @@ +{ + + "NAME" : "한국어", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "확인", + "ACTION_CANCEL" : "취소", + "ACTION_CLONE" : "복제", + "ACTION_CONTINUE" : "계속", + "ACTION_DELETE" : "삭제", + "ACTION_DELETE_SESSIONS" : "세션 종료", + "ACTION_DOWNLOAD" : "다운로드", + "ACTION_LOGIN" : "로그인", + "ACTION_LOGOUT" : "로그아웃", + "ACTION_MANAGE_CONNECTIONS" : "연결", + "ACTION_MANAGE_PREFERENCES" : "기본 설정", + "ACTION_MANAGE_SETTINGS" : "세팅", + "ACTION_MANAGE_SESSIONS" : "활성화된 세션", + "ACTION_MANAGE_USERS" : "사용자", + "ACTION_MANAGE_USER_GROUPS" : "그룹", + "ACTION_NAVIGATE_BACK" : "뒤로가기", + "ACTION_NAVIGATE_HOME" : "홈", + "ACTION_SAVE" : "저장", + "ACTION_SEARCH" : "검색", + "ACTION_SHARE" : "공유", + "ACTION_UPDATE_PASSWORD" : "패스워드 업데이트", + "ACTION_VIEW_HISTORY" : "히스토리", + + "DIALOG_HEADER_ERROR" : "에러", + + "ERROR_PAGE_UNAVAILABLE" : "에러가 발생해 동작이 완료될 수 없습니다. 문제가 계속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + "ERROR_PASSWORD_BLANK" : "패스워드는 공백이 될 수 없습니다.", + "ERROR_PASSWORD_MISMATCH" : "패스워드가 일치하지 않습니다.", + + "FIELD_HEADER_PASSWORD" : "패스워드:", + "FIELD_HEADER_PASSWORD_AGAIN" : "패스워드 재입력:", + + "FIELD_PLACEHOLDER_FILTER" : "필터", + + "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "현재 {USERS} 사용자에 의해 사용중입니다.}.", + + "TEXT_ANONYMOUS_USER" : "익명", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{초} minute{분} hour{시} day{일} other{}}", + "TEXT_UNTRANSLATED" : "{MESSAGE}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "지우기", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_DISCONNECT" : "연결 해제", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "다시 연결", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "파일 업로드", + + "DIALOG_HEADER_CONNECTING" : "연결 중", + "DIALOG_HEADER_CONNECTION_ERROR" : "연결 오류", + "DIALOG_HEADER_DISCONNECTED" : "연결 끊김", + + "ERROR_CLIENT_201" : "서버 사용량이 많아 연결이 종료되었습니다. 몇 분 후에 다시 시도하십시요.", + "ERROR_CLIENT_202" : "원격 데스크톱이 응답하는데 너무 오래걸려서 Guacamole 서버가 연결을 닫았습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", + "ERROR_CLIENT_203" : "원격 데스크톱 서버에 오류가 발생해서 연결을 닫았습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", + "ERROR_CLIENT_207" : "원격 데스크톱 서버에 현재 연결할 수 없습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + "ERROR_CLIENT_208" : "원격 데스크톱 서버를 현재 사용 할 수 없습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + "ERROR_CLIENT_209" : "다른 연결과 충돌해서 원격 데스크톱 서버가 연결을 닫았습니다. 나중에 다시 시도하십시오.", + "ERROR_CLIENT_20A" : "원격 데스크톱이 비활성화 상태로 보이기 때문에 서버 연결을 닫았습니다. 원치 않거나 예기치 않은 경우, 시스템 관리자에게 문의하거나 시스템 세팅을 확인하십시오.", + "ERROR_CLIENT_20B" : "원격 데스크톱 서버가 강제로 연결을 끊었습니다. 원치 않거나 예기치 않은 경우, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + "ERROR_CLIENT_301" : "로그인이 실패했습니다. 다시 연결한 다음 다시 시도하십시오", + "ERROR_CLIENT_303" : "원격 데스크톱 서버가 이 연결에 대한 액세스를 거부했습니다. 액세스 권한이 필요하면, 시스템 관리자에게 계정 액세스 권한을 부여하도록 요청하거나 시스템 설정을 확인하십시오.", + "ERROR_CLIENT_308" : "브라우저에서 연결이 끊긴 것처럼 보일 정도로 오랫동안 응답이 없었기 때문에 Guacamole 서버가 연결을 닫았습니다. 이는 보통 불안정한 무선 신호나 단지 네트워크의 느린 속도같은 네트워크 문제로 일어납니다. 네트워크 상태를 확인 후에 다시 시도 하십시오.", + "ERROR_CLIENT_31D" : "개별 사용자의 동시 연결 사용 제한을 초과했기 때문에 Guacamole 서버가 이 연결에 대한 액세스를 거부했습니다. 하나 이상의 연결을 닫고 다시 시도 하십시오.", + "ERROR_CLIENT_DEFAULT" : "Guacamole 서버 내에서 내부 오류가 발생해서 연결이 종료되었습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + + "ERROR_TUNNEL_201" : "활성 연결이 너무 많기 때문에 Guacamole 서버에서 이 연결 시도를 거부했습니다. 잠시 후에 다시 시도하십시오", + "ERROR_TUNNEL_202" : "서버 응답시간이 너무 길어 연결을 닫았습니다. 이것은 보통 불안정한 무선 신호나, 네트워크의 느린 속도같은 네트워크의 문제입니다. 네트워크 연결을 확인해 주시거나 시스템 관리자에게 문의하십시오.", + "ERROR_TUNNEL_203" : "서버에 오류가 발생해서 연결을 닫았습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", + "ERROR_TUNNEL_204" : "요청한 연결이 존재하지 않습니다. 연결 이름을 확인하고 다시 시도하십시오", + "ERROR_TUNNEL_205" : "이 연결은 현재 사용 중이며 이 연결에 대한 동시 액세스가 허용되지 않습니다. 나중에 다시 시도하십시오.", + "ERROR_TUNNEL_207" : "Guacamole 서버에 현재 접근할 수 없습니다. 네트워크 상태를 확인 후에 다시 시도하십시오.", + "ERROR_TUNNEL_208" : "Guacamole 서버가 연결을 허용하지 않습니다. 네트워크 상태를 확인 후에 다시 시도하십시오.", + "ERROR_TUNNEL_301" : "로그인하지 않았기 때문에, 이 연결에 접근할 수 있는 권한이 없습니다. 로그인 후에 다시 시도하십시오.", + "ERROR_TUNNEL_303" : "이 연결에 접근할 수 있는 권한이 없습니다. 접근 권한이 필요하다면, 허가 사용자 목록에 당신을 추가하도록 시스템 관리자에게 요청하거나 시스템 설정을 확인하십시오.", + "ERROR_TUNNEL_308" : "브라우저에서 연결이 끊긴 것처럼 보일 정도로 오랫동안 응답이 없었기 때문에 Guacamole server가 연결을 닫았습니다. 이는 보통 불안정한 무선 신호나 단지 네트워크의 느린 속도같은 네트워크 문제로 일어납니다. 네트워크 상태를 확인 후에 다시 시도 하십시오", + "ERROR_TUNNEL_31D" : "개별 사용자의 동시 연결 사용 제한을 초과했기 때문에 Guacamole server가 이 연결에 대한 액세스를 거부하고 있습니다. 하나 이상의 연결을 닫고 다시 시도하십시오.", + "ERROR_TUNNEL_DEFAULT" : "Guacamole 서버 내에서 내부 오류가 발생해서 연결이 종료되었습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "ERROR_UPLOAD_100" : "파일 전송이 지원되지 않거나 활성화되지 않았습니다. 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + "ERROR_UPLOAD_201" : "현재 너무 많은 파일이 전송되고 있습니다. 기존 전송이 완료될 때까지 기다린 후 다시 시도하십시오.", + "ERROR_UPLOAD_202" : "원격 데스크톱 서버가 응답하는 데 너무 오래 걸리기 때문에 파일을 전송할 수 없습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", + "ERROR_UPLOAD_203" : "전송하는 동안 원격 데스크톱 서버에 오류가 발생했습니다. 다시 시도하거나 시스템 관리자에게 문의하십시오.", + "ERROR_UPLOAD_204" : "파일 전송 대상이 없습니다. 대상이 있는지 확인하고 다시 시도하십시오.", + "ERROR_UPLOAD_205" : "파일 전송 대상이 현재 잠겨 있습니다. 진행 중인 작업이 완료될 때까지 기다린 후 다시 시도하십시오.", + "ERROR_UPLOAD_301" : "로그인하지 않았기 때문에 이 파일을 업로드할 권한이 없습니다. 로그인 한 후 다시 시도하십시오.", + "ERROR_UPLOAD_303" : "이 파일을 업로드 할 권한이 없습니다. 액세스가 필요한 경우 시스템 설정을 확인하거나 시스템 관리자에게 확인하십시오.", + "ERROR_UPLOAD_308" : "파일 전송이 중단되었습니다. 이는 일반적으로 무선 신호가 불안정하거나 네트워크 속도가 매우 느린 것과 같은 네트워크 문제로 인해 발생합니다. 네트워크를 확인하고 다시 시도하십시오.", + "ERROR_UPLOAD_31D" : "현재 너무 많은 파일이 전송되고 있습니다. 기존 전송이 완료될 때까지 기다린 후 다시 시도하십시오.", + "ERROR_UPLOAD_DEFAULT" : "Guacamole 서버 내에서 내부 오류가 발생해서 연결이 종료되었습니다. 문제가 지속되면, 시스템 관리자에게 문의하거나 시스템 로그를 확인하십시오.", + + + "HELP_CLIPBOARD" : "Guacamole에서 복사하거나 잘라낸 텍스트가 여기에 표시됩니다. 텍스트 변경 사항은 원격 클립보드에 직접 적용됩니다.", + "HELP_INPUT_METHOD_NONE" : "사용중인 입력 방법이 없습니다. 키보드 입력은 연결된 물리적 키보드에서 받아들여집니다.", + "HELP_INPUT_METHOD_OSK" : "내장된 Guacamole 화상 키보드의 입력을 표시하고 허용합니다. 화상 키보드는 다른 방법으로는 불가능할 수 있는 키 조합을 입력할 수 있습니다. (Ctrl-Alt-Del 등)", + "HELP_INPUT_METHOD_TEXT" : "텍스트 입력을 허용하고, 입력된 텍스트를 바탕으로 키보드 이벤트를 에뮬레이트 합니다. 이것은 물리적 키보드가 없는 휴대폰과 같은 장치에 필요합니다.", + "HELP_MOUSE_MODE" : "터치와 관련하여 원격 마우스가 어떻게 동작하는지 결정합니다.", + "HELP_MOUSE_MODE_ABSOLUTE" : "탭하여 클릭합니다. 클릭은 터치 위치에서 발생합니다.", + "HELP_MOUSE_MODE_RELATIVE" : "드래그하여 마우스 포인터를 움직이고 탭하여 클릭합니다. 클릭은 마우스 포인터 위치에서 발생합니다.", + "HELP_SHARE_LINK" : "현재 연결이 공유되고 있으며, 다음 링크를 가진 사람이라면 누구나 접근할 수 있습니다:", + "INFO_CONNECTION_SHARED" : "이 연결은 이제 공유됩니다.", + "INFO_NO_FILE_TRANSFERS" : "파일 전송이 없습니다.", + + "NAME_INPUT_METHOD_NONE" : "없음", + "NAME_INPUT_METHOD_OSK" : "화상 키보드", + "NAME_INPUT_METHOD_TEXT" : "텍스트 입력", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "터치 스크린", + "NAME_MOUSE_MODE_RELATIVE" : "터치 패드", + + "SECTION_HEADER_CLIPBOARD" : "클립보드", + "SECTION_HEADER_DEVICES" : "장치", + "SECTION_HEADER_DISPLAY" : "디스플레이", + "SECTION_HEADER_FILE_TRANSFERS" : "파일 전송", + "SECTION_HEADER_INPUT_METHOD" : "입력 방법", + "SECTION_HEADER_MOUSE_MODE" : "마우스 에뮬레이션 모드", + + "TEXT_ZOOM_AUTO_FIT" : "브라우저 창에 자동으로 맞춤", + "TEXT_CLIENT_STATUS_IDLE" : "유휴 상태.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Guacamole에 연결 중...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "연결이 끊어졌습니다.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "Guacamole 서버에 대한 네트워크 연결이 불안정합니다.", + "TEXT_CLIENT_STATUS_WAITING" : "Guacamole에 연결됐습니다. 응답을 기다리는 중...", + "TEXT_RECONNECT_COUNTDOWN" : "다시 연결하는 중 {REMAINING}초...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}" + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "숨기기", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "표시", + + "FIELD_HEADER_BACKGROUND" : "배경색", + "FIELD_HEADER_FOREGROUND" : "전경색", + + "FIELD_OPTION_CUSTOM" : "사용자 지정...", + + "SECTION_HEADER_DETAILS" : "세부 정보:" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "기본 (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "클릭하여 패스워드 표시", + "HELP_HIDE_PASSWORD" : "클릭하여 패스워드 숨기기" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "최근 연결이 없습니다.", + + "PASSWORD_CHANGED" : "패스워드가 변경되었습니다.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "모든 연결", + "SECTION_HEADER_RECENT_CONNECTIONS" : "최근 연결" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "익명" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "잘못된 로그인", + + "FIELD_HEADER_USERNAME" : "사용자 이름", + "FIELD_HEADER_PASSWORD" : "패스워드" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "연결 삭제", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "위치:", + "FIELD_HEADER_NAME" : "이름:", + "FIELD_HEADER_PROTOCOL" : "프로토콜:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "현재 활성화", + "INFO_CONNECTION_NOT_USED" : "이 연결은 아직 사용되지 않았습니다.", + + "SECTION_HEADER_EDIT_CONNECTION" : "연결 편집", + "SECTION_HEADER_HISTORY" : "사용 기록", + "SECTION_HEADER_PARAMETERS" : "매개변수", + "TABLE_HEADER_HISTORY_USERNAME" : "사용자 이름", + "TABLE_HEADER_HISTORY_START" : "시작 시간", + "TABLE_HEADER_HISTORY_DURATION" : "기간", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "원격 호스트", + + "TEXT_CONFIRM_DELETE" : "연결을 삭제한 후에는 복원할 수 없습니다. 이 연결을 삭제하겠습니까?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "연결 그룹 삭제", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "위치:", + "FIELD_HEADER_NAME" : "이름:", + "FIELD_HEADER_TYPE" : "타입:", + + "NAME_TYPE_BALANCING" : "부하 분산", + "NAME_TYPE_ORGANIZATIONAL" : "조직", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "연결 그룹 편집", + + "TEXT_CONFIRM_DELETE" : "연결 그룹을 삭제한 후에는 복원할 수 없습니다. 이 연결 그룹을 삭제하겠습니까?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "공유 프로필 삭제", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "이름:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "기본 연결:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "공유 프로필 편집", + "SECTION_HEADER_PARAMETERS" : "매개 변수", + + "TEXT_CONFIRM_DELETE" : "공유 프로필을 삭제한 후에는 복원할 수 없습니다. 이 공유 프로필을 삭제하겠습니까?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "사용자 삭제", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "관리자 시스템", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "자신의 패스워드 변경:", + "FIELD_HEADER_CREATE_NEW_USERS" : "새로운 사용자 생성:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "새로운 사용자 그룹 생성:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "새로운 연결 생성", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "새로운 연결 그룹 생성:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "새로운 공유 프로파일 생성", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "사용자 이름:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "이 사용자는 현재 어떤 그룹에도 속하지 않습니다. 그룹을 추가하려면이 섹션을 확장하십시오.", + + "INFO_READ_ONLY" : "죄송합니다.이 사용자 계정은 수정할 수 없습니다.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "사용 가능한 그룹이 없습니다.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "모든 연결", + "SECTION_HEADER_CONNECTIONS" : "연결", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "현재 연결", + "SECTION_HEADER_EDIT_USER" : "사용자 편집", + "SECTION_HEADER_PERMISSIONS" : "권한", + "SECTION_HEADER_USER_GROUPS" : "그룹", + + "TEXT_CONFIRM_DELETE" : "사용자를 삭제한 후에는 복원 할 수 없습니다. 이 사용자를 삭제 하시겠습니까?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "그룹 삭제", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_USER_GROUP_NAME" : "그룹 이름:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "이 그룹은 현재 어떤 그룹에도 소속되지 않았습니다. 이 섹션을 확장하여 그룹을 추가하십시오.", + "HELP_NO_MEMBER_USER_GROUPS" : "이 그룹은 현재 어떤 그룹도 포함하고 있지 않습니다. 이 섹션을 확장하여 그룹을 추가하십시오.", + "HELP_NO_MEMBER_USERS" : "이 그룹은 어떤 사용자도 포함 하고 있지 않습니다. 이 섹션을 확장하여 사용자를 추가하십시오. ", + + "INFO_READ_ONLY" : "이 그룹은 편집할 수 없습니다.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "사용가능한 사용자가 없습니다.", + + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "그룹 편집", + "SECTION_HEADER_MEMBER_USERS" : "맴버 사용자", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "맴버 그룹", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "상위 그룹", + + "TEXT_CONFIRM_DELETE" : "그룹을 삭제한 후에는 복원 할 수 없습니다. 이 그룹을 삭제 하시겠습니까?" + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Backspace 키 전송:", + "FIELD_HEADER_CA_CERT" : "인증 기관 인증서:", + "FIELD_HEADER_CLIENT_CERT" : "클라이언트 인증서:", + "FIELD_HEADER_CLIENT_KEY" : "클라이언트 키:", + "FIELD_HEADER_COLOR_SCHEME" : "색상 구성표:", + "FIELD_HEADER_CONTAINER" : "컨테이너 이름 :", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "자동으로 레코드 경로 생성 :", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "자동으로 typescript 경로 생성 :", + "FIELD_HEADER_EXEC_COMMAND" : "명령어 (exec):", + "FIELD_HEADER_FONT_NAME" : "글꼴 이름 :", + "FIELD_HEADER_FONT_SIZE" : "글꼴 크기 :", + "FIELD_HEADER_HOSTNAME" : "호스트 이름 :", + "FIELD_HEADER_IGNORE_CERT" : "서버 인증서 무시 :", + "FIELD_HEADER_NAMESPACE" : "네임 스페이스 :", + "FIELD_HEADER_POD" : "파드 (Pod) 이름:", + "FIELD_HEADER_PORT" : "포트:", + "FIELD_HEADER_READ_ONLY" : "읽기 전용:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", + "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", + "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", + "FIELD_HEADER_SCROLLBACK" : "스크롤 백 (scrollback) 최대 크기:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 이름:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 경로:", + "FIELD_HEADER_USE_SSL" : "SSL/TLS 사용", + + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "흰색 바탕에 검정색", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "검은색 바탕에 회색", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "검은색 바탕에 녹색", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "검은색 바탕에 흰색", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + + "NAME" : "Kubernetes", + "SECTION_HEADER_AUTHENTICATION" : "인증", + "SECTION_HEADER_BEHAVIOR" : "터미널 동작", + "SECTION_HEADER_CONTAINER" : "컨테이너", + "SECTION_HEADER_DISPLAY" : "디스플레이", + "SECTION_HEADER_RECORDING" : "스크린 레코드", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (텍스트 세션 레코드)", + "SECTION_HEADER_NETWORK" : "네트워크" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "클라이언트 이름:", + "FIELD_HEADER_COLOR_DEPTH" : "색심도:", + "FIELD_HEADER_CONSOLE" : "관리자 콘솔:", + "FIELD_HEADER_CONSOLE_AUDIO" : "콘솔 내 오디오 지원:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "드라이브 자동 생성:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", + "FIELD_HEADER_DISABLE_AUDIO" : "오디오 비활성화:", + "FIELD_HEADER_DISABLE_AUTH" : "인증 비활성화:", + "FIELD_HEADER_DISABLE_COPY" : "원격 데스크톱으로 부터의 복사 비활성화:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", + "FIELD_HEADER_DISABLE_PASTE" : "클라이언트로 부터의 붙여넣기 비활성화:", + "FIELD_HEADER_DISABLE_UPLOAD" : "파일 업로드 비활성화:", + "FIELD_HEADER_DOMAIN" : "도메인:", + "FIELD_HEADER_DPI" : "해상도 (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "드라이브 이름:", + "FIELD_HEADER_DRIVE_PATH" : "드라이브 주소:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "오디오 입력 활성화 (마이크):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "바탕화면 구성 활성화 (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "드라이브 활성화:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "글꼴 다듬기 활성화 (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "전체 창 끌기 활성화:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "메뉴 에니메이션 활성화:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "비트맵 캐싱 비활성화:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "화면 밖 캐싱 비활성화:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "문자 모양 캐싱 비활성화:", + "FIELD_HEADER_ENABLE_PRINTING" : "프린팅 활성화:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTP 활성화:", + "FIELD_HEADER_ENABLE_THEMING" : "테마 활성화:", + "FIELD_HEADER_ENABLE_TOUCH" : "멀티 터치 활성화:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "바탕화면 활성화:", + "FIELD_HEADER_FORCE_LOSSLESS" : "무손실 압축 강제:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "도메인:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "호스트 이름:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "패스워드:", + "FIELD_HEADER_GATEWAY_PORT" : "포트:", + "FIELD_HEADER_GATEWAY_USERNAME" : "사용자 이름:", + "FIELD_HEADER_HEIGHT" : "높이:", + "FIELD_HEADER_HOSTNAME" : "호스트 이름:", + "FIELD_HEADER_IGNORE_CERT" : "서버 인증서 무시:", + "FIELD_HEADER_INITIAL_PROGRAM" : "시작 프로그램:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "부하분산 정보/쿠키:", + "FIELD_HEADER_PASSWORD" : "패스워드:", + "FIELD_HEADER_PORT" : "포트:", + "FIELD_HEADER_PRINTER_NAME" : "리디렉션 프린터 문서:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDP 소스 ID:", + "FIELD_HEADER_READ_ONLY" : "읽기 전용:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", + "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", + "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", + "FIELD_HEADER_RESIZE_METHOD" : "Resize 메서드:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "매개 변수:", + "FIELD_HEADER_REMOTE_APP_DIR" : "작업 디렉터리:", + "FIELD_HEADER_REMOTE_APP" : "프로그램:", + "FIELD_HEADER_SECURITY" : "안전 모드:", + "FIELD_HEADER_SERVER_LAYOUT" : "자판 배열:", + "FIELD_HEADER_SFTP_DIRECTORY" : "기본 업로드 디렉토리:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", + "FIELD_HEADER_SFTP_HOST_KEY" : "호스트 공개 키 (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "호스트 이름:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive 간격:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "암호 (Passphrase):", + "FIELD_HEADER_SFTP_PASSWORD" : "암호 (Password):", + "FIELD_HEADER_SFTP_PORT" : "포트:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "개인 키:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "루트 디렉토리 파일 브라우저:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "파일 업로드 비활성화:", + "FIELD_HEADER_SFTP_USERNAME" : "사용자 이름:", + "FIELD_HEADER_STATIC_CHANNELS" : "스태틱 채널 이름:", + "FIELD_HEADER_TIMEZONE" : "시간대:", + "FIELD_HEADER_USERNAME" : "사용자 이름:", + "FIELD_HEADER_WIDTH" : "너비:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷의 브로드케스트 주소:", + "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 어드레스", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", + "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", + + + "FIELD_OPTION_COLOR_DEPTH_16" : "로우 컬러 (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "트루 컬러 (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "트루 컬러 (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"디스플레이 업데이트\" 가상 채널 (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "다시 연결", + + "FIELD_OPTION_SECURITY_ANY" : "Any", + "FIELD_OPTION_SECURITY_NLA" : "NLA (네트워크 수준 인증)", + "FIELD_OPTION_SECURITY_RDP" : "RDP 암호화", + "FIELD_OPTION_SECURITY_TLS" : "TLS 암호화", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Swiss German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Swiss French (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanese (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguese Brazilian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguese (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turkish-Q (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "인증", + "SECTION_HEADER_BASIC_PARAMETERS" : "기본 설정", + "SECTION_HEADER_CLIPBOARD" : "클립보드", + "SECTION_HEADER_DEVICE_REDIRECTION" : "디바이스 리디렉션", + "SECTION_HEADER_DISPLAY" : "디스플레이", + "SECTION_HEADER_GATEWAY" : "원격 데스크톱 게이트웨이", + "SECTION_HEADER_LOAD_BALANCING" : "부하 분산 (Load Balancing)", + "SECTION_HEADER_NETWORK" : "네트워크", + "SECTION_HEADER_PERFORMANCE" : "성능", + "SECTION_HEADER_PRECONNECTION_PDU" : "Preconnection PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "스크린 레코드", + "SECTION_HEADER_REMOTEAPP" : "리모트 앱", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : " 키가 보내는 문자:", + "FIELD_HEADER_COLOR_SCHEME" : "색상 구성표:", + "FIELD_HEADER_COMMAND" : "명령 실행:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Typescript 경로 자동 생성:", + "FIELD_HEADER_DISABLE_COPY" : "터미널에서 복사 비활성화:", + "FIELD_HEADER_DISABLE_PASTE" : "클라이언트에서 붙여넣기 비활성화:", + "FIELD_HEADER_FONT_NAME" : "글꼴 이름:", + "FIELD_HEADER_FONT_SIZE" : "글꼴 크기:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTP 활성화:", + "FIELD_HEADER_HOST_KEY" : "공개 호스트 키 (Base64):", + "FIELD_HEADER_HOSTNAME" : "호스트 이름:", + "FIELD_HEADER_LOCALE" : "언어/지역 ($LANG):", + "FIELD_HEADER_USERNAME" : "사용자 이름:", + "FIELD_HEADER_PASSWORD" : "암호 (Password):", + "FIELD_HEADER_PASSPHRASE" : "암호 (Passphrase):", + "FIELD_HEADER_PORT" : "포트:", + "FIELD_HEADER_PRIVATE_KEY" : "개인 키 (Private Key):", + "FIELD_HEADER_SCROLLBACK" : "최대 스크롤 백 사이즈:", + "FIELD_HEADER_READ_ONLY" : "읽기 전용:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", + "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", + "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "서버 keepalive 간격:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "루트 디렉토리 파일 브라우저:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "파일 업로드 비활성화:", + "FIELD_HEADER_TERMINAL_TYPE" : "터미널 타입:", + "FIELD_HEADER_TIMEZONE" : "시간대 ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 이름:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 경로:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷의 브로드케스트 주소:", + "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 어드레스:", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", + "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", + + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "흰색 바탕에 검정색", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "검은색 바탕에 회색", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "검은색 바탕에 녹색", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "검은색 바탕에 흰색", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "인증", + "SECTION_HEADER_BEHAVIOR" : "터미널 동작", + "SECTION_HEADER_CLIPBOARD" : "클립보드", + "SECTION_HEADER_DISPLAY" : "디스플레이", + "SECTION_HEADER_NETWORK" : "네트워크", + "SECTION_HEADER_RECORDING" : "스크린 레코드", + "SECTION_HEADER_SESSION" : "세션 / 환경", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (텍스트 세션 레코드)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + "FIELD_HEADER_BACKSPACE" : "Backspace 키 전송:", + "FIELD_HEADER_COLOR_SCHEME" : "색상 구성표:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Typescript 경로 자동 생성:", + "FIELD_HEADER_DISABLE_COPY" : "터미널에서 복사 비활성화:", + "FIELD_HEADER_DISABLE_PASTE" : "클라이언트에서 붙여넣기 비활성화:", + "FIELD_HEADER_FONT_NAME" : "글꼴 이름:", + "FIELD_HEADER_FONT_SIZE" : "글꼴 크기:", + "FIELD_HEADER_HOSTNAME" : "호스트 이름:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "로그인 실패 정규식:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "로그인 성공 정규식:", + "FIELD_HEADER_USERNAME" : "사용자 이름:", + "FIELD_HEADER_USERNAME_REGEX" : "사용자 이름 정규식:", + "FIELD_HEADER_PASSWORD" : "패스워드:", + "FIELD_HEADER_PASSWORD_REGEX" : "패스워드 정규식:", + "FIELD_HEADER_PORT" : "포트:", + "FIELD_HEADER_READ_ONLY" : "읽기 전용:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", + "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", + "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", + "FIELD_HEADER_SCROLLBACK" : "스크롤 백 (scrollback) 최대 크기:", + "FIELD_HEADER_TERMINAL_TYPE" : "터미널 타입:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 이름:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 경로:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷의 브로드캐스트 주소:", + "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 주소:", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", + "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", + + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "흰색 바탕에 검정색", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "검은색 바탕에 회색", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "검은색 바탕에 녹색", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "검은색 바탕에 흰색", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "인증", + "SECTION_HEADER_BEHAVIOR" : "터미널 동작", + "SECTION_HEADER_CLIPBOARD" : "클립보드", + "SECTION_HEADER_DISPLAY" : "디스플레이", + "SECTION_HEADER_RECORDING" : "스크린 레코드", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (텍스트 세션 레코드)", + "SECTION_HEADER_NETWORK" : "네트워크", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + "FIELD_HEADER_AUDIO_SERVERNAME" : "오디오 서버 이름:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "인코딩:", + "FIELD_HEADER_COLOR_DEPTH" : "색심도:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "레코드 경로 자동 생성:", + "FIELD_HEADER_CURSOR" : "커서:", + "FIELD_HEADER_DEST_HOST" : "대상 호스트:", + "FIELD_HEADER_DEST_PORT" : "대상 포트:", + "FIELD_HEADER_DISABLE_COPY" : "데스크톱에서 복사 비활성화:", + "FIELD_HEADER_DISABLE_PASTE" : "클라이언트에서 붙여넣기 비활성화:", + "FIELD_HEADER_ENABLE_AUDIO" : "오디오 활성화:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTP 활성화:", + "FIELD_HEADER_FORCE_LOSSLESS" : "무손실 압축 강제:", + "FIELD_HEADER_HOSTNAME" : "호스트 이름:", + "FIELD_HEADER_USERNAME" : "사용자 이름:", + "FIELD_HEADER_PASSWORD" : "패스워드:", + "FIELD_HEADER_PORT" : "포트:", + "FIELD_HEADER_READ_ONLY" : "읽기 전용:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "마우스 제외:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "그래픽/스트림 제외:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "키 이벤트 포함:", + "FIELD_HEADER_RECORDING_NAME" : "레코드 이름:", + "FIELD_HEADER_RECORDING_PATH" : "레코드 경로:", + "FIELD_HEADER_SFTP_DIRECTORY" : "기본 업로드 디렉터리:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "파일 다운로드 비활성화:", + "FIELD_HEADER_SFTP_HOST_KEY" : "공개 호스트 키 (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "호스트 이름:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP 유지 간격:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "암호 (Passphrase):", + "FIELD_HEADER_SFTP_PASSWORD" : "암호 (Password):", + "FIELD_HEADER_SFTP_PORT" : "포트:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "개인 키:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "파일 브라우저 루트 디렉터리:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "파일 업로드 비활성화:", + "FIELD_HEADER_SFTP_USERNAME" : "사용자 이름:", + "FIELD_HEADER_SWAP_RED_BLUE" : "red/blue 컴포넌트 스왑:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 패킷 브로드캐스트 주소:", + "FIELD_HEADER_WOL_MAC_ADDR" : "원격 호스트 MAC 주소:", + "FIELD_HEADER_WOL_SEND_PACKET" : "WoL 패킷 전송:", + "FIELD_HEADER_WOL_WAIT_TIME" : "호스트 부트 대기 시간:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_16" : "로우 컬러 (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "트루 컬러 (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "트루 컬러 (32-bit)", + + "FIELD_OPTION_CURSOR_LOCAL" : "로컬", + "FIELD_OPTION_CURSOR_REMOTE" : "원격", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "오디오", + "SECTION_HEADER_AUTHENTICATION" : "인증", + "SECTION_HEADER_CLIPBOARD" : "클립보드", + "SECTION_HEADER_DISPLAY" : "디스플레이", + "SECTION_HEADER_NETWORK" : "네트워크", + "SECTION_HEADER_RECORDING" : "스크린 레코드", + "SECTION_HEADER_REPEATER" : "VNC 리피터", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "설정" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "과거 연결 기록은 여기에 나열되며 열 헤더 (column header)를 클릭하여 정렬할 수 있습니다. 특정 기록을 검색하려면, 필터 문자열을 입력하고 \"검색\"을 클릭하십시오. 제공된 필터 문자열과 일치하는 기록만 나열됩니다.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "일치하는 기록 없음", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "연결 이름", + "TABLE_HEADER_SESSION_DURATION" : "기간", + "TABLE_HEADER_SESSION_REMOTEHOST" : "원격 호스트", + "TABLE_HEADER_SESSION_STARTDATE" : "시작 시간", + "TABLE_HEADER_SESSION_USERNAME" : "사용자 이름", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "새 연결", + "ACTION_NEW_CONNECTION_GROUP" : "새 그룹", + "ACTION_NEW_SHARING_PROFILE" : "새 공유 프로필", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "아래 연결을 클릭하거나 탭하여 해당 연결을 관리합니다. 엑세스 레벨에 따라 연결을 추가하고 삭제할 수 있으며, 속성 (프로토콜, 호스트 이름, 포트 등)을 변경할 수 있습니다.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "연결" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "표시 언어:", + "FIELD_HEADER_PASSWORD" : "패스워드:", + "FIELD_HEADER_PASSWORD_OLD" : "현재 패스워드:", + "FIELD_HEADER_PASSWORD_NEW" : "새 패스워드:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "새 패스워드 확인:", + "FIELD_HEADER_TIMEZONE" : "시간대:", + "FIELD_HEADER_USERNAME" : "사용자 이름:", + + "HELP_DEFAULT_INPUT_METHOD" : "기본 입력 방법은 키보드 이벤트가 Guacamole에 의해 수신되는 방법을 결정합니다. 모바일 장치를 사용하거나 IME를 통해 입력할 때 이 설정을 변경해야 할 수도 있습니다. 이 세팅은 Guacamole 메뉴 내에서 연결마다 재정의할 수 있습니다.", + "HELP_DEFAULT_MOUSE_MODE" : "기본 마우스 에뮬레이션 방법은 원격 마우스가 터치와 관련해서 새 연결에서 어떻게 작동할지 결정합니다. 이 세팅은 Guacamole 메뉴 내에서 연결마다 재정의할 수 있습니다.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "아래의 옵션은 사용자의 지역과 관련이 있으며 인터페이스의 여러 부분이 표시되는 방법에 영향을 줄 것입니다.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "패스워드를 변경하려면 현재 패스워드와 새 패스워드를 아래에 입력하고, \"패스워드 변경\"을 클릭하십시오. 변경사항은 즉시 적용될 것입니다.", + + "INFO_PASSWORD_CHANGED" : "패스워드가 변경되었습니다.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "기본 입력 방법", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "기본 마우스 에뮬레이션 방법", + "SECTION_HEADER_UPDATE_PASSWORD" : "패스워드 변경" + + }, + + "SETTINGS_USERS" : { + + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "새 사용자", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "아래 사용자를 클릭하거나 탭하여 해당 사용자를 관리합니다. 엑세스 레벨에 따라 사용자를 추가하고 삭제할 수 있으며, 패스워드를 변경할 수 있습니다.", + + "SECTION_HEADER_USERS" : "사용자", + + "TABLE_HEADER_FULL_NAME" : "전체 이름", + "TABLE_HEADER_LAST_ACTIVE" : "마지막 활성", + "TABLE_HEADER_ORGANIZATION" : "조직", + "TABLE_HEADER_USERNAME" : "사용자 이름" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "새 그룹", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "아래 그룹을 클릭하거나 탭하여 해당 그룹을 관리합니다. 엑세스 레벨에 따라 그룹을 추가하고 삭제할 수 있으며, 구성원 사용자들과 그룹을 변경할 수 있습니다.", + + "SECTION_HEADER_USER_GROUPS" : "그룹", + + "TABLE_HEADER_USER_GROUP_NAME" : "그룹 이름" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "세션 종료", + + "DIALOG_HEADER_CONFIRM_DELETE" : "세션 종료", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "이 페이지는 현재 활성화된 연결로 이루어져 있습니다. 세션을 하나 이상 종료하려면, 해당 세션 옆의 체크 박스를 선택하고 \"세션 종료\"를 클릭하십시오. 세션을 종료하면 관련된 사용자의 연결이 즉시 끊어질 것입니다.", + + "INFO_NO_SESSIONS" : "활성 세션 없음", + + "SECTION_HEADER_SESSIONS" : "활성 세션", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "연결 이름", + "TABLE_HEADER_SESSION_REMOTEHOST" : "원격 호스트", + "TABLE_HEADER_SESSION_STARTDATE" : "활성화된 시간", + "TABLE_HEADER_SESSION_USERNAME" : "사용자 이름", + + "TEXT_CONFIRM_DELETE" : "선택한 세션을 모두 종료하시겠습니까? 이 세션을 사용 중인 사용자의 연결이 즉시 끊어질 것입니다." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "이메일 주소:", + "FIELD_HEADER_GUAC_FULL_NAME" : "전체 이름:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "조직:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "역할:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/nl.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/nl.json new file mode 100644 index 0000000000..ef03dc36e2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/nl.json @@ -0,0 +1,692 @@ +{ + + "NAME" : "Nederlands", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Annuleer", + "ACTION_CLONE" : "Kloon", + "ACTION_CONTINUE" : "Verder", + "ACTION_DELETE" : "Verwijder", + "ACTION_DELETE_SESSIONS" : "Verwijder Sessies", + "ACTION_LOGIN" : "Inloggen", + "ACTION_LOGOUT" : "Uitloggen", + "ACTION_MANAGE_CONNECTIONS" : "Verbindingen", + "ACTION_MANAGE_PREFERENCES" : "Voorkeuren", + "ACTION_MANAGE_SETTINGS" : "Instellingen", + "ACTION_MANAGE_SESSIONS" : "Actieve Sessies", + "ACTION_MANAGE_USERS" : "Gebruikers", + "ACTION_NAVIGATE_BACK" : "Terug", + "ACTION_NAVIGATE_HOME" : "Home", + "ACTION_SAVE" : "Opslaan", + "ACTION_SEARCH" : "Zoeken", + "ACTION_UPDATE_PASSWORD" : "Wijzig Wachtwoord", + "ACTION_VIEW_HISTORY" : "Gebruikgeschiedenis", + + "DIALOG_HEADER_ERROR" : "Fout", + + "ERROR_PASSWORD_BLANK" : "Uw wachtwoord mag niet leeg zijn.", + "ERROR_PASSWORD_MISMATCH" : "De opgegeven wachtwoorden komen niet overeen.", + + "FIELD_HEADER_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Nogmaals uw wachtwoord:", + + "FIELD_PLACEHOLDER_FILTER" : "Filter", + + "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Op dit moment in gebruik door {USERS} {USERS, plural, one{gebruiker} other{gebruikers}}.", + + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{seconde} other{seconden}}} minute{{VALUE, plural, one{minuut} other{minuten}}} hour{{VALUE, plural, one{uur} other{uren}}} day{{VALUE, plural, one{dag} other{dagen}}} other{}}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Wis lijst", + "ACTION_DISCONNECT" : "Verbreek Verbinding", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Verbind Opnieuw", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_UPLOAD_FILES" : "Upload Bestanden", + + "DIALOG_HEADER_CONNECTING" : "Aan Het Verbinden", + "DIALOG_HEADER_CONNECTION_ERROR" : "Verbindingsfout", + "DIALOG_HEADER_DISCONNECTED" : "Niet Verbonden", + + "ERROR_CLIENT_201" : "Deze verbinding is gesloten omdat de server druk is. Wacht een paar minuten en probeer het opnieuw.", + "ERROR_CLIENT_202" : "De Guacamole server heeft de verbinding gesloten omdat het externe bureaublad te lang niet heeft gereageerd. Probeer het altublieft opnieuw of neem contact op met uw systeembeheerder.", + "ERROR_CLIENT_203" : "Er is een fout opgetreden bij de externe bureaublad server en heeft de verbinding gesloten. Probeer het alstublieft opnieuw of neem contact op met uw systeembeheerder.", + "ERROR_CLIENT_205" : "Deze verbinding is beeindigd omdat het conflicteerd met een andere verbinding. Probeer het alstublieft later nog eens.", + "ERROR_CLIENT_301" : "Inloggen is mislukt. Verbind opnieuw en probeer het nog eens.", + "ERROR_CLIENT_303" : "U heeft geen toestemming om deze verbinding tot stand te brengen. Heeft u toegang nodig, vraag dan aan uw systeembeheerder om u toe te voegen aan de lijst van geauthoriseerde gebruikers of controleer uw systeem instellingen.", + "ERROR_CLIENT_308" : "De Guacamole server heeft de sessie gesloten omdat uw browser zo lang niet heeft gereageerd dat het er op leek dat uw verbinding verbroken was. Dit komt in de regel door netwerk problemen zoals een slecht draadloos signaal of een erg langzame netwerk snelheid. Controleer uw netwerk en probeer het opnieuw.", + "ERROR_CLIENT_31D" : "De Guacamole server geeft geen toegang tot deze verbinding omdat u de limiet heeft bereikt van het aantal toegestane gelijktijdige verbindingen door een individuele gebruiker. Sluit u alstublieft een of meer verbindingen en probeer het opnieuw.", + "ERROR_CLIENT_DEFAULT" : "Een interne fout is opgetreden op de Guacamole server en de connectie is beeindigd. Als dit probleem zich voor blijft doen, neem dan contact op met uw systeembeheerder of controleer uw systeem logs.", + + "ERROR_TUNNEL_201" : "De Guacamole server heeft deze verbinding geweigerd omdat er al te veel actieve verbindingen zijn. Wacht u alstublieft een paar minuten en probeer het opnieuw.", + "ERROR_TUNNEL_202" : "De verbinding is gesloten omdat de server niet op tijd reageerd. Dit komt in de regel door netwerk problemen zoals een slecht draadloos signaal of langzame netwerk snelheden. Controleer alstublieft uw netwerk verbinding en probeer het opnieuw of neem contact op met uw systeembeheerde.", + "ERROR_TUNNEL_203" : "Er heeft een fout plaats gevonden op de server en deze heeft de verbinding gesloten. Probeert u het nog eens of neem contact op met uw systeembeheerder.", + "ERROR_TUNNEL_204" : "De gevraagde verbinding bestaat niet. Controleert u altublieft de verbindingsnaam en probeer het nog eens.", + "ERROR_TUNNEL_205" : "Deze verbinding is op dit moment in gebruik en gelijktijdige toegang is niet toegestaan. Probeert u het later nog eens.", + "ERROR_TUNNEL_301" : "U heeft geen toestemming deze verbinding te gebruiken omdat u niet ingelogd bent. Log eerst in en probeer het nog eens.", + "ERROR_TUNNEL_303" : "U heeft geen toestemming deze verbinding te gebruiken. Als u toegang nodig heeft, vraag dan aan de systeembeheerder om u toe te voegen aan de lijst van geauthoriseerde gebruikers of controleer uw systeem instellingen.", + "ERROR_TUNNEL_308" : "De Guacamole server heeft de sessie gesloten omdat uw browser zo lang niet heeft gereageerd dat het er op leek dat uw verbinding verbroken was. Dit komt in de regel door netwerk problemen zoals een slecht draadloos signaal of een erg langzame netwerk snelheid. Controleer uw netwerk en probeer het opnieuw.", + "ERROR_TUNNEL_31D" : "De Guacamole server geeft geen toegang tot deze verbinding omdat u de limiet heeft bereikt van het aantal toegestane gelijktijdige verbindingen door een individuele gebruiker. Sluit u alstublieft een of meer verbindingen en probeer het opnieuw.", + "ERROR_TUNNEL_DEFAULT" : "Een interne fout is opgetreden op de Guacamole server en de connectie is beeindigd. Als dit probleem zich voor blijft doen, neem dan contact op met uw systeembeheerder of controleer uw systeem logs.", + + "ERROR_UPLOAD_100" : "Bestandsoverdracht is ofwel niet ondersteund of niet ingeschakeld. Neem contact op met uw systeembeheerder of kijk in uw systeem logs.", + "ERROR_UPLOAD_201" : "Er worden momenteel te veel bestanden overdragen. Gelieve te wachten tot de bestaande bestandsoverdracht is voltooid, en probeer het opnieuw.", + "ERROR_UPLOAD_202" : "Het bestand kan niet worden overgedragen, omdat de extern bureaublad server te lang niet reageert. Probeer het opnieuw of neem contact op met uw systeembeheerder.", + "ERROR_UPLOAD_203" : "Er is een fout opgetreden op de extern bureaublad server tijdens de overdracht. Probeer het opnieuw of neem contact op met uw systeembeheerder.", + "ERROR_UPLOAD_204" : "De bestemming voor de overdracht van bestanden bestaat niet. Controleer of de bestemming bestaat en probeer het opnieuw.", + "ERROR_UPLOAD_205" : "De bestemming voor de overdracht van bestanden is momenteel vergrendeld. Gelieve te wachten tot alle taken zijn voltooid en probeer het opnieuw.", + "ERROR_UPLOAD_301" : "U heeft geen toestemming om dit bestand te uploaden, omdat u niet ingelogd bent. Gelieve in te loggen en probeer het opnieuw.", + "ERROR_UPLOAD_303" : "U heeft geen toestemming om dit bestand te uploaden. Als u toegang nodig heeft, controleer dan uw systeeminstellingen of neem contact op met uw systeembeheerder.", + "ERROR_UPLOAD_308" : "De bestandsoverdracht is vastgelopen. Dit wordt meestal veroorzaakt door netwerkproblemen, zoals een instabiel draadloos signaal of gewoon een erg trage netwerkverbinding. Controleer uw netwerk en probeer het opnieuw.", + "ERROR_UPLOAD_31D" : "Er worden momenteel te veel bestanden overdragen. Gelieve te wachten tot de bestaande bestandsoverdracht is voltooid, en probeer het opnieuw.", + "ERROR_UPLOAD_DEFAULT" : "Er is een interne fout opgetreden op de Guacamole server, en de verbinding is beëindigd. Als het probleem aanhoudt, neem dan contact op met uw systeembeheerder of kijk in uw systeem logs.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Tekst gekopieerd / geknipt binnen Guacamole zal hier verschijnen. Wijzigingen in onderstaande tekst zal externe klembord beïnvloeden.", + "HELP_INPUT_METHOD_NONE" : "Geen invoer methode gebruiken. Toetsenbord invoer wordt geaccepteerd van een aangesloten, fysiek toetsenbord.", + "HELP_INPUT_METHOD_OSK" : "Weergave en accepteren van invoer via het ingebouwde Guacamole on-screen toetsenbord. Dit toetsenbord op het scherm maakt toetscombinaties mogelijk die anders onmogelijk zijn (zoals Ctrl-Alt-Del).", + "HELP_INPUT_METHOD_TEXT" : "Laat het typen van tekst en het emuleren toetsenbord gebeurtenissen toe gebaseerd op de getypte tekst. Dit is nodig voor apparaten zoals mobiele telefoons die geen fysiek toetsenbord hebben.", + "HELP_MOUSE_MODE" : "Bepaalt hoe de muis met aanraak-klikken omgaat.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Tik om te klikken. De klik vindt plaats op de locatie van de tik.", + "HELP_MOUSE_MODE_RELATIVE" : "Sleep om de aanwijzer te bewegen en tik om te klikken. De klik vindt plaats op de locatie van de aanwijzer.", + + "INFO_NO_FILE_TRANSFERS" : "Geen bestandsoverdrachten.", + + "NAME_INPUT_METHOD_NONE" : "Geen", + "NAME_INPUT_METHOD_OSK" : "Scherm toetsenbord", + "NAME_INPUT_METHOD_TEXT" : "Text invoer", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Aanraakscherm", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Klembord", + "SECTION_HEADER_DEVICES" : "Apparaten", + "SECTION_HEADER_DISPLAY" : "Scherm", + "SECTION_HEADER_FILE_TRANSFERS" : "Bestandsoverdrachten", + "SECTION_HEADER_INPUT_METHOD" : "Invoer methode", + "SECTION_HEADER_MOUSE_MODE" : "Muis emulatie modus", + + "TEXT_ZOOM_AUTO_FIT" : "Automatisch aan browser venster aanpassen", + "TEXT_CLIENT_STATUS_IDLE" : "Inactief.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Verbinden met Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "De verbinding is verbroken.", + "TEXT_CLIENT_STATUS_WAITING" : "Verbonden met Guacamole. Aan het wachten op reactie...", + "TEXT_RECONNECT_COUNTDOWN" : "Opnieuw verbinden over {REMAINING} {REMAINING, plural, one{seconde} other{seconden}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/nl-nl-qwerty.json" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Standaard (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Klik om wachtwoord te tonen", + "HELP_HIDE_PASSWORD" : "Klik om wachtwoord te verbergen" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Geen recente verbindingen.", + + "PASSWORD_CHANGED" : "Wachtwoord gewijzigd.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Alle Verbindingen", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Recente Verbindingen" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Ongeldige Login", + + "FIELD_HEADER_USERNAME" : "Gebruikersnaam", + "FIELD_HEADER_PASSWORD" : "Wachtwoord" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Verwijder Verbinding", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Locatie:", + "FIELD_HEADER_NAME" : "Naam:", + "FIELD_HEADER_PROTOCOL" : "Protocol:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Nu Actief", + "INFO_CONNECTION_NOT_USED" : "Deze verbinding is nog niet gebruikt.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Bewerk Verbinding", + "SECTION_HEADER_HISTORY" : "Gebruikgeschiedenis", + "SECTION_HEADER_PARAMETERS" : "Parameters", + + "TABLE_HEADER_HISTORY_USERNAME" : "Gebruikersnaam", + "TABLE_HEADER_HISTORY_START" : "Starttijd", + "TABLE_HEADER_HISTORY_DURATION" : "Tijdsduur", + + "TEXT_CONFIRM_DELETE" : "Verbindingen kunnen niet worden hersteld nadat ze zijn verwijderd. Weet u zeker dat u deze verbinding wilt verwijderen?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Verwijder Verbindingsgroep", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Locatie:", + "FIELD_HEADER_NAME" : "Naam:", + "FIELD_HEADER_TYPE" : "Soort:", + + "NAME_TYPE_BALANCING" : "Verdeling", + "NAME_TYPE_ORGANIZATIONAL" : "Organizatorisch", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Bewerk Verbindingsgroep", + + "TEXT_CONFIRM_DELETE" : "Verbindingsgroepen kunnen niet worden hersteld nadat ze zijn verwijderd. Weet u zeker dat u deze verbindingsgroep wilt verwijderen?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Naam:", + + "SECTION_HEADER_PARAMETERS" : "Parameters" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Verwijder Gebruiker", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Systeem Beheer:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Wijzigen eigen wachtwoord:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Nieuwe gebruikers aanmaken:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Nieuwe verbindingen aanmaken:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Nieuwe verbindingsgroepen aanmaken:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_READ_ONLY" : "Sorry, maar dit gebruikers account kan niet gewijzigd worden", + + "SECTION_HEADER_CONNECTIONS" : "Verbindingen", + "SECTION_HEADER_EDIT_USER" : "Bewerk Gebruiker", + "SECTION_HEADER_PERMISSIONS" : "Rechten", + + "TEXT_CONFIRM_DELETE" : "Gebruikers kunnen niet worden hersteld nadat ze zijn verwijderd. Weet u zeker dat u deze gebruiker wilt verwijderen?" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Client naam:", + "FIELD_HEADER_COLOR_DEPTH" : "Kleurdiepte:", + "FIELD_HEADER_CONSOLE" : "Administrator console:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Support audio in console:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automatisch genereren station:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", + "FIELD_HEADER_DISABLE_AUDIO" : "Uitschakelen geluid:", + "FIELD_HEADER_DISABLE_AUTH" : "Uitschakelen authenticatie:", + "FIELD_HEADER_DOMAIN" : "Domein:", + "FIELD_HEADER_DPI" : "Resolutie (DPI):", + "FIELD_HEADER_DRIVE_PATH" : "Station map:", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Inschakelen bureaublad compositie (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Inschakelen station:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Inschakelen font smoothing (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Inschakelen verslepen compleet venster:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Inschakelen menu animaties:", + "FIELD_HEADER_ENABLE_PRINTING" : "Printen mogelijk maken:", + "FIELD_HEADER_ENABLE_SFTP" : "Inschakelen SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Inschakelen thema's:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Inschakelen achtergrond:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Domein:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Servernaam:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Password:", + "FIELD_HEADER_GATEWAY_PORT" : "Poort:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Gebruikersnaam:", + "FIELD_HEADER_HEIGHT" : "Hoogte:", + "FIELD_HEADER_HOSTNAME" : "Servernaam:", + "FIELD_HEADER_IGNORE_CERT" : "Negeer server certificaat:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Eerste programma:", + "FIELD_HEADER_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_PORT" : "Poort:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Voor te bereiden BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDP bron ID:", + "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", + "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", + "FIELD_HEADER_RECORDING_PATH" : "Opname map:", + "FIELD_HEADER_RESIZE_METHOD" : "Schaal methode:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameters:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Werk map:", + "FIELD_HEADER_REMOTE_APP" : "Programma:", + "FIELD_HEADER_SECURITY" : "Beveiligings modus:", + "FIELD_HEADER_SERVER_LAYOUT" : "Toetsenbord lay-out:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Standaard upload map:", + "FIELD_HEADER_SFTP_HOSTNAME" : "Servernaam:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Wachtwoordzin:", + "FIELD_HEADER_SFTP_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_SFTP_PORT" : "Poort:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Persoonlijke sleutel:", + "FIELD_HEADER_SFTP_USERNAME" : "Gebruikersnaam:", + "FIELD_HEADER_STATIC_CHANNELS" : "Vaste kanaalnamen:", + "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", + "FIELD_HEADER_WIDTH" : "Breedte:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Minder Kleuren (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Echte Kleuren (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Echte Kleuren (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 kleuren", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Ververs scherm\" virtueel kanaal (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Verbind opnieuw", + + "FIELD_OPTION_SECURITY_ANY" : "Ieder", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", + "FIELD_OPTION_SECURITY_RDP" : "RDP encryptie", + "FIELD_OPTION_SECURITY_TLS" : "TLS encryptie", + + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Duits (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Amerikaans Engels (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Frans (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiaans (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japans (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Poolse (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Zweeds (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", + "SECTION_HEADER_BASIC_PARAMETERS" : "Basis Instellingen", + "SECTION_HEADER_CLIPBOARD" : "Klembord", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Apparaat Verbindingen", + "SECTION_HEADER_DISPLAY" : "Scherm", + "SECTION_HEADER_NETWORK" : "Netwerk", + "SECTION_HEADER_PERFORMANCE" : "Prestatie instellingen", + "SECTION_HEADER_PRECONNECTION_PDU" : "Voor te bereiden PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Scherm Opname", + "SECTION_HEADER_REMOTEAPP" : "ExterneApp", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_COLOR_SCHEME" : "Kleuren combinatie:", + "FIELD_HEADER_COMMAND" : "Uitvoeren opdracht:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatisch genereren typescript map:", + "FIELD_HEADER_FONT_NAME" : "Fontnaam:", + "FIELD_HEADER_FONT_SIZE" : "Fontgrootte:", + "FIELD_HEADER_ENABLE_SFTP" : "SFTP mogelijk maken:", + "FIELD_HEADER_HOSTNAME" : "Servernaam:", + "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", + "FIELD_HEADER_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_PASSPHRASE" : "Wachtwoordzin:", + "FIELD_HEADER_PORT" : "Poort:", + "FIELD_HEADER_PRIVATE_KEY" : "Persoonlijke sleutel:", + "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", + "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", + "FIELD_HEADER_RECORDING_PATH" : "Opname map:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript naam:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript map:", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Zwart op wit", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grijs op zwart", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Groen op zwart", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Wit op zwart", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", + "SECTION_HEADER_CLIPBOARD" : "Klembord", + "SECTION_HEADER_DISPLAY" : "Scherm", + "SECTION_HEADER_NETWORK" : "Netwerk", + "SECTION_HEADER_RECORDING" : "Scherm Opname", + "SECTION_HEADER_SESSION" : "Sessie / Omgeving", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Tekst sessie opname)", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_COLOR_SCHEME" : "Kleuren combinatie:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatisch genereren typescript map:", + "FIELD_HEADER_FONT_NAME" : "Fontnaam:", + "FIELD_HEADER_FONT_SIZE" : "Fontgrootte:", + "FIELD_HEADER_HOSTNAME" : "Servernaam:", + "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", + "FIELD_HEADER_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_PASSWORD_REGEX" : "Wachtwoord reguliere expressie:", + "FIELD_HEADER_PORT" : "Poort:", + "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", + "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", + "FIELD_HEADER_RECORDING_PATH" : "Opname map:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript naam:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript map:", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Zwart op wit", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grijs op zwart", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Groen op zwart", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Wit op zwart", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", + "SECTION_HEADER_CLIPBOARD" : "Klembord", + "SECTION_HEADER_DISPLAY" : "Scherm", + "SECTION_HEADER_RECORDING" : "Scherm Opname", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Tekst Sessie Opname)", + "SECTION_HEADER_NETWORK" : "Netwerk" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Audio server naam:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Encodering:", + "FIELD_HEADER_COLOR_DEPTH" : "Kleurdiepte:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatisch genereren opname map:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DEST_HOST" : "Externe server:", + "FIELD_HEADER_DEST_PORT" : "Externe poort:", + "FIELD_HEADER_ENABLE_AUDIO" : "Inschakelen geluid:", + "FIELD_HEADER_ENABLE_SFTP" : "Inschakelen SFTP:", + "FIELD_HEADER_HOSTNAME" : "Servernaam:", + "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", + "FIELD_HEADER_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_PORT" : "Poort:", + "FIELD_HEADER_READ_ONLY" : "Alleen lezen:", + "FIELD_HEADER_RECORDING_NAME" : "Opname naam:", + "FIELD_HEADER_RECORDING_PATH" : "Opname map:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Standaard upload map:", + "FIELD_HEADER_SFTP_HOSTNAME" : "Servernaam:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Wachtwoordzin:", + "FIELD_HEADER_SFTP_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_SFTP_PORT" : "Poort:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Persoonlijke sleutel:", + "FIELD_HEADER_SFTP_USERNAME" : "Gebruikersnaam:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Verwissel rood/blauw componenten:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 kleuren", + "FIELD_OPTION_COLOR_DEPTH_16" : "Minder kleuren (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Echte kleuren (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Echte kleuren (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Lokaal", + "FIELD_OPTION_CURSOR_REMOTE" : "Extern", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Geluid", + "SECTION_HEADER_AUTHENTICATION" : "Authenticatie", + "SECTION_HEADER_CLIPBOARD" : "Klembord", + "SECTION_HEADER_DISPLAY" : "Scherm", + "SECTION_HEADER_NETWORK" : "Netwerk", + "SECTION_HEADER_RECORDING" : "Scherm Opname", + "SECTION_HEADER_REPEATER" : "VNC Repeater", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Instellingen" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "De gebruikgeschiedenis van verbindingen wordt hier onder getoond en kan gesorteerd worden door op de titel van de kolom te klikken. Voer een zoekterm in en klik op \"Zoeken\", om op specifieke resultaten te zoeken. Alleen de resultaten die voldoen aan de zoekterm zullen dan getoond worden.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Geen resultaten gevonden", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindingsnaam", + "TABLE_HEADER_SESSION_DURATION" : "Tijdsduur", + "TABLE_HEADER_SESSION_STARTDATE" : "Starttijd", + "TABLE_HEADER_SESSION_USERNAME" : "Gebruikersnaam", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Nieuwe Verbinding", + "ACTION_NEW_CONNECTION_GROUP" : "Nieuwe Verbindingsgroep", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Klik of tik op een verbinding hieronder om die verbinding te beheren. Afhankelijk van uw toegangsniveau kunnen verbindingen worden toegevoegd en verwijderd en hun eigenschappen (protocol, hostname, port, etc.) worden gewijzigd. ", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Verbindingen" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Taal Keuze:", + "FIELD_HEADER_PASSWORD" : "Wachtwoord:", + "FIELD_HEADER_PASSWORD_OLD" : "Huidig Wachtwoord:", + "FIELD_HEADER_PASSWORD_NEW" : "Nieuw Wachtwoord:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Bevestig Nieuw Wachtwoord:", + "FIELD_HEADER_USERNAME" : "Gebruikersnaam:", + + "HELP_DEFAULT_INPUT_METHOD" : "De standaard invoer methode bepaalt hoe toetsenbord gebeurtenissen ontvangen worden door Guacamole. Het veranderen van deze instelling kan nodig zijn bij gebruik van een mobiel apparaat of wanneer er via een IME getypt wordt. Deze instelling kan per verbinding worden overschreven via het Guacamole menu.", + "HELP_DEFAULT_MOUSE_MODE" : "De standaard muis emulatie modus bepaalt hoe de externe muis in nieuwe verbindingen omgaat met touch. Deze instelling kan per verbinding worden overschreven via het Guacamole menu.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LANGUAGE" : "Selecteer onderstaand een andere taal om alle text in Guacamole hieraan aan te passen. De beschikbare keuzes zijn afhankelijk van welke talen er geinstalleerd zijn.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Als u uw wachtwoord wilt wijzigen, voer dan uw huidige wachtwoord en uw nieuwe wachtwoord hieronder in en klik op \"Wijzig Wachtwoord\". Deze wijziging zal meteen actief zijn.", + + "INFO_PASSWORD_CHANGED" : "Wachtwoord gewijzigd.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Standaard Invoer Methode", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Standaard Muis Emulatie Modus", + "SECTION_HEADER_UPDATE_PASSWORD" : "Wijzig Wachtwoord" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Nieuwe Gebruiker", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Klik of tik op een van de onderstaande gebruikers om die te beheren. Afhankelijk van uw toegangsniveau kunnen gebruikers worden toegevoegd, verwijderd en hun wachtwoorden gewijzigd.", + + "SECTION_HEADER_USERS" : "Gebruikers", + + "TABLE_HEADER_USERNAME" : "Gebruikersnaam" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Beeindig Sessies", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Beeindig Sessie", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Deze pagina wordt gevuld met momenteel actieve verbindingen. De vermelde verbindingen en de mogelijkheid om die verbindingen te doden, zijn afhankelijk van uw toegangsniveau. Als u een of meerdere sessies wilt beeindigen, vink die sessie(s) dan aan en klik op \"Beeindig Sessies\". Door het verbreken van een sessie verliest de gebruiker ogenblikkelijk het contact met die sessie(s).", + + "INFO_NO_SESSIONS" : "Geen actieve sessies", + + "SECTION_HEADER_SESSIONS" : "Actieve Sessies", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Verbindingnaam", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Servernaam", + "TABLE_HEADER_SESSION_STARTDATE" : "Actief sinds", + "TABLE_HEADER_SESSION_USERNAME" : "Gebruikersnaam", + + "TEXT_CONFIRM_DELETE" : "Weet u zeker dat u alle geselecteerde sessies wilt beeindigen? De gebruikers van deze sessies zullen ogenblikkelijk hun verbinding met deze sessies verliezen." + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/no.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/no.json new file mode 100644 index 0000000000..2ddd389320 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/no.json @@ -0,0 +1,673 @@ +{ + + "NAME" : "Norsk Bokmål", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Avbryt", + "ACTION_CLONE" : "Klone", + "ACTION_CONTINUE" : "Fortsett", + "ACTION_DELETE" : "Slett", + "ACTION_DELETE_SESSIONS" : "Avslutt Sesjoner", + "ACTION_LOGIN" : "Logg inn", + "ACTION_LOGOUT" : "Logg ut", + "ACTION_MANAGE_CONNECTIONS" : "Forbindelser", + "ACTION_MANAGE_PREFERENCES" : "Mine valg", + "ACTION_MANAGE_SETTINGS" : "Innstillinger", + "ACTION_MANAGE_SESSIONS" : "Aktive Sesjoner", + "ACTION_MANAGE_USERS" : "Brukere", + "ACTION_NAVIGATE_BACK" : "Tilbake", + "ACTION_NAVIGATE_HOME" : "Hjem", + "ACTION_SAVE" : "Lagre", + "ACTION_SEARCH" : "Søk", + "ACTION_UPDATE_PASSWORD" : "Oppdater Passord", + "ACTION_VIEW_HISTORY" : "Historie", + + "DIALOG_HEADER_ERROR" : "Feil", + + "ERROR_PASSWORD_BLANK" : "Passordet ditt kan ikke være blankt.", + "ERROR_PASSWORD_MISMATCH" : "Passordene er ikke like.", + + "FIELD_HEADER_PASSWORD" : "Passord:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Gjenta Passord:", + + "FIELD_PLACEHOLDER_FILTER" : "Filter", + + "FORMAT_DATE_TIME_PRECISE" : "ååå-mm-dd TT:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Blir brukt av {USERS} {USERS, plural, one{user} other{users}}.", + + "NAME" : "Guacamole ${project.version}", + + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{second} other{seconds}}} minute{{VALUE, plural, one{minute} other{minutes}}} hour{{VALUE, plural, one{hour} other{hours}}} day{{VALUE, plural, one{day} other{days}}} other{}}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Tøm", + "ACTION_DISCONNECT" : "Koble fra", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Koble til på nytt", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_UPLOAD_FILES" : "Last Opp Filer", + + "DIALOG_HEADER_CONNECTING" : "Kobler til", + "DIALOG_HEADER_CONNECTION_ERROR" : "Feil ved tilkobling", + "DIALOG_HEADER_DISCONNECTED" : "Frakoblet", + + "ERROR_CLIENT_201" : "Denne tilkoblingen har blitt lukket fordi server er opptatt. Vent noen minutter og prøv igjen.", + "ERROR_CLIENT_202" : "Guacamole har lukket forbindelsen fordi serveren bruker for lang tid på å svare. Prøv igjen eller kontakt systemansvarlig.", + "ERROR_CLIENT_203" : "Det har oppstått en feil på terminalserveren og forbindelsen er lukket. Prøv igjen eller kontakt systemansvarlig.", + "ERROR_CLIENT_205" : "Denne forbindelsen er lukket fordi den er i konflikt med en annen forbindelse. Prøv igjen senere.", + "ERROR_CLIENT_301" : "Innlogging feilet. Koble til på nytt og prøv igjen.", + "ERROR_CLIENT_303" : "Du har ikke tilgang til denne forbindelsen. Kontakt systemansvarlig eller sjekk dine systeminnstillinger dersom du trenger tilgang.", + "ERROR_CLIENT_308" : "Guacamole har lukket forbindelsen fordi nettleseren din ikke har svart og virker frakoblet. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen.", + "ERROR_CLIENT_31D" : "Guacamole nekter tilgang til denne forbindelsen fordi du har brukt opp maks antall samtidige forbindelser for en bruker. Avslutt en eller flere forbindelser og prøv igjen.", + "ERROR_CLIENT_DEFAULT" : "Det har oppstått en intern feil i Guacamole og forbindelsen er terminert. Kontakt systemansvarlig dersom problemet fortsetter eller sjekk systemlogger.", + + "ERROR_TUNNEL_201" : "Guacamole har avvist oppkoblingen fordi det er for mange aktive forbindelser. Vent noen minutter og prøv igjen.", + "ERROR_TUNNEL_202" : "Forbindelsen er lukket fordi server bruker for lang tid på å svare. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen eller kontakt systemadministrator.", + "ERROR_TUNNEL_203" : "Serveren støtte på en feil og har lukket forbindelsen. Prøv igjen eller kontakt systemadministrator.", + "ERROR_TUNNEL_204" : "Den etterspurte tilkoblingen eksisterer ikke. Sjekk navnet på tilkoblingen og prøv igjen.", + "ERROR_TUNNEL_205" : "Denne tilkoblingen er i bruk og flere forbindelser til denne tilkoblingen er ikke lov. Prøv igjen senere.", + "ERROR_TUNNEL_301" : "Du har ikke tilgang til denne tilkoblingen fordi du er ikke pålogget. Logg inn og prøv igjen.", + "ERROR_TUNNEL_303" : "Du har ikke tilgang til denne tilkoblingen. Be systemadministrator legge deg til i listen over godkjente brukere dersom du skal ha tilgang eller sjekk systeminstillingene dine.", + "ERROR_TUNNEL_308" : "Guacamole har lukket forbindelsen fordi nettleseren din ikke svarer og virker frakoblet. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen.", + "ERROR_TUNNEL_31D" : "Guacamole nekter tilgang til denne forbindelsen fordi du har brukt opp maks antall samtidige forbindelser for en bruker. Avslutt en eller flere forbindelser og prøv igjen.", + "ERROR_TUNNEL_DEFAULT" : "En intern feil har oppstått i Guacamole og forbindelsen er terminert. Kontakt systemadministrator dersom problemet fortsetter eller sjekk systemloggene dine.", + + "ERROR_UPLOAD_100" : "Filoverføring er enten ikke støttet eller ikke aktivert. Kontakt systemadministrator eller sjekk systemlogger.", + "ERROR_UPLOAD_201" : "For mange filer blir overført. Vent til aktive overføringer fullfører og prøv igjen.", + "ERROR_UPLOAD_202" : "Filen kan ikke overføres fordi terminalserveren bruker for lang tid på å svare. Prøv igjen eller kontakt systemadministrator.", + "ERROR_UPLOAD_203" : "Det oppstod en feil på terminalserveren under overføring. Prøv igjen eller kontakt systemansvarlig.", + "ERROR_UPLOAD_204" : "Målmappen for filoverføringen eksisterer ikke. Sjekk målmappe og prøv igjen.", + "ERROR_UPLOAD_205" : "Målet til filoverføringen er låst. Vent til aktive jobber fullfører og prøv igjen.", + "ERROR_UPLOAD_301" : "Du har ikke tillatelse til å laste opp denne filen fordi du er ikke logget inn. Logg inn og prøv igjen.", + "ERROR_UPLOAD_303" : "Du har ikke tillatelse til å laste opp denne filen. Sjekk systeminnstillingene dine eller kontakt systemadministrator dersom du skal ha tilgang.", + "ERROR_UPLOAD_308" : "Filoverføringen har stoppet. Dette kommer ofte av nettverksproblemer som f.eks. ustabilt wifi-signal eller tregt nettverk. Sjekk tilkoblingen din og prøv igjen.", + "ERROR_UPLOAD_31D" : "For mange filer blir overført. Vent til aktive overføringer fullfører og prøv igjen.", + "ERROR_UPLOAD_DEFAULT" : "En intern feil har oppstått i Guacamole og forbindelsen er terminert. Kontakt systemadministrator dersom problemet fortsetter eller sjekk systemloggene dine.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Tekst som er kopiert eller klippet i Guacamole vises her. Endringer i teksten under vil påvirke den eksterne utklippstavlen.", + "HELP_INPUT_METHOD_NONE" : "Ingen innenhet er brukt. Tastetrykk fra et fysisk tilkoblet tastatur blir akseptert.", + "HELP_INPUT_METHOD_OSK" : "Vis og aksepter tastetrykk fra det innebygde skjermtastaturet i Guacamole. Skjermtastaturet tillater tasting av tastekombinasjoner som ellers kan være umulig (f.eks. Ctrl-Alt-Del).", + "HELP_INPUT_METHOD_TEXT" : "Tillat tasting av tekst og emuler hendinger basert på tastet tekst. Dette er nødvendig for enheter som mobiltelefoner som mangler fysisk tastatur.", + "HELP_MOUSE_MODE" : "Bestemmer hvordan den fjernstyrte musen reagerer på berøringer.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Trykk for å klikke. Klikket oppstår der man berører.", + "HELP_MOUSE_MODE_RELATIVE" : "Dra for å flytte musemarkøren og trykk for å klikke. Klikket oppstår på plasseringen til musepekeren.", + + "INFO_NO_FILE_TRANSFERS" : "Ingen filoverføringer.", + + "NAME_INPUT_METHOD_NONE" : "Ingen", + "NAME_INPUT_METHOD_OSK" : "Skjermtastatur", + "NAME_INPUT_METHOD_TEXT" : "Inntasting", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Touch-skjerm", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", + "SECTION_HEADER_DEVICES" : "Enheter", + "SECTION_HEADER_DISPLAY" : "Skjerm", + "SECTION_HEADER_FILE_TRANSFERS" : "Filoverføringer", + "SECTION_HEADER_INPUT_METHOD" : "Standard Innenhet", + "SECTION_HEADER_MOUSE_MODE" : "Metode for musemulering", + + "TEXT_ZOOM_AUTO_FIT" : "Skaler automatisk til nettleservindu.", + "TEXT_CLIENT_STATUS_IDLE" : "Passiv.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Kobler til Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Du er frakoblet.", + "TEXT_CLIENT_STATUS_WAITING" : "Tilkoblet Guacamole. Venter på svar...", + "TEXT_RECONNECT_COUNTDOWN" : "Kobler til på nytt om {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Default (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Klikk for å vise passord", + "HELP_HIDE_PASSWORD" : "Klikk for å skjule passord" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Ingen nylige tilkoblinger.", + + "PASSWORD_CHANGED" : "Passord endret.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Alle tilkoblinger", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Nylige tilkoblinger" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Ugyldig Pålogging", + + "FIELD_HEADER_USERNAME" : "Brukernavn", + "FIELD_HEADER_PASSWORD" : "Passord" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Slett tilkobling", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Lokasjon:", + "FIELD_HEADER_NAME" : "Navn:", + "FIELD_HEADER_PROTOCOL" : "Protokoll:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Aktiv Nå", + "INFO_CONNECTION_NOT_USED" : "Denne tilkoblingen har ikke blitt brukt enda.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Rediger Tilkobling", + "SECTION_HEADER_HISTORY" : "Brukslogg", + "SECTION_HEADER_PARAMETERS" : "Parametre", + + "TABLE_HEADER_HISTORY_USERNAME" : "Brukernavn", + "TABLE_HEADER_HISTORY_START" : "Starttid", + "TABLE_HEADER_HISTORY_DURATION" : "Varighet", + + "TEXT_CONFIRM_DELETE" : "Tilkoblinger kan ikke gjennopprettes etter at de er slettet. Er du sikker på at du vil slette denne tilkoblingen?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Slett Tilkoblingsgruppe", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Lokasjon:", + "FIELD_HEADER_NAME" : "Navn:", + "FIELD_HEADER_TYPE" : "Type:", + + "NAME_TYPE_BALANCING" : "Balansert", + "NAME_TYPE_ORGANIZATIONAL" : "Organisasjon", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Rediger Tilkoblingsgruppe", + + "TEXT_CONFIRM_DELETE" : "Tilkoblingsgrupper kan ikke gjennopprettes etter at de er slettet. Er du sikker på at du vil slette denne tilkoblingsgruppen?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Slett Bruker", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrer systemet:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Endre eget passord:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Opprett ny bruker:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Opprett ny tilkobling:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Opprett ny tilkoblingsgruppe:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Brukernavn:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_READ_ONLY" : "Beklager, denne brukerkontoen kan ikke redigeres.", + + "SECTION_HEADER_CONNECTIONS" : "Tilkoblinger", + "SECTION_HEADER_EDIT_USER" : "Rediger Bruker", + "SECTION_HEADER_PERMISSIONS" : "Tillatelser", + + "TEXT_CONFIRM_DELETE" : "Brukere kan ikke gjenopprettes etter at de er slettet. Er du sikker på du vil slette denne brukeren?" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Klientnavn:", + "FIELD_HEADER_COLOR_DEPTH" : "Fargedybde:", + "FIELD_HEADER_CONSOLE" : "Administratorkonsoll:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Støtte for lyd i konsoll:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Opprett disk automatisk:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", + "FIELD_HEADER_DISABLE_AUDIO" : "Deaktiver lyd:", + "FIELD_HEADER_DISABLE_AUTH" : "Deaktiver autentisering:", + "FIELD_HEADER_DOMAIN" : "Domene:", + "FIELD_HEADER_DPI" : "Oppløsning (DPI):", + "FIELD_HEADER_DRIVE_PATH" : "Sti til disk:", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Aktiver skrivebordssammensetning (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Aktiver disk:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Aktiver fontutjevning (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Vis innhold i vindu ved flytting:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Aktiver menyanimasjoner:", + "FIELD_HEADER_ENABLE_PRINTING" : "Aktiver utskrift:", + "FIELD_HEADER_ENABLE_SFTP" : "Aktiver SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Aktiver tema:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Ativer bakgrunnsbilde:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Domene:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Vertsnavn:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Passord:", + "FIELD_HEADER_GATEWAY_PORT" : "Port:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Brukernavn:", + "FIELD_HEADER_HEIGHT" : "Høyde:", + "FIELD_HEADER_HOSTNAME" : "Vertsnavn:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorer serversertifikat:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Oppstartsprogram:", + "FIELD_HEADER_PASSWORD" : "Passord:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Pre-tilkoblings BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDP kilde-ID:", + "FIELD_HEADER_RECORDING_NAME" : "Navn på opptak:", + "FIELD_HEADER_RECORDING_PATH" : "Sti for opptak:", + "FIELD_HEADER_RESIZE_METHOD" : "Metode for reskalering:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parameter:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Arbeidsmappe:", + "FIELD_HEADER_REMOTE_APP" : "Program:", + "FIELD_HEADER_SECURITY" : "Sikkerhetsmodus:", + "FIELD_HEADER_SERVER_LAYOUT" : "Tastaturutforming:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Standard mappe for opplasting:", + "FIELD_HEADER_SFTP_HOSTNAME" : "Vertsnavn:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passfrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Passord:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privat nøkkel:", + "FIELD_HEADER_SFTP_USERNAME" : "Brukernavn:", + "FIELD_HEADER_STATIC_CHANNELS" : "Statiske kanalnavn:", + "FIELD_HEADER_USERNAME" : "Brukernavn:", + "FIELD_HEADER_WIDTH" : "Bredde:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Tusener av farger (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Ekte farger (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Ekte farger (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 farger", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Display Update\" virtual channel (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Koble til på nytt", + + "FIELD_OPTION_SECURITY_ANY" : "Alle", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Network Level Authentication)", + "FIELD_OPTION_SECURITY_RDP" : "RDP kryptering", + "FIELD_OPTION_SECURITY_TLS" : "TLS kryptering", + + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Tysk (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US Engelsk (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Fransk (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiensk (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japansk (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polsk (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Svensk (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Autentisering", + "SECTION_HEADER_BASIC_PARAMETERS" : "Grunnleggende Innstillinger", + "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Enhet omdirigering", + "SECTION_HEADER_DISPLAY" : "Skjerm", + "SECTION_HEADER_NETWORK" : "Nettverk", + "SECTION_HEADER_PERFORMANCE" : "Ytelse", + "SECTION_HEADER_PRECONNECTION_PDU" : "Pre-tilkobling PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Skjermopptak", + "SECTION_HEADER_REMOTEAPP" : "Eksternt Program", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_COLOR_SCHEME" : "Fargeskjema:", + "FIELD_HEADER_COMMAND" : "Kjør kommando:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Opprett sti for typescript automatisk:", + "FIELD_HEADER_FONT_NAME" : "Fontnavn:", + "FIELD_HEADER_FONT_SIZE" : "Fontstørrelse:", + "FIELD_HEADER_ENABLE_SFTP" : "Aktiver SFTP:", + "FIELD_HEADER_HOSTNAME" : "Servernavn:", + "FIELD_HEADER_USERNAME" : "Brukernavn:", + "FIELD_HEADER_PASSWORD" : "Passord:", + "FIELD_HEADER_PASSPHRASE" : "Passfrase:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Privat nøkkel:", + "FIELD_HEADER_RECORDING_NAME" : "Navm på opptak:", + "FIELD_HEADER_RECORDING_PATH" : "Sti til opptak:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript navn:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript sti:", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Svart på hvit", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grå på svart", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grønn på svart", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Hvit på svart", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Autentisering", + "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", + "SECTION_HEADER_DISPLAY" : "Skjerm", + "SECTION_HEADER_NETWORK" : "Nettverk", + "SECTION_HEADER_RECORDING" : "Skjermopptak", + "SECTION_HEADER_SESSION" : "Sesjon / Miljø", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Opptak av tekstsesjon)", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_COLOR_SCHEME" : "Fargeskjema:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Opprett sti for typescript automatisk:", + "FIELD_HEADER_FONT_NAME" : "Fontnavn:", + "FIELD_HEADER_FONT_SIZE" : "Fontstørrelse:", + "FIELD_HEADER_HOSTNAME" : "Servernavn:", + "FIELD_HEADER_USERNAME" : "Brukernavn:", + "FIELD_HEADER_PASSWORD" : "Passord:", + "FIELD_HEADER_PASSWORD_REGEX" : "Passord regulært uttrykk:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_RECORDING_NAME" : "Navn på opptak:", + "FIELD_HEADER_RECORDING_PATH" : "Sti til opptak:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript navn:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript sti:", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Svart på hvit", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Grå på svart", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Grønn på svart", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Hvit på svart", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Autentisering", + "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", + "SECTION_HEADER_DISPLAY" : "Skjerm", + "SECTION_HEADER_RECORDING" : "Skjermopptak", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (Opptak av tekstsesjon)", + "SECTION_HEADER_NETWORK" : "Nettverk" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Lydserver:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Koding:", + "FIELD_HEADER_COLOR_DEPTH" : "Fargedybde:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Opprett sti for opptak automatisk:", + "FIELD_HEADER_CURSOR" : "Peker:", + "FIELD_HEADER_DEST_HOST" : "Målserver:", + "FIELD_HEADER_DEST_PORT" : "Målport:", + "FIELD_HEADER_ENABLE_AUDIO" : "Aktiver lyd:", + "FIELD_HEADER_ENABLE_SFTP" : "Aktiver SFTP:", + "FIELD_HEADER_HOSTNAME" : "Servernavn:", + "FIELD_HEADER_USERNAME" : "Brukernavn:", + "FIELD_HEADER_PASSWORD" : "Passord:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Skrivebeskyttet:", + "FIELD_HEADER_RECORDING_NAME" : "Navn på opptak:", + "FIELD_HEADER_RECORDING_PATH" : "Sti til opptak:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Standard mappe for opplasting:", + "FIELD_HEADER_SFTP_HOSTNAME" : "Servernavn:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Passfrase:", + "FIELD_HEADER_SFTP_PASSWORD" : "Passord:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Privat nøkkel:", + "FIELD_HEADER_SFTP_USERNAME" : "Brukernavn:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Bytt røde/blå komponenter:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 farger", + "FIELD_OPTION_COLOR_DEPTH_16" : "Tusener av farger (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "Ekte farger (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "Ekte farger (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Lokal", + "FIELD_OPTION_CURSOR_REMOTE" : "Ekstern", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Lyd", + "SECTION_HEADER_AUTHENTICATION" : "Autentisering", + "SECTION_HEADER_CLIPBOARD" : "Utklippstavle", + "SECTION_HEADER_DISPLAY" : "Skjerm", + "SECTION_HEADER_NETWORK" : "Nettverk", + "SECTION_HEADER_RECORDING" : "Skjermopptak", + "SECTION_HEADER_REPEATER" : "VNC Repeater", + "SECTION_HEADER_SFTP" : "SFTP" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Innstillinger" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Tidligere forbindelser er listet her historisk og kan sorteres ved å klikke kolonneoverskriftene. For å lete etter spesifikke poster kan du legge inn en filtreringstekst og klikke \"Søk\". Bare poster som passer filtreringsteksten vil bli listet opp.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Ingen poster funnet", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Navn på tilkobling", + "TABLE_HEADER_SESSION_DURATION" : "Varighet", + "TABLE_HEADER_SESSION_STARTDATE" : "Starttidspunkt", + "TABLE_HEADER_SESSION_USERNAME" : "Brukernavn", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Ny Forbindelse", + "ACTION_NEW_CONNECTION_GROUP" : "Ny Gruppe", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Klikk eller berør en forbindelse under for å administrere forbindelsen. Avhengig av ditt tilgangsnivå kan forbindelser opprettes, slettes og egenskaper (protokoll, server, port, m.m.) kan endres.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Forbindelser" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Visningsspråk:", + "FIELD_HEADER_PASSWORD" : "Passord:", + "FIELD_HEADER_PASSWORD_OLD" : "Nåværende Passord:", + "FIELD_HEADER_PASSWORD_NEW" : "Nytt Passord:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Verifiser Nytt Passord:", + "FIELD_HEADER_USERNAME" : "Brukernavn:", + + "HELP_DEFAULT_INPUT_METHOD" : "Standard inndatametode bestemmer hvordan tastetrykk mottas av Guacamole. Det kan være nødvendig å endre på dette når du bruker mobile enheter eller IME. Denne instillingen kan overstyres på hver forbindelse i Guacamolemenyen.", + "HELP_DEFAULT_MOUSE_MODE" : "Standard musemulering bestemmer hvordan den eksterne musen vil oppføre seg med hensyn til berøringer. Denne instillingen kan overstyres på hver forbindelse i Guacamolemenyen.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LANGUAGE" : "Velg et språk under for å endre språket på all tekst i Guacamole. Tilgjengelige valg er avhengig av hvilke språk som er installert.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Skriv inn ditt gamle passord og det nye passordet under dersom du ønsker å endre passord. Klikk \"Oppdater Passord\". Endringen trer i kraft umiddelbart.", + + "INFO_PASSWORD_CHANGED" : "Passord endret.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Standard Innenhet", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Standard Metode For Musemulering", + "SECTION_HEADER_UPDATE_PASSWORD" : "Endre Passord" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Ny Bruker", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Klikk på en bruker under for å administrere den brukeren. Avhengig av din tilgang kan brukere legges til, slettes og passordet kan endres.", + + "SECTION_HEADER_USERS" : "Brukere", + + "TABLE_HEADER_USERNAME" : "Brukernavn" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Avbryt sesjoner", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Avbryt Sesjoner", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Denne siden vil bli fylt med nåværende aktive forbindelser. Tilkoblingene oppført og evnen til å drepe disse tilkoblingene er avhengig av tilgangsnivået ditt. Dersom du ønsker å avbryte en eller flere sesjoner haker du av boksen ved siden av sesjonen og klikker \"Avbryt sesjoner\". Avbrytes en sesjon vil brukeren umiddelbart kobles av den aktuelle sesjonen.", + + "INFO_NO_SESSIONS" : "Ingen aktive sesjoner", + + "SECTION_HEADER_SESSIONS" : "Aktive Sesjoner", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Navn på forbindelse", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Server", + "TABLE_HEADER_SESSION_STARTDATE" : "Aktiv siden", + "TABLE_HEADER_SESSION_USERNAME" : "Brukernavn", + + "TEXT_CONFIRM_DELETE" : "Er du sikker på at du vil avslutte valgte sesjoner? Brukere av disse sesjonene vil bli frakoblet umiddelbart." + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pl.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pl.json new file mode 100644 index 0000000000..2be8d8fb6b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pl.json @@ -0,0 +1,1052 @@ +{ + + "NAME" : "Polski", + + "APP" : { + + "NAME" : "Apache Guacamole", + "VERSION" : "${project.version}", + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Anuluj", + "ACTION_CLONE" : "Klonuj", + "ACTION_CONTINUE" : "Kontynuuj", + "ACTION_DELETE" : "Usuń", + "ACTION_DELETE_SESSIONS" : "Zakończ Sesję", + "ACTION_DOWNLOAD" : "Pobierz", + "ACTION_LOGIN" : "Zaloguj", + "ACTION_LOGIN_AGAIN" : "Zaloguj Ponownie", + "ACTION_LOGOUT" : "Wyloguj", + "ACTION_MANAGE_CONNECTIONS" : "Połączenia", + "ACTION_MANAGE_PREFERENCES" : "Preferencje", + "ACTION_MANAGE_SETTINGS" : "Ustawienia", + "ACTION_MANAGE_SESSIONS" : "Aktywne Sesje", + "ACTION_MANAGE_USERS" : "Użytkownicy", + "ACTION_MANAGE_USER_GROUPS" : "Grupy", + "ACTION_NAVIGATE_BACK" : "Wstecz", + "ACTION_NAVIGATE_HOME" : "Główna", + "ACTION_PAUSE" : "Pauza", + "ACTION_PLAY" : "Odtwórz", + "ACTION_SAVE" : "Zapisz", + "ACTION_SEARCH" : "Szukaj", + "ACTION_SHARE" : "Udostępnij", + "ACTION_UPDATE_PASSWORD" : "Zmień Hasło", + "ACTION_VIEW_HISTORY" : "Historia", + "ACTION_VIEW_RECORDING" : "Obejrzyj", + + "DIALOG_HEADER_ERROR" : "Błąd", + + "ERROR_PAGE_UNAVAILABLE" : "Wystąpił błąd i ta akcja nie może zostać zakończona. Jeśli problem nie zniknie, powiadom administratora systemu.", + "ERROR_PASSWORD_BLANK" : "Hasło nie może być puste.", + "ERROR_PASSWORD_MISMATCH" : "Podane hasła nie pasują do siebie.", + + "FIELD_HEADER_PASSWORD" : "Hasło:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Powtórz Hasło:", + + "FIELD_PLACEHOLDER_FILTER" : "Filtruj", + + "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Aktualnie w użyciu przez {USERS} {USERS, plural, one{użytkownika} other{użytkowników}}.", + "INFO_LOGGED_OUT" : "Zostałeś wylogowany.", + + "TEXT_ANONYMOUS_USER" : "Anonimowy", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{sekunda} other{sekund(-y)}}} minute{{VALUE, plural, one{minuta} other{minut(y)}}} hour{{VALUE, plural, one{godzina} other{godzin(y)}}} day{{VALUE, plural, one{dzień} other{dni}}} other{}}", + "TEXT_UNTRANSLATED" : "{MESSAGE}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Wyczyść", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_DISCONNECT" : "Rozłącz", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Połącz Ponownie", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Wyślij Pliki", + + "DIALOG_HEADER_CONNECTING" : "Łączenie", + "DIALOG_HEADER_CONNECTION_ERROR" : "Błąd Połączenia", + "DIALOG_HEADER_DISCONNECTED" : "Rozłączono", + + "ERROR_CLIENT_201" : "Połączenie zostało zamknięte, ponieważ serwer jest zajęty. Odczekaj kilka minut i spróbuj ponownie.", + "ERROR_CLIENT_202" : "Serwer Guacamole zamknął połączenie, ponieważ zdalny pulpit nie odpowiada przez zbyt długi czas. Spróbuj ponownie lub skontaktuj się z administratorem.", + "ERROR_CLIENT_203" : "Serwer zdalnego pulpitu napotkał błąd i zamknął połączenie. Spróbuj ponownie lub skontaktuj się z administratorem.", + "ERROR_CLIENT_207" : "Serwer zdalnego pulpitu jest aktualnie nieosiągalny. Jeśli problem nie zniknie powiadom administratora systemu lub sprawdź log systemu.", + "ERROR_CLIENT_208" : "Serwer zdalnego pulpitu jest aktualnie nieosiągalny. Jeśli problem nie zniknie powiadom administratora systemu lub sprawdź log systemu.", + "ERROR_CLIENT_209" : "Serwer zdalnego pulpitu zamknął połączenie, ponieważ koliduje z innym połączeniem. Spróbuj ponownie później.", + "ERROR_CLIENT_20A" : "Serwer zdalnego pulpitu zamknął połączenie, ponieważ wydaje się być nieaktywne. Jeśli nie jest to pożądane zachowanie powiadom administratora systemu lub sprawdź ustawienia.", + "ERROR_CLIENT_20B" : "Serwer zdalnego pulpitu wymusił zamknięcie połączenia. Jeśli nie jest to pożądane zachowanie powiadom administratora systemu lub sprawdź log systemu.", + "ERROR_CLIENT_301" : "Logowanie nieudane. Spróbuj ponownie.", + "ERROR_CLIENT_303" : "Serwer zdalnego pulpitu nie zezwolił na połączenie. Poproś administratora systemu o nadanie uprawnień dla Twojego konta lub sprawdź ustawienia.", + "ERROR_CLIENT_308" : "Serwer Guacamole zamknął połączenie, ponieważ nie otrzymał odpowiedzi od Twojej przeglądarki przez zbyt długi czas. Zazwyczaj jest to spowodowane niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie.", + "ERROR_CLIENT_31D" : "Serwer Guacamole nie zezwolił na połączenie, ponieważ wykorzystałeś limit jednoczesnych połączeń dla pojedynczego użytkownika. Zamknij jedno lub kilka połączeń i spróbuj ponownie.", + "ERROR_CLIENT_DEFAULT" : "Wystąpił błąd wewnętrzny serwera Guacamole i połączenie zostało zakończone. Jeśli problem nie zniknie, powiadom administratora systemu lub sprawdź log systemu.", + + "ERROR_TUNNEL_201" : "Serwer Guacamole odrzucił tę próbę połączenia, ponieważ istnieje zbyt wiele aktywnych połączeń. Poczekaj kilka minut i spróbuj ponownie.", + "ERROR_TUNNEL_202" : "Połączenie zostało zamknięte, ponieważ serwer nie odpowiada przez zbyt długo czas. Zazwyczaj spowodowane jest to niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie lub poinformuj administratora systemu.", + "ERROR_TUNNEL_203" : "Serwer napotkał błąd i zamknął połączenie. Spróbuj ponownie lub skontaktuj się z administratorem systemu", + "ERROR_TUNNEL_204" : "Żądane połączenie nie istnieje. Sprawdź nazwę połączenia i spróbuj ponownie", + "ERROR_TUNNEL_205" : "To połączenie jest aktualnie w użyciu oraz jednoczesny dostęp dla tego połączenia nie jest dozwolony. Spróbuj ponownie później.", + "ERROR_TUNNEL_207" : "Serwer Guacamole jest aktualnie nieosiągalny. Sprawdź swoją sieć i spróbuj ponownie.", + "ERROR_TUNNEL_208" : "Serwer Guacamole nie akceptuje połączeń. Sprawdź swoją sieć i spróbuj ponownie.", + "ERROR_TUNNEL_301" : "Nie masz dostępu do tego połączenia, ponieważ nie jesteś zalogowany. Zaloguj się i spróbuj ponownie.", + "ERROR_TUNNEL_303" : "Nie masz uprawnień do tego połączenia. Jeśli potrzebujesz uprawnień poproś administratora systemu o dodanie Cię do listy użytkowników z zezwoleniem lub sprawdź ustawienia systemu. ", + "ERROR_TUNNEL_308" : "Serwer Guacamole zamknął połączenie, ponieważ nie otrzymał odpowiedzi od Twojej przeglądarki przez zbyt długi czas. Zazwyczaj jest to spowodowane niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie.", + "ERROR_TUNNEL_31D" : "Serwer Guacamole nie zezwolił na połączenie, ponieważ wykorzystałeś limit jednoczesnych połączeń dla pojedynczego użytkownika. Zamknij jedno lub kilka połączeń i spróbuj ponownie.", + "ERROR_TUNNEL_DEFAULT" : "Wystąpił błąd wewnętrzny serwera Guacamole i połączenie zostało zakończone. Jeśli problem nie zniknie, powiadom administratora systemu lub sprawdź log systemu.", + + "ERROR_UPLOAD_100" : "Transfer plików jest nie wspierany lub wyłączony. Skontaktuj się z administratorem systemu lub sprawdź log systemu.", + "ERROR_UPLOAD_201" : "Zbyt wiele plików jest aktualnie transferowanych. Poczekaj na zakończenie trwających transferów i spróbuj ponownie.", + "ERROR_UPLOAD_202" : "Plik nie może zostać przesłany, ponieważ Serwer zdalnego pulpitu nie odpowiada przez zbyt długi czas. Spróbuj ponownie lub skontaktuj się z administratorem systemu", + "ERROR_UPLOAD_203" : "Serwer zdalnego pulpitu napotkał na błąd podczas transferu. Spróbuj ponownie lub skontaktuj się z administratorem systemu", + "ERROR_UPLOAD_204" : "Docelowa ścieżka transferu pliku nie istnieje. Upewnij się, że ścieżka docelowa istnieje i spróbuj ponownie.", + "ERROR_UPLOAD_205" : "Lokalizacja docelowa dla transferu pliku jest aktualnie zablokowana. Poczekaj na zakończenie trwający zadań i spróbuj ponownie.", + "ERROR_UPLOAD_301" : "Nie masz uprawnień do przesłania tego pliku, ponieważ jest nie zalogowany. Zaloguj się i spróbuj ponownie.", + "ERROR_UPLOAD_303" : "Nie masz uprawnień do przesłania tego pliku. Jeśli potrzebujesz dostępu sprawdź ustawienia systemu lub skontaktuj się z administratorem systemu.", + "ERROR_UPLOAD_308" : "Transfer pliku utknął w martwym punkcie. Zazwyczaj jest to spowodowane niską szybkością i jakością połączenia. Sprawdź swoje ustawienia sieci i spróbuj ponownie.", + "ERROR_UPLOAD_31D" : "Zbyt wiele plików jest aktualnie transferowanych. Poczekaj na zakończenie trwających transferów i spróbuj ponownie.", + "ERROR_UPLOAD_DEFAULT" : "Wystąpił błąd wewnętrzny serwera Guacamole i połączenie zostało zakończone. Jeśli problem nie zniknie, powiadom administratora systemu lub sprawdź log systemu.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Tekst skopiowany/wycięty wewnątrz serwera Guacamole pojawi się tutaj. Zmiany dokonane w tym miejscu będą miały wpływ na zawartość zdalnego schowka", + "HELP_INPUT_METHOD_NONE" : "Żadna metoda wejścia nie jest w użyciu. Wejście klawiatury jest akceptowane z podłączonej fizycznej klawiatury.", + "HELP_INPUT_METHOD_OSK" : "Wyświetl i zaakceptuj dane wejściowe z wbudowanej klawiatury ekranowej Guacamole. Klawiatura ekranowa umożliwia wpisywanie kombinacji klawiszy, które w innym przypadku byłyby niemożliwe (takich jak Ctrl-Alt-Del)", + "HELP_INPUT_METHOD_TEXT" : "Zezwalaj na pisanie tekstu i emuluj zdarzenia klawiatury na podstawie wpisanego tekstu. Jest to konieczne w przypadku urządzeń takich jak telefony komórkowe, które nie mają fizycznej klawiatury.", + "HELP_MOUSE_MODE" : "Określa zachowanie zdalnej myszy w odniesieniu do dotknięć.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Dotknij, aby kliknąć. Kliknięcie następuje w miejscu dotknięcia.", + "HELP_MOUSE_MODE_RELATIVE" : "Przeciągnij, aby przesunąć wskaźnik myszy i dotknij, aby kliknąć. Kliknięcie następuje w miejscu, w którym znajduje się wskaźnik.", + "HELP_SHARE_LINK" : "Aktualne połączenie jest udostępniane, dostęp może uzyskać każdy posiadający {LINKS, plural, one{link} other{linki}}:", + + "INFO_CONNECTION_SHARED" : "To połączenie jest teraz udostępniane.", + "INFO_NO_FILE_TRANSFERS" : "Brak transferów plików.", + + "NAME_INPUT_METHOD_NONE" : "Brak", + "NAME_INPUT_METHOD_OSK" : "Klawiatura ekranowa", + "NAME_INPUT_METHOD_TEXT" : "Pole tekstowe", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Ekran dotykowy", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Schowek", + "SECTION_HEADER_DEVICES" : "Urządzenia", + "SECTION_HEADER_DISPLAY" : "Wyświetlanie", + "SECTION_HEADER_FILE_TRANSFERS" : "Transfer Plików", + "SECTION_HEADER_INPUT_METHOD" : "Metoda wejścia", + "SECTION_HEADER_MOUSE_MODE" : "Tryb emulacji myszy", + + "TEXT_ZOOM_AUTO_FIT" : "Automatycznie dopasuj do okna przeglądarki", + "TEXT_CLIENT_STATUS_IDLE" : "Bezczynne.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Łączenie z Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Zostałeś rozłączony.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "Połączenie sieciowe z serwerem Guacamole wydaje się być niestabilne.", + "TEXT_CLIENT_STATUS_WAITING" : "Połączono z Guacamole. Czekanie na odpowiedź...", + "TEXT_RECONNECT_COUNTDOWN" : "Ponowne połączenie za {REMAINING} {REMAINING, plural, one{sekundę} other{sekund(-y)}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Ukryj", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Pokaż", + + "FIELD_HEADER_BACKGROUND" : "Drugi plan", + "FIELD_HEADER_FOREGROUND" : "Pierwszy plan", + + "FIELD_OPTION_CUSTOM" : "Niestandardowy...", + + "SECTION_HEADER_DETAILS" : "Szczegóły:" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Domyślny (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Naciśnij aby pokazać hasło", + "HELP_HIDE_PASSWORD" : "Naciśnij aby ukryć hasło" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Brak ostatnich połączeń.", + + "PASSWORD_CHANGED" : "Hasło zmienione.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Wszystkie połączenia", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Ostatnie połączenia" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "Anonimowy" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Niepoprawny Login", + + "FIELD_HEADER_USERNAME" : "Użytkownik", + "FIELD_HEADER_PASSWORD" : "Hasło" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Połączenie", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Lokalizacja:", + "FIELD_HEADER_NAME" : "Nazwa:", + "FIELD_HEADER_PROTOCOL" : "Protokół:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Aktywne Teraz", + "INFO_CONNECTION_NOT_USED" : "To połączenie nie zostało jeszcze użyte.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Edytuj Połączenie", + "SECTION_HEADER_HISTORY" : "Historia Użycia", + "SECTION_HEADER_PARAMETERS" : "Parametry", + + "TABLE_HEADER_HISTORY_USERNAME" : "Użytkownik", + "TABLE_HEADER_HISTORY_START" : "Czas Rozpoczęcia", + "TABLE_HEADER_HISTORY_DURATION" : "Czas Trwania", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Zdalny Host", + + "TEXT_CONFIRM_DELETE" : "Połączenia nie mogą zostać przywrócone po ich usunięciu. Czy na pewno chcesz usunąć to połączenie?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Grupę Połączeń", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Lokalizacja:", + "FIELD_HEADER_NAME" : "Nazwa:", + "FIELD_HEADER_TYPE" : "Typ:", + + "NAME_TYPE_BALANCING" : "Równoważący obciążenie", + "NAME_TYPE_ORGANIZATIONAL" : "Organizacyjny", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Edytuj Grupę Połączeń", + + "TEXT_CONFIRM_DELETE" : "Grupy połączeń nie mogą zostać przywrócone po tym jak zostaną usunięte. Czy na pewno chcesz usunąć tę grupę połączeń?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Profil Udostępniania", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Nazwa:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Podstawowe Połączenie:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Edytuj Profil Udostępniania", + "SECTION_HEADER_PARAMETERS" : "Parametry", + + "TEXT_CONFIRM_DELETE" : "Profile udostępniania nie mogą zostać przywrócone po tym jak zostaną usunięte. Czy na pewno chcesz usunąć ten profil udostępniania?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń Użytkownika", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administracja systemem:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Zmiana własnego hasła:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Tworzenie nowych użytkowników:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Tworzenie nowych grup użytkowników:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Tworzenie nowych połączeń:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Tworzenie nowych grup połączeń:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Tworzenie nowych profili udostępniania:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Nazwa użytkownika:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Ten użytkownik nie należy obecnie do żadnej grupy. Rozwiń tę sekcje aby dodać do grupy.", + + "INFO_READ_ONLY" : "Ten użytkownik nie może być edytowany", + "INFO_NO_USER_GROUPS_AVAILABLE" : "Brak dostępnych grup.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Wszystkie Połączenia", + "SECTION_HEADER_CONNECTIONS" : "Połączenia", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Obecne Połączenia", + "SECTION_HEADER_EDIT_USER" : "Edytuj Użytkownika", + "SECTION_HEADER_PERMISSIONS" : "Uprawnienia", + "SECTION_HEADER_USER_GROUPS" : "Grupy", + + "TEXT_CONFIRM_DELETE" : "Użytkownicy nie mogą zostać przywróceni po tym jak zostaną usunięci. Czy na pewno chcesz usunąć tego użytkownika?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Usuń grupę", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Nazwa grupy:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "To grupa nie należy do żadnej grupy. Rozwiń tę sekcje aby dodać do grupy.", + "HELP_NO_MEMBER_USER_GROUPS" : "Ta grupa nie zawiera żadnych grup. Rozwiń tę sekcje aby dodać grupy.", + "HELP_NO_MEMBER_USERS" : "Ta grupa nie zawiera żadnych użytkowników. Rozwiń tę sekcje aby dodać użytkowników do grupy.", + + "INFO_READ_ONLY" : "Ta grupa nie może być edytowana", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "Brak dostępnych użytkowników.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Edytuj Grupę", + "SECTION_HEADER_MEMBER_USERS" : "Należący użytkownicy", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Należące grupy", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Grupy nadrzędne", + + "TEXT_CONFIRM_DELETE" : "Grupy nie mogą zostać przywrócone po tym jak zostaną usunięte. Czy na pewno chcesz usunąć tę grupę?" + + }, + + "PLAYER" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", + "ACTION_PLAY" : "@:APP.ACTION_PLAY", + + "INFO_LOADING_RECORDING" : "Twoje nagranie jest właśnie ładowane. Proszę czekać...", + "INFO_SEEK_IN_PROGRESS" : "Szukanie żądanej pozycji. Proszę czekać..." + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Klawisz Backspace wysyła:", + "FIELD_HEADER_CA_CERT" : "Certyfikat CA:", + "FIELD_HEADER_CLIENT_CERT" : "Certyfikat klienta:", + "FIELD_HEADER_CLIENT_KEY" : "Klucz klienta:", + "FIELD_HEADER_COLOR_SCHEME" : "Schemat kolorów:", + "FIELD_HEADER_CONTAINER" : "Nazwa kontenera:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatycznie utwórz ścieżkę maszynopisu:", + "FIELD_HEADER_EXEC_COMMAND" : "Komenda (exec):", + "FIELD_HEADER_FONT_NAME" : "Nazwa czcionki:", + "FIELD_HEADER_FONT_SIZE" : "Rozmiar czcionki:", + "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", + "FIELD_HEADER_IGNORE_CERT" : "Ignoruj certyfikat serwera:", + "FIELD_HEADER_NAMESPACE" : "Przestrzeń nazw:", + "FIELD_HEADER_POD" : "Nazwa pod'a:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", + "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", + "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", + "FIELD_HEADER_SCROLLBACK" : "Maksymalny rozmiar przewijania:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nazwa maszynopisu:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ścieżka maszynopisu:", + "FIELD_HEADER_USE_SSL" : "Użyj SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Czarny na białym", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Szary na czarnym", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zielony na czarnym", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Biały na czarnym", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", + "SECTION_HEADER_BEHAVIOR" : "Zachowanie terminala", + "SECTION_HEADER_CONTAINER" : "Kontener", + "SECTION_HEADER_DISPLAY" : "Wyświetlanie", + "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", + "SECTION_HEADER_TYPESCRIPT" : "Maszynopis (Tekstowe nagranie sesji)", + "SECTION_HEADER_NETWORK" : "Sieć" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Nazwa klienta:", + "FIELD_HEADER_COLOR_DEPTH" : "Głębia kolorów:", + "FIELD_HEADER_CONSOLE" : "Konsola administratora:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Wspieraj dźwięk w konsoli:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Automatycznie utwórz dysk:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", + "FIELD_HEADER_DISABLE_AUDIO" : "Wyłącz dźwięk:", + "FIELD_HEADER_DISABLE_AUTH" : "Wyłącz uwierzytelnianie:", + "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie ze zdalnego pulpitu:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", + "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", + "FIELD_HEADER_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", + "FIELD_HEADER_DOMAIN" : "Domena:", + "FIELD_HEADER_DPI" : "Rozdzielczość (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Nazwa dysku:", + "FIELD_HEADER_DRIVE_PATH" : "Ścieżka dysku:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Włącz wejście dźwięku (mikrofon):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Włącz kompozycje pulpitu (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Włącz dysk:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Włącz wygładzanie czcionek (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Włącz przeciąganie w pełnym oknie:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Włącz animacje menu:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Wyłącz bitmap caching:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Wyłącz off-screen caching:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Wyłącz glyph caching:", + "FIELD_HEADER_DISABLE_GFX" : "Wyłącz Rozszerzenie Potoku Graficznego:", + "FIELD_HEADER_ENABLE_PRINTING" : "Włącz drukowanie:", + "FIELD_HEADER_ENABLE_SFTP" : "Włącz SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Włącz motyw:", + "FIELD_HEADER_ENABLE_TOUCH" : "Włącz multi-touch:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Włącz tapetę:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Wymuś bezstratną kompresję:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Domena:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nazwa hosta:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Hasło:", + "FIELD_HEADER_GATEWAY_PORT" : "Port:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Użytkownik:", + "FIELD_HEADER_HEIGHT" : "Wysokość:", + "FIELD_HEADER_HOSTNAME" : "Nazwa hosta:", + "FIELD_HEADER_IGNORE_CERT" : "Ignoruj certyfikat serwera:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Program początkowy:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Load balance info/cookie:", + "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "Zakończenie linii:", + "FIELD_HEADER_PASSWORD" : "Hasło:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRINTER_NAME" : "Nazwa przekierowanej drukarki:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Preconnection BLOB (VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "Źródłowe ID RDP:", + "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", + "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "Wyklucz zdarzenia dotykowe:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", + "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", + "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", + "FIELD_HEADER_RESIZE_METHOD" : "Metoda zmiany rozmiaru:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parametry:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Katalog roboczy:", + "FIELD_HEADER_REMOTE_APP" : "Program:", + "FIELD_HEADER_SECURITY" : "Tryb bezpieczeństwa:", + "FIELD_HEADER_SERVER_LAYOUT" : "Układ klawiatury:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Domyślny katalog dla przesyłania:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Publiczny klucz hosta (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nazwa Hosta:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interwał utrzymania aktywności (keepalive) SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Hasło klucza:", + "FIELD_HEADER_SFTP_PASSWORD" : "Hasło:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Klucz prywatny:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Katalog nadrzędny przeglądarki plików:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", + "FIELD_HEADER_SFTP_USERNAME" : "Użytkownik:", + "FIELD_HEADER_STATIC_CHANNELS" : "Nazwy statycznych kanałów:", + "FIELD_HEADER_TIMEZONE" : "Strefa czasowa:", + "FIELD_HEADER_USERNAME" : "Użytkownik:", + "FIELD_HEADER_WIDTH" : "Szerokość:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", + + "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "Zachowaj tak, jak jest", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Aktualizacja Wyświetlania\" kanał wirtualny (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Połącz Ponownie", + + "FIELD_OPTION_SECURITY_ANY" : "Dowolny", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Uwierzytelnianie Na Poziomie Sieci)", + "FIELD_OPTION_SECURITY_RDP" : "szyfrowanie RDP", + "FIELD_OPTION_SECURITY_TLS" : "szyfrowanie TLS", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Szwajcarski Niemiecki (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Niemiecki (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK Angielski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US Angielski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Hiszpański (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latynoamerykański (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgijski Francuski (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Kanadyjski Francuski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Szwajcarski Francuski (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francuski (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Węgierski (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Włoski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japoński (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norweski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portugalski Brazylijski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portugalski (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Szwecki (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Duński (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turecki-Q (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", + "SECTION_HEADER_BASIC_PARAMETERS" : "Ustawienia Podstawowe", + "SECTION_HEADER_CLIPBOARD" : "Schowek", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Przekierowanie Urządzeń", + "SECTION_HEADER_DISPLAY" : "Wyświetlanie", + "SECTION_HEADER_GATEWAY" : "Remote Desktop Gateway", + "SECTION_HEADER_LOAD_BALANCING" : "Load Balancing", + "SECTION_HEADER_NETWORK" : "Sieć", + "SECTION_HEADER_PERFORMANCE" : "Wydajność", + "SECTION_HEADER_PRECONNECTION_PDU" : "Wstępne połączenie PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", + "SECTION_HEADER_REMOTEAPP" : "RemoteApp", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Klawisz Backspace wysyła:", + "FIELD_HEADER_COLOR_SCHEME" : "Schemat kolorów:", + "FIELD_HEADER_COMMAND" : "Wykonaj polecenie:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatycznie utwórz ścieżkę maszynopisu:", + "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie z terminala:", + "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", + "FIELD_HEADER_FONT_NAME" : "Nazwa czcionki:", + "FIELD_HEADER_FONT_SIZE" : "Rozmiar czcionki:", + "FIELD_HEADER_ENABLE_SFTP" : "Włącz SFTP:", + "FIELD_HEADER_HOST_KEY" : "Publiczny klucz hosta (Base64):", + "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", + "FIELD_HEADER_LOCALE" : "Język/Ustawienia regionalne ($LANG):", + "FIELD_HEADER_USERNAME" : "Użytkownik:", + "FIELD_HEADER_PASSWORD" : "Hasło:", + "FIELD_HEADER_PASSPHRASE" : "Hasło klucza:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_PRIVATE_KEY" : "Klucz prywatny:", + "FIELD_HEADER_SCROLLBACK" : "Maksymalny rozmiar przewijania:", + "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", + "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", + "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Interwał utrzymywania aktywności serwera (keepalive):", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Katalog nadrzędny przeglądarki plików:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", + "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminala:", + "FIELD_HEADER_TIMEZONE" : "Strefa czasowa ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nazwa maszynopisu:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ścieżka maszynopisu:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Czarny na białym", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Szary na czarnym", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zielony na czarnym", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Biały na czarnym", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", + "SECTION_HEADER_BEHAVIOR" : "Zachowanie Terminala", + "SECTION_HEADER_CLIPBOARD" : "Schowek", + "SECTION_HEADER_DISPLAY" : "Wyświetlanie", + "SECTION_HEADER_NETWORK" : "Sieć", + "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", + "SECTION_HEADER_SESSION" : "Sesja / Środowisko", + "SECTION_HEADER_TYPESCRIPT" : "Maszynopis (Tekstowe Nagranie Sesji)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Klawisz Backspace wysyła:", + "FIELD_HEADER_COLOR_SCHEME" : "Schemat kolorów:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatycznie utwórz ścieżkę maszynopisu:", + "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie z terminala:", + "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", + "FIELD_HEADER_FONT_NAME" : "Nazwa czcionki:", + "FIELD_HEADER_FONT_SIZE" : "Rozmiar czcionki:", + "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Wyrażenie regularne nieudanego logowania:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Wyrażenie regularne udanego logowania:", + "FIELD_HEADER_USERNAME" : "Użytkownik:", + "FIELD_HEADER_USERNAME_REGEX" : "Wyrażenie regularne użytkownika:", + "FIELD_HEADER_PASSWORD" : "Hasło:", + "FIELD_HEADER_PASSWORD_REGEX" : "Wyrażenie regularne hasła", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz wciśnięcia klawiszy:", + "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", + "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", + "FIELD_HEADER_SCROLLBACK" : "Maksymalny rozmiar przewijania:", + "FIELD_HEADER_TERMINAL_TYPE" : "Typ terminala:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nazwa maszynopisu:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Ścieżka maszynopisu:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Czarny na białym", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Szary na czarnym", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Zielony na czarnym", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Biały na czarnym", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", + "SECTION_HEADER_BEHAVIOR" : "Zachowanie Terminala", + "SECTION_HEADER_CLIPBOARD" : "Schowek", + "SECTION_HEADER_DISPLAY" : "Wyświetlanie", + "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", + "SECTION_HEADER_TYPESCRIPT" : "Maszynopis (Tekstowe Nagranie Sesji)", + "SECTION_HEADER_NETWORK" : "Sieć", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Nazwa serwera audio:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Kodowanie:", + "FIELD_HEADER_COLOR_DEPTH" : "Głębia kolorów:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatycznie utwórz ścieżkę nagrywania:", + "FIELD_HEADER_CURSOR" : "Kursor:", + "FIELD_HEADER_DEST_HOST" : "Docelowy host:", + "FIELD_HEADER_DEST_PORT" : "Docelowy port:", + "FIELD_HEADER_DISABLE_COPY" : "Wyłącz kopiowanie ze zdalnego pulpitu:", + "FIELD_HEADER_DISABLE_PASTE" : "Wyłącz wklejanie z klienta:", + "FIELD_HEADER_ENABLE_AUDIO" : "Włącz dźwięk:", + "FIELD_HEADER_ENABLE_SFTP" : "Włącz SFTP:", + "FIELD_HEADER_FORCE_LOSSLESS" : "Wymuś bezstratną kompresję:", + "FIELD_HEADER_HOSTNAME" : "Nazwa Hosta:", + "FIELD_HEADER_USERNAME" : "Użytkownik:", + "FIELD_HEADER_PASSWORD" : "Hasło:", + "FIELD_HEADER_PORT" : "Port:", + "FIELD_HEADER_READ_ONLY" : "Tylko do odczytu:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Wyklucz mysz:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Wyklucz grafiki/strumienie:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Dołącz zdarzenia klawiszy:", + "FIELD_HEADER_RECORDING_NAME" : "Nazwa nagrania:", + "FIELD_HEADER_RECORDING_PATH" : "Ścieżka nagrania:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Domyślny katalog przesyłania:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Wyłącz pobieranie plików:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Publiczny klucz hosta (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nazwa Hosta:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Interwał utrzymania aktywności (keepalive) SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Hasło klucza:", + "FIELD_HEADER_SFTP_PASSWORD" : "Hasło:", + "FIELD_HEADER_SFTP_PORT" : "Port:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Klucz prywatny:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Katalog nadrzędny przeglądarki plików:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Wyłącz przesyłanie plików:", + "FIELD_HEADER_SFTP_USERNAME" : "Użytkownik:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Zamień czerwone/niebieskie komponenty:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Adres rozgłoszeniowy (broadcast) dla pakietu WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Adres MAC zdalnego hosta:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Wyślij pakiet WoL:", + "FIELD_HEADER_WOL_UDP_PORT" : "Port UDP dla pakietu WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Czas oczekiwania na rozruch hosta:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Lokalny", + "FIELD_OPTION_CURSOR_REMOTE" : "Zdalny", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Dźwięk", + "SECTION_HEADER_AUTHENTICATION" : "Uwierzytelnianie", + "SECTION_HEADER_CLIPBOARD" : "Schowek", + "SECTION_HEADER_DISPLAY" : "Wyświetlanie", + "SECTION_HEADER_NETWORK" : "Sieć", + "SECTION_HEADER_RECORDING" : "Nagrywanie Ekranu", + "SECTION_HEADER_REPEATER" : "Przekaźnik VNC", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Ustawienia" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Rekordy historii poprzednich połączeń są wylistowane tutaj i można je sortować klikając nagłówki kolumn. Aby wyszukać określone rekordy wprowadź ciąg filtru i kliknij \"Szukaj\". Tylko rekordy pasujące do podanego filtru zostaną wyświetlone.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Brak pasujących rekordów", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nazwa połączenia", + "TABLE_HEADER_SESSION_DURATION" : "Czas trwania", + "TABLE_HEADER_SESSION_LOGS" : "Logi", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Zdalny host", + "TABLE_HEADER_SESSION_STARTDATE" : "Czas rozpoczęcia", + "TABLE_HEADER_SESSION_USERNAME" : "Użytkownik", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Nowe Połączenie", + "ACTION_NEW_CONNECTION_GROUP" : "Nowa Grupa", + "ACTION_NEW_SHARING_PROFILE" : "Nowy Profil Udostępniania", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Kliknij lub naciśnij połączenie poniżej, aby nim zarządzać. W zależności od poziomu dostępu, połączenia mogą być dodawane i usuwane, a ich właściwości (protokół, nazwa hosta, port itp.) mogą być zmieniane.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Połączenia" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Język:", + "FIELD_HEADER_PASSWORD" : "Hasło:", + "FIELD_HEADER_PASSWORD_OLD" : "Obecne Hasło:", + "FIELD_HEADER_PASSWORD_NEW" : "Nowe Hasło:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Powtórz Nowe Hasło:", + "FIELD_HEADER_TIMEZONE" : "Strefa Czasowa:", + "FIELD_HEADER_USERNAME" : "Użytkownik:", + + "HELP_DEFAULT_INPUT_METHOD" : "Domyślna metoda wprowadzania określa sposób odbierania zdarzeń klawiatury przez Guacamole. Zmiana tego ustawienia może być konieczna w przypadku korzystania z urządzenia mobilnego lub pisania w edytorze IME. To ustawienie można zmienić dla każdego połączenia w menu Guacamole.", + "HELP_DEFAULT_MOUSE_MODE" : "Domyślny tryb emulacji myszy określa, jak zdalna mysz będzie się zachowywać w nowych połączeniach w odniesieniu do dotknięć. To ustawienie można zmienić dla każdego połączenia w menu Guacamole.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Poniższe opcje są związane z ustawieniami regionalnymi użytkownika i wpłyną na sposób wyświetlania różnych części interfejsu", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Jeśli chcesz zmienić swoje hasło, wprowadź poniżej obecne hasło i żądane nowe hasło, a następnie kliknij \"Zmień Hasło\". Zmiana będzie miała efekt natychmiastowy.", + + "INFO_PASSWORD_CHANGED" : "Hasło zmienione.", + "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "Ustawienia użytkownika zapisane.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Domyślna Metoda Wprowadzania", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Domyślny Tryb Emulacji Myszy", + "SECTION_HEADER_UPDATE_PASSWORD" : "Zmień Hasło" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Nowy Użytkownik", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Kliknij lub dotknij użytkownika poniżej, aby nim zarządzać. W zależności od Twojego poziomu dostępu, użytkowników można dodawać i usuwać, a także zmieniać ich hasła.", + + "SECTION_HEADER_USERS" : "Użytkownicy", + + "TABLE_HEADER_FULL_NAME" : "Imię i Nazwisko", + "TABLE_HEADER_LAST_ACTIVE" : "Ostatnio aktywny", + "TABLE_HEADER_ORGANIZATION" : "Organizacja", + "TABLE_HEADER_USERNAME" : "Nazwa użytkownika" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Nowa Grupa", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Kliknij lub naciśnij grupę poniżej, aby nią zarządzać. W zależności od Twojego poziomu dostępu, grupy mogą być dodawane i usuwane, a ich użytkownicy i grupy mogą być edytowane.", + + "SECTION_HEADER_USER_GROUPS" : "Grupy", + + "TABLE_HEADER_USER_GROUP_NAME" : "Nazwa Grupy" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Zakończ sesję", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Zakończ Sesję", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Ta strona zostanie wypełniona aktualnie aktywnymi połączeniami. Lista połączeń i możliwość ich zakończenia zależy od Twojego poziomu dostępu. Jeśli chcesz zakończyć jedną lub więcej sesji, zaznacz pola obok tych sesji i kliknij \"Zakończ sesję\". Zakończenie sesji spowoduje natychmiastowe rozłączenie użytkownika z powiązanym połączeniem.", + + + "INFO_NO_SESSIONS" : "Brak aktywnych połączeń", + + "SECTION_HEADER_SESSIONS" : "Aktywne Połączenia", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nazwa połączenia", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Zdalny host", + "TABLE_HEADER_SESSION_STARTDATE" : "Aktywne od", + "TABLE_HEADER_SESSION_USERNAME" : "Użytkownik", + + "TEXT_CONFIRM_DELETE" : "Czy na pewno chcesz zakończyć wszystkie wybrane sesje? Użytkownicy korzystający z tych sesji zostaną natychmiast rozłączeni." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Adres email:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Imię i Nazwisko:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organizacja:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Rola:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pt.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pt.json new file mode 100644 index 0000000000..77b956404c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/pt.json @@ -0,0 +1,1011 @@ +{ + + "NAME" : "Português", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "OK", + "ACTION_CANCEL" : "Cancelar", + "ACTION_CLONE" : "Clonar", + "ACTION_CONTINUE" : "Continuar", + "ACTION_DELETE" : "Apagar", + "ACTION_DELETE_SESSIONS" : "Fechar sessões", + "ACTION_DOWNLOAD" : "Download", + "ACTION_LOGIN" : "Entrar", + "ACTION_LOGOUT" : "Sair", + "ACTION_MANAGE_CONNECTIONS" : "Conexões", + "ACTION_MANAGE_PREFERENCES" : "Preferências", + "ACTION_MANAGE_SETTINGS" : "Configurações", + "ACTION_MANAGE_SESSIONS" : "Sessões Ativas", + "ACTION_MANAGE_USERS" : "Usuários", + "ACTION_MANAGE_USER_GROUPS" : "Grupos", + "ACTION_NAVIGATE_BACK" : "Voltar", + "ACTION_NAVIGATE_HOME" : "Principal", + "ACTION_SAVE" : "Salvar", + "ACTION_SEARCH" : "Procurar", + "ACTION_SHARE" : "Compartilhar", + "ACTION_UPDATE_PASSWORD" : "Alterar senha", + "ACTION_VIEW_HISTORY" : "Histórico", + + "DIALOG_HEADER_ERROR" : "Erro", + + "ERROR_PAGE_UNAVAILABLE" : "Um erro ocorreu e esta ação não pode ser completada. Se o problema persistir, por favor contacte o administrador do sistema ou verifique os logs do sistema.", + "ERROR_PASSWORD_BLANK" : "Sua senha não pode ficar em branco.", + "ERROR_PASSWORD_MISMATCH" : "As senhas são diferentes.", + + "FIELD_HEADER_PASSWORD" : "Senha:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Repita a senha:", + + "FIELD_PLACEHOLDER_FILTER" : "Filtro", + + "FORMAT_DATE_TIME_PRECISE" : "dd/MM/yyyy HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Atualmente em uso por {USERS} {USERS, plural, one{usuário} other{usuários}}.", + + "TEXT_ANONYMOUS_USER" : "Anônimo", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{segundo} other{segundos}}} minute{{VALUE, plural, one{minuto} other{minutos}}} hour{{VALUE, plural, one{hora} other{horas}}} day{{VALUE, plural, one{dia} other{dias}}} other{}}", + "TEXT_UNTRANSLATED" : "{MESSAGE}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Limpar", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_DISCONNECT" : "Desconectar", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Reconectar", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Enviar Arquivos", + + "DIALOG_HEADER_CONNECTING" : "Conectando", + "DIALOG_HEADER_CONNECTION_ERROR" : "Erro na conexão", + "DIALOG_HEADER_DISCONNECTED" : "Desconectado", + + "ERROR_CLIENT_201" : "Essa conexão foi fechada porque o servidor está ocupado. Por favor aguarde alguns minutos e tente novamente.", + "ERROR_CLIENT_202" : "O Servidor Guacamole fechou a sessão porque a estação remota estava levando muito tempo para responder. Por favor tente novamente ou contate o administrador do sistema.", + "ERROR_CLIENT_203" : "A estação remota encontrou um erro e fechou a conexão. Por favor, tente novamente mais tarde ou contate o administrador do sistema.", + "ERROR_CLIENT_207" : "A estação remota não pode ser encontrada. Caso o problema persista, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", + "ERROR_CLIENT_208" : "A estação remota não está disponível no momento. Caso o problema persista, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", + "ERROR_CLIENT_209" : "A estação remota encerrou a conexão devido a conflitos com outra conexão. Por favor tente novamente mais tarde.", + "ERROR_CLIENT_20A" : "A estação remota encerrou a conexão pois a mesma parecia estar inativa. Caso isto seja inexperado ou indesejável, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", + "ERROR_CLIENT_20B" : "A estação remota encerrou a conexão forçadamente. Caso isto seja inexperado ou indesejável, por favor notifique o administrador do sistema, ou verifique os logs do sistema.", + "ERROR_CLIENT_301" : "Erro de autenticação. Por favor reconecte e tente novamente.", + "ERROR_CLIENT_303" : "A estação remota negou o acesso a esta conexão. Se você precisa deste acesso, por favor peça ao administrador do sistema, ou verifique as configurações do sistema.", + "ERROR_CLIENT_308" : "O servidor do Guacamole encerrou a conexão porque não houve resposta do seu navegador por tempo suficiente para parecer desconectado. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente.", + "ERROR_CLIENT_31D" : "O servidor do Guacamole está negando acesso a esta conexão porque você esgotou o limite de uso de conexões simultâneas para um único usuário. Por favor, feche uma ou mais conexões e tente novamente.", + "ERROR_CLIENT_DEFAULT" : "Um erro interno ocorreu no servidor do Guacamole e a conexão foi finalizada. Se o problema persistir, por favor informe o administrador do sistema, ou verifique os logs do sistema.", + + "ERROR_TUNNEL_201" : "O servidor de Guacamole rejeitou essa tentativa de conexão porque há muitas conexões ativas. Por favor, aguarde alguns minutos e tente novamente.", + "ERROR_TUNNEL_202" : "A conexão foi encerrada porque o servidor está demorando muito par responder. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente ou contate o administrador do sistema.", + "ERROR_TUNNEL_203" : "O servidor encontrou um erro e encerrou a conexão. Por favor, tente novamente ou informe o administrador do sistema.", + "ERROR_TUNNEL_204" : "A conexão solicitada não existe. Por favor, verifique o nome da conexão e tente novamente.", + "ERROR_TUNNEL_205" : "Essa conexão está atualmente em uso e o acesso concorrente a ela não é permitido. Por favor, tente mais tarde.", + "ERROR_TUNNEL_207" : "O servidor de Guacamole não está acessível neste momento. Por favor, verifique a sua rede e tente novamente.", + "ERROR_TUNNEL_208" : "O servidor de Guacamole não está aceitando conexões. Por favor, verifique a sua rede e tente novamente.", + "ERROR_TUNNEL_301" : "Você não tem permissão para acessar essa conexão porque você não está logado. Por favor, logue-se e tente novamente.", + "ERROR_TUNNEL_303" : "Você não tem permissão para acessar essa conexão. Se você precisa do acesso, por favor solicite ao administrador do sistema a inclusão do seu usuário da lista de usuários permitidos, ou verifique as configurações do sistema.", + "ERROR_TUNNEL_308" : "O servidor do Guacamole encerrou a conexão porque não houve resposta do seu navegador por tempo suficiente para parecer desconectado. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente.", + "ERROR_TUNNEL_31D" : "O servidor do Guacamole está negando acesso a esta conexão porque você esgotou o limite de uso de conexões simultâneas para um único usuário. Por favor feche uma ou mais conexões e tente novamente.", + "ERROR_TUNNEL_DEFAULT" : "Um erro interno ocorreu no servidor do Guacamole e a conexão foi finalizada. Se o problema persistir, por favor informe o administrador do sistema, ou verifique os logs do sistema.", + + "ERROR_UPLOAD_100" : "A transferência de arquivos não é suportada ou não foi habilitada. Por favor contate o administrador do sistema ou verifique os logs do sistema", + "ERROR_UPLOAD_201" : "Muitos arquivos estão sendo transferidos ao mesmo tempo. Por favor aguarde que as transferências atuais terminem e tente novamente.", + "ERROR_UPLOAD_202" : "O arquivo não pode ser transferido porque o servidor remoto está levando muito tempo para responder. Por favor tente mais tarde ou contate administrador do sistema.", + "ERROR_UPLOAD_203" : "A estação remota encontrou erro durante a transferência. Por favort tente novamente ou contate administrador do sistema.", + "ERROR_UPLOAD_204" : "O destino da transferência de arquivo não existe. Por favor verifique se o destino existe e tente novamente.", + "ERROR_UPLOAD_205" : "O destino da transferência de arquivo está bloqueado. Por favor aguarde as tarefas em curso terminarem e tente noavmente.", + "ERROR_UPLOAD_301" : "Você não tem permissão para enviar este arquivo porque não está logado. Por favor logue-se e tente novamente.", + "ERROR_UPLOAD_303" : "Você não tem permissão para enviar este arquivo. Se já solicitou esta permisssão verifique as configurações de sistema, ou contate o administrador do sistema.", + "ERROR_UPLOAD_308" : "A transferência do arquivo está parada. Normalmente isso ocorre por problemas na rede, como sinal de wifi irregular, ou simplesmente velocidades de rede muito lentas. Por favor verifique sua rede e tente novamente.", + "ERROR_UPLOAD_31D" : "Muitos arquivos estão sendo transferidos ao mesmo tempo. Por favor aguarde que as transferências atuais terminem e tente novamente.", + "ERROR_UPLOAD_DEFAULT" : "Um erro interno ocorreu no servidor do Guacamole e a conexão foi finalizada. Se o problema persistir, por favor informe o administrador do sistema, ou verifique os logs do sistema.", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "Texto copiado/cortado dentro do Guacamole será mostrado aqui. Mudanças no text abaixo afetarão a área de transferência remota.", + "HELP_INPUT_METHOD_NONE" : "Nenhum método de entrada está sendo usado. A entrada do teclado é aceita a partir de um teclado físico conectado.", + "HELP_INPUT_METHOD_OSK" : "Mostrar e aceitar entrada de dados a partir do teclado virtual integrado do Guacamole. O teclado virtual possibilita digitar combinações de teclas que, de outra forma, seriam impossíveis (como Ctrl-Alt-Del).", + "HELP_INPUT_METHOD_TEXT" : "Permite digitação do texto e emulaçao dos eventos de teclado baseado no texto digitado. Isto é necessário para dispositivos como telefones celulares que não possuem teclado físico.", + "HELP_MOUSE_MODE" : "Determina como o mouse remoto se comportará em ralção aos toques.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Toque para clicar. O clique ocorre no local do toque.", + "HELP_MOUSE_MODE_RELATIVE" : "Arraste para mover o ponteiro do mouse e toque para clicar. O clique ocorre no local em que o mouse aponta.", + "HELP_SHARE_LINK" : "A conexão atual está sendo compartilhada e pode ser acessado com qualquer um que possuir o seguinte {LINKS, plural, one{link} other{links}}:", + + "INFO_CONNECTION_SHARED" : "Está conexão agora está compartilhada.", + "INFO_NO_FILE_TRANSFERS" : "Nenhuma transferência de arquivo.", + + "NAME_INPUT_METHOD_NONE" : "Nenhum", + "NAME_INPUT_METHOD_OSK" : "Teclado virtual", + "NAME_INPUT_METHOD_TEXT" : "Entrada de texto", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "Tela de toque", + "NAME_MOUSE_MODE_RELATIVE" : "Touchpad", + + "SECTION_HEADER_CLIPBOARD" : "Área de transferência", + "SECTION_HEADER_DEVICES" : "Aparelhos", + "SECTION_HEADER_DISPLAY" : "Tela", + "SECTION_HEADER_FILE_TRANSFERS" : "Transferências de Arquivos", + "SECTION_HEADER_INPUT_METHOD" : "Método de entrada", + "SECTION_HEADER_MOUSE_MODE" : "Modo de emulação do mouse", + + "TEXT_ZOOM_AUTO_FIT" : "Ajustar automaticamente à janela do navegador", + "TEXT_CLIENT_STATUS_IDLE" : "Ocioso.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Conectando ao Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Você foi desconectado.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "A conexão de rede ao servidor do Guacamole parece instável.", + "TEXT_CLIENT_STATUS_WAITING" : "Conectado ao Guacamole. Aguardando resposta...", + "TEXT_RECONNECT_COUNTDOWN" : "Reconectando em {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Ocultar", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Mostrar", + + "FIELD_HEADER_BACKGROUND" : "Fundo", + "FIELD_HEADER_FOREGROUND" : "Primeiro plano", + + "FIELD_OPTION_CUSTOM" : "Customizar...", + + "SECTION_HEADER_DETAILS" : "Detalhes:" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "Default (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "DD/MM/YYYY", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Clique para mostrar a senha", + "HELP_HIDE_PASSWORD" : "Clique para ocultar a senha" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Nenhuma conexão recente.", + + "PASSWORD_CHANGED" : "Senha alterada.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Todas as Conexões", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Conexões Recentes" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "Anônimo" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Autenticação Inválida", + + "FIELD_HEADER_USERNAME" : "Usuário", + "FIELD_HEADER_PASSWORD" : "Senha" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Remover conexão", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Localização:", + "FIELD_HEADER_NAME" : "Nome:", + "FIELD_HEADER_PROTOCOL" : "Protocolo:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Ativa agora", + "INFO_CONNECTION_NOT_USED" : "Essa conexão ainda não foi utilizada.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Editar Conexão", + "SECTION_HEADER_HISTORY" : "Histórico de Uso", + "SECTION_HEADER_PARAMETERS" : "Parâmetros", + + "TABLE_HEADER_HISTORY_USERNAME" : "Usuário", + "TABLE_HEADER_HISTORY_START" : "Hora de Início", + "TABLE_HEADER_HISTORY_DURATION" : "Duração", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Estação Remota", + + "TEXT_CONFIRM_DELETE" : "Conexões não podem ser restauradas depois de removidas. Tem certeza que deseja remover esta conexão?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Delete Connection Group", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Localização:", + "FIELD_HEADER_NAME" : "Nome:", + "FIELD_HEADER_TYPE" : "Tipo:", + + "NAME_TYPE_BALANCING" : "Balanceamento", + "NAME_TYPE_ORGANIZATIONAL" : "Organização", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Editar Grupo de Conexão", + + "TEXT_CONFIRM_DELETE" : "Grupos de conexão não podem ser restaurados depois de removidos. Tem certeza que deseja remover este grupo de conexão?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Remover Perfil de Compartilhamento", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Nome:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Conexão Primária:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Editar Perfil de Compartilhamento", + "SECTION_HEADER_PARAMETERS" : "Parâmetros", + + "TEXT_CONFIRM_DELETE" : "Perfis de compartilhamento não podem ser restaurados depois de removidos. Tem certeza que deseja remover este perfil de compartilhamento?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Remover Usuário", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Administrar o sistema:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Alterar a própria senha:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Criar novos usuários:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Criar novos grupos de usuário:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Criar novas conexões:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Criar novos grupos de conexão:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Criar novos perfis de compartilhamento:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Usuário:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Este usuário não pertence a nenhum grupo no momento. Expanda esta seção para adicionar grupos.", + + "INFO_READ_ONLY" : "Desculpe, mas esta conta de usuário não pode ser editada.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "Nenhum grupo disponível.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Todas as Conexões", + "SECTION_HEADER_CONNECTIONS" : "Conexões", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Conexões Atuais", + "SECTION_HEADER_EDIT_USER" : "Editar Usuário", + "SECTION_HEADER_PERMISSIONS" : "Permissões", + "SECTION_HEADER_USER_GROUPS" : "Grupos", + + "TEXT_CONFIRM_DELETE" : "Usuários não podem ser restaurados depois de removidos. Tem certeza que deseja remover este usuário?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Remover Grupo", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Nome do grupo:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Este grupo não pertence a nenhum outro grupo atualmente. Expanda esta seção para adicionar grupos.", + "HELP_NO_MEMBER_USER_GROUPS" : "Este grupo não contém nenhum outro grupo atualmente. Expanda esta seção para adicionar grupos.", + "HELP_NO_MEMBER_USERS" : "Este grupo não contém nenhum usuário atualmente. Expanda esta seção para adicionar usuários.", + + "INFO_READ_ONLY" : "Desculpe, mas este grupo não pode ser editado.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "Nenhum usuário disponível.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Editar Grupo", + "SECTION_HEADER_MEMBER_USERS" : "Usuários Membros", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Grupos Membros", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Grupos Pai", + + "TEXT_CONFIRM_DELETE" : "Grupos não podem ser restaurados depois de removidos. Tem certeza que deseja remover este grupos?" + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Tecla de Backspace envia:", + "FIELD_HEADER_CA_CERT" : "Certificar autoridade certificadora:", + "FIELD_HEADER_CLIENT_CERT" : "Certificado do client:", + "FIELD_HEADER_CLIENT_KEY" : "Chave do cliente:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de cor:", + "FIELD_HEADER_CONTAINER" : "Nome do container:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Criar caminho de transcrição automaticamente:", + "FIELD_HEADER_FONT_NAME" : "Nome da fonte:", + "FIELD_HEADER_FONT_SIZE" : "Tamanho da fonte:", + "FIELD_HEADER_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado do servidor:", + "FIELD_HEADER_NAMESPACE" : "Namespace:", + "FIELD_HEADER_POD" : "Nome do pod:", + "FIELD_HEADER_PORT" : "Porta:", + "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", + "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", + "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", + "FIELD_HEADER_SCROLLBACK" : "Tamanho máximo de retrocesso:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nome da transcrição:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Caminho da transcrição:", + "FIELD_HEADER_USE_SSL" : "Usar SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Preto sobre branco", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Cinza sobre preto", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre preto", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Branco sobre preto", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticação", + "SECTION_HEADER_BEHAVIOR" : "Comportamento do terminal", + "SECTION_HEADER_CONTAINER" : "Container", + "SECTION_HEADER_DISPLAY" : "Tela", + "SECTION_HEADER_RECORDING" : "Gravação da Tela", + "SECTION_HEADER_TYPESCRIPT" : "Transcrição (Gravação do Texto da Sessão)", + "SECTION_HEADER_NETWORK" : "Rede" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Nome do cliente:", + "FIELD_HEADER_COLOR_DEPTH" : "Profundidade de cores:", + "FIELD_HEADER_CONSOLE" : "Console de administração:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Suportar audio no console:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Criar unidade automaticamente:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", + "FIELD_HEADER_DISABLE_AUDIO" : "Desabilitar áudio:", + "FIELD_HEADER_DISABLE_AUTH" : "Desabilitar autenticação:", + "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar da estação remota:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", + "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", + "FIELD_HEADER_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", + "FIELD_HEADER_DOMAIN" : "Domínio:", + "FIELD_HEADER_DPI" : "Resolução (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Nome da unidade:", + "FIELD_HEADER_DRIVE_PATH" : "Caminho da unidade:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Habilitar entrada de áudio (microfone):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Habilitar composição do desktop (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Habilitar unidade:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Habilitar suavização de fonte (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Habilitar arrastar a janela inteira:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Habilitar animação de menus:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Desabilitar cache de bitmap:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Desabilitar cache off-screen:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Desabilitar cache de glyph:", + "FIELD_HEADER_ENABLE_PRINTING" : "Habilitar impressão:", + "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Habilitar tema:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Habilitar papel de parede:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Domínio:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Senha:", + "FIELD_HEADER_GATEWAY_PORT" : "Porta:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Usuário:", + "FIELD_HEADER_HEIGHT" : "Altura:", + "FIELD_HEADER_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_IGNORE_CERT" : "Ignorar certificado do servidor:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Programa inicial:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Info/cookie de balanceamento de carga:", + "FIELD_HEADER_PASSWORD" : "Senha:", + "FIELD_HEADER_PORT" : "Porta:", + "FIELD_HEADER_PRINTER_NAME" : "Nome da impressora redirecionada:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "BLOB (VM ID) de pré-conexão:", + "FIELD_HEADER_PRECONNECTION_ID" : "ID de origem do RDP:", + "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", + "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", + "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", + "FIELD_HEADER_RESIZE_METHOD" : "Método de redimensionamento:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Parâmetros:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Diretório de trabalho:", + "FIELD_HEADER_REMOTE_APP" : "Programa:", + "FIELD_HEADER_SECURITY" : "Modo de segurança:", + "FIELD_HEADER_SERVER_LAYOUT" : "Layout do teclado:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Diretório padrão de envios:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Chave pública (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo de keepalive do SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase-senha:", + "FIELD_HEADER_SFTP_PASSWORD" : "Senha:", + "FIELD_HEADER_SFTP_PORT" : "Porta:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Chave privada:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Diretório raíz da escolha de arquivos:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", + "FIELD_HEADER_SFTP_USERNAME" : "Usuário:", + "FIELD_HEADER_STATIC_CHANNELS" : "Nomes dos canais estáticoss:", + "FIELD_HEADER_TIMEZONE" : "Fuso Horário:", + "FIELD_HEADER_USERNAME" : "Usuário:", + "FIELD_HEADER_WIDTH" : "Largura:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera da inicialização do host:", + + + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "\"Atualização de Tela\" canal virtual (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Reconectar", + + "FIELD_OPTION_SECURITY_ANY" : "Qualquer Um", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA (Autenticação a Nível de Rede)", + "FIELD_OPTION_SECURITY_RDP" : "Encriptação RDP", + "FIELD_OPTION_SECURITY_TLS" : "Encriptação TLS", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Alemão-Suiço (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "Alemão (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "Inglês UK (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "Inglês US (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Espanhol (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "América Latina (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Francês Belga (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Francês Suiço (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "Francês (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Húngaro (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italiano (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japonês (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polonês (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Português Brasileiro (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Português (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Sueco (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Dinamarquês (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turco-Q (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticação", + "SECTION_HEADER_BASIC_PARAMETERS" : "Configuração básica", + "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Redirecionamento de dispositivo", + "SECTION_HEADER_DISPLAY" : "Tela", + "SECTION_HEADER_GATEWAY" : "Gateway de Desktop Remoto", + "SECTION_HEADER_LOAD_BALANCING" : "Balanceamento de Carga", + "SECTION_HEADER_NETWORK" : "Rede", + "SECTION_HEADER_PERFORMANCE" : "Performance", + "SECTION_HEADER_PRECONNECTION_PDU" : "Pré-conexão PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "Gravação de Tela", + "SECTION_HEADER_REMOTEAPP" : "App Remoto", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Tecla de Backspace envia:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de cor:", + "FIELD_HEADER_COMMAND" : "Executar comando:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Criar caminho de transcrição automaticamente:", + "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar do terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", + "FIELD_HEADER_FONT_NAME" : "Nome da fonte:", + "FIELD_HEADER_FONT_SIZE" : "Tamanho da fonte:", + "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", + "FIELD_HEADER_HOST_KEY" : "Chave pública (Base64):", + "FIELD_HEADER_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_LOCALE" : "Idioma/Locale ($LANG):", + "FIELD_HEADER_USERNAME" : "Usuário:", + "FIELD_HEADER_PASSWORD" : "Senha:", + "FIELD_HEADER_PASSPHRASE" : "Frase-senha:", + "FIELD_HEADER_PORT" : "Porta:", + "FIELD_HEADER_PRIVATE_KEY" : "Chave privada:", + "FIELD_HEADER_SCROLLBACK" : "Tamanho máximo de retrocesso:", + "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", + "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", + "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Intervalo de keepalive do servidor:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Diretório raíz de escolha de arquivo:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", + "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal:", + "FIELD_HEADER_TIMEZONE" : "Fuso Horário ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nome da Transcrição:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Caminho da Transcrição:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera de inicialização do host:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Preto sobre branco", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Cinza sobre preto", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre preto", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Branco sobre preto", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticação", + "SECTION_HEADER_BEHAVIOR" : "Comportamento do terminal", + "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", + "SECTION_HEADER_DISPLAY" : "Tela", + "SECTION_HEADER_NETWORK" : "Rede", + "SECTION_HEADER_RECORDING" : "Gravação de Tela", + "SECTION_HEADER_SESSION" : "Sessão / Ambiente", + "SECTION_HEADER_TYPESCRIPT" : "Transcrição (Gravação do Texto da Sessão)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Tecla de Backspace envia:", + "FIELD_HEADER_COLOR_SCHEME" : "Esquema de cor:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Criar caminho de transcrição automaticamente:", + "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar do terminal:", + "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", + "FIELD_HEADER_FONT_NAME" : "Nome da fonte:", + "FIELD_HEADER_FONT_SIZE" : "Tamanho da fonte:", + "FIELD_HEADER_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Expressão regular para falha de login:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Expressão regular para login realizado com sucesso:", + "FIELD_HEADER_USERNAME" : "Usuário:", + "FIELD_HEADER_USERNAME_REGEX" : "Expressão regular de usuário:", + "FIELD_HEADER_PASSWORD" : "Senha:", + "FIELD_HEADER_PASSWORD_REGEX" : "Expressão regular de senha:", + "FIELD_HEADER_PORT" : "Porta:", + "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Incluir eventos chave:", + "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", + "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", + "FIELD_HEADER_SCROLLBACK" : "Tamanho máximo de retrocesso:", + "FIELD_HEADER_TERMINAL_TYPE" : "Tipo de terminal: ", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Nome da transcrição:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Caminho da transcrição:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera de inicialização do host:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "Backspace (Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "Delete (Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Preto sobre branco", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Cinza sobre preto", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Verde sobre preto", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Branco sobre preto", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "Autenticação", + "SECTION_HEADER_BEHAVIOR" : "Comportamento do terminal", + "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", + "SECTION_HEADER_DISPLAY" : "Tela", + "SECTION_HEADER_RECORDING" : "Gravação de Tela", + "SECTION_HEADER_TYPESCRIPT" : "Transcrição (Gravação do Texto da Sessão)", + "SECTION_HEADER_NETWORK" : "Rede", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Nome do servidor de áudio:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Codificação:", + "FIELD_HEADER_COLOR_DEPTH" : "Profundidade de cores:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Criar caminho de gravação automaticamente:", + "FIELD_HEADER_CURSOR" : "Cursor:", + "FIELD_HEADER_DEST_HOST" : "Host de destino:", + "FIELD_HEADER_DEST_PORT" : "Porta de destino:", + "FIELD_HEADER_DISABLE_COPY" : "Desabilitar copiar da estação remota:", + "FIELD_HEADER_DISABLE_PASTE" : "Desabilitar colar do cliente:", + "FIELD_HEADER_ENABLE_AUDIO" : "Habilitar áudio:", + "FIELD_HEADER_ENABLE_SFTP" : "Habilitar SFTP:", + "FIELD_HEADER_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_USERNAME" : "Usuário:", + "FIELD_HEADER_PASSWORD" : "Senha:", + "FIELD_HEADER_PORT" : "Porta:", + "FIELD_HEADER_READ_ONLY" : "Apenas-leitura:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Excluir mouse:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Excluir gráficos/streams:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Excluir eventos chave:", + "FIELD_HEADER_RECORDING_NAME" : "Nome da gravação:", + "FIELD_HEADER_RECORDING_PATH" : "Caminho da gravação:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Diretório padrão de envio:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "Desabilitar recebimento de arquivos:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Chave pública (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Nome do host:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Intervalo de keepalive do SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Frase-senha:", + "FIELD_HEADER_SFTP_PASSWORD" : "Senha:", + "FIELD_HEADER_SFTP_PORT" : "Porta:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Chave privada:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Diretório raíz da escolha de arquivos:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "Desabilitar envio de arquivos:", + "FIELD_HEADER_SFTP_USERNAME" : "Usuário:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Trocar componentes vermelho/azul:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "Endereço de broadcast para pacotes WoL:", + "FIELD_HEADER_WOL_MAC_ADDR" : "Endereço MAC do host remoto:", + "FIELD_HEADER_WOL_SEND_PACKET" : "Enviar pacote WoL:", + "FIELD_HEADER_WOL_WAIT_TIME" : "Tempo de espera de inicialização do host:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 color", + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-bit)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-bit)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-bit)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "Local", + "FIELD_OPTION_CURSOR_REMOTE" : "Remoto", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "Áudio", + "SECTION_HEADER_AUTHENTICATION" : "Autenticação", + "SECTION_HEADER_CLIPBOARD" : "Área de Transferência", + "SECTION_HEADER_DISPLAY" : "Tela", + "SECTION_HEADER_NETWORK" : "Rede", + "SECTION_HEADER_RECORDING" : "Gravação de Tela", + "SECTION_HEADER_REPEATER" : "Repetidor VNC", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "Wake-on-LAN (WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Configurações" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "history.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Os registros históricos das conexões são mostrados aqui e podem ser reordenadas clicando nos títulos das colunas. Para buscar por registros específicos, digite algo e clique em \"Procurar\". Apenas registros que correspondem ao filtro fornecido serão listados.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Nenhum registro correspondente", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome da conexão", + "TABLE_HEADER_SESSION_DURATION" : "Duração", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Host remoto", + "TABLE_HEADER_SESSION_STARTDATE" : "Horário de início", + "TABLE_HEADER_SESSION_USERNAME" : "Usuário", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Nova conexão", + "ACTION_NEW_CONNECTION_GROUP" : "Novo grupo", + "ACTION_NEW_SHARING_PROFILE" : "Novo Perfil Compartilhado", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Clique na conexão abaixo para gerenciar a conexão. Dependendo do seu nível de acesso, conexões podem ser adicionadas e removidas, bem como suas propriedades (protocolo, nome do host, porta, etc) podem ser alteradas.", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Conexões" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Idioma:", + "FIELD_HEADER_PASSWORD" : "Senha:", + "FIELD_HEADER_PASSWORD_OLD" : "Senha Atual:", + "FIELD_HEADER_PASSWORD_NEW" : "Nova Senha:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Confirme a Nova Senha:", + "FIELD_HEADER_TIMEZONE" : "Fuso Horário:", + "FIELD_HEADER_USERNAME" : "Usuário:", + + "HELP_DEFAULT_INPUT_METHOD" : "O método de entrada padrão determina como os eventos do teclado serão recebidos pelo Guacamole. Mudar este parâmetro pode ser necessário para utilização de um dispositivo móvel, ou ao digitar através de um IME (método de entrada). Esta configuração pode ser substituída em cada conexão através do menu do Guacamole.", + "HELP_DEFAULT_MOUSE_MODE" : "O modo de emulação padrão do mouse determina como o mouse remoto vai se comportar em novas conexões em relação aos toques. Esta configuração pode ser substituída em cada conexão através do menu do Guacamole.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "As opções abaixo estão relacionadas ao idioma e localização do usuário e terão impacto sobre como várias partes da interface são exibidas", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Se você deseja alterar a sua senha, informe a senha atual e a nova senha abaixo, e clique em \"Alterar Senha\". A mudança terá efeito imediato.", + + "INFO_PASSWORD_CHANGED" : "Senha alterada.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Método de Entrada Padrão", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Modo de Emulação de Mouse Padrão", + "SECTION_HEADER_UPDATE_PASSWORD" : "Alterar Senha" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Novo Usuário", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Clique em um usuário abaixo para gerenciá-lo. Dependendo do seu nível de acesso, usuários podem ser adicionados e removidos, e suas senhas podem ser alteradas.", + + "SECTION_HEADER_USERS" : "Usuários", + + "TABLE_HEADER_FULL_NAME" : "Nome completo", + "TABLE_HEADER_LAST_ACTIVE" : "Última atividade", + "TABLE_HEADER_ORGANIZATION" : "Organização", + "TABLE_HEADER_USERNAME" : "Usuário" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Novo Grupo", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Clique em um grupo abaixo para gerenciá-lo. Dependendo do seu nível de acesso, grupos podem ser adicionados ou removidos, e seus usuários e grupos membros podem ser modificados.", + + "SECTION_HEADER_USER_GROUPS" : "Grupos", + + "TABLE_HEADER_USER_GROUP_NAME" : "Nome do Grupo" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Encerrar Sessões", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Encerrar Sessões", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Esta página será preenchida com conexões ativas no momento. As conexões listadas e a capacidade de encerrar estas conexões dependem do seu nível de acesso. Se você deseja encerrar uma ou mais sessões, marque a caixa ao lado destas sessões e clique em \"Encerrar Sessões\". Encerrar uma sessão desconectará imediatamente o usuário da conexão associada.", + + "INFO_NO_SESSIONS" : "Nenhuma sessão ativa", + + "SECTION_HEADER_SESSIONS" : "Sessões Ativas", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Nome da conexão", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Host remoto", + "TABLE_HEADER_SESSION_STARTDATE" : "Ativo desde", + "TABLE_HEADER_SESSION_USERNAME" : "Usuário", + + "TEXT_CONFIRM_DELETE" : "Você tem certeza que quer encerrar as sessões selecionadas? Usuários que estão utilizando estas sessões serão imediatamente desconectados." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Endereço de E-mail:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Nome completo:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Organização:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Função:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ru.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ru.json new file mode 100644 index 0000000000..7243e94972 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/ru.json @@ -0,0 +1,842 @@ +{ + + "NAME" : "Русский", + + "APP" : { + + "ACTION_ACKNOWLEDGE" : "ОК", + "ACTION_CANCEL" : "Отмена", + "ACTION_CLONE" : "Клонировать", + "ACTION_CONTINUE" : "Продолжить", + "ACTION_DELETE" : "Удалить", + "ACTION_DELETE_SESSIONS" : "Завершить сессии", + "ACTION_DOWNLOAD" : "Скачать", + "ACTION_LOGIN" : "Вход", + "ACTION_LOGOUT" : "Выход", + "ACTION_MANAGE_CONNECTIONS" : "Подключения", + "ACTION_MANAGE_PREFERENCES" : "Настройки", + "ACTION_MANAGE_SETTINGS" : "Опции", + "ACTION_MANAGE_SESSIONS" : "Активные сессии", + "ACTION_MANAGE_USERS" : "Пользователи", + "ACTION_MANAGE_USER_GROUPS" : "Группы", + "ACTION_NAVIGATE_BACK" : "Назад", + "ACTION_NAVIGATE_HOME" : "Главная", + "ACTION_SAVE" : "Сохранить", + "ACTION_SEARCH" : "Искать", + "ACTION_SHARE" : "Расшарить", + "ACTION_UPDATE_PASSWORD" : "Обновить пароль", + "ACTION_VIEW_HISTORY" : "История", + + "DIALOG_HEADER_ERROR" : "Ошибка", + + "ERROR_PAGE_UNAVAILABLE" : "Произошла ошибка, действие не может быть завершено. Если проблема будет повторяться, обратитесь к системному администратору или проверьте системные журналы.", + "ERROR_PASSWORD_BLANK" : "Пароль не может быть пустым.", + "ERROR_PASSWORD_MISMATCH" : "Указанные пароли не совпадают.", + + "FIELD_HEADER_PASSWORD" : "Пароль:", + "FIELD_HEADER_PASSWORD_AGAIN" : "Повтор пароля:", + + "FIELD_PLACEHOLDER_FILTER" : "Фильтр", + + "FORMAT_DATE_TIME_PRECISE" : "dd.MM.yyyy HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "Сейчас в системе {USERS} {USERS, plural, one{пользователь} few{пользователя} many{пользователей} other{пользователя}}.", + + "TEXT_ANONYMOUS_USER" : "Аноним", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{секунда} few{секуны} many{секунд} other{секуны}}} minute{{VALUE, plural, one{минута} few{минуты} many{минут} other{минуты}}} hour{{VALUE, plural, one{час} few{часа} many{часов} other{часа}}} day{{VALUE, plural, one{день} few{дня} many{дней} other{дня}}} other{}}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "Очистить", + "ACTION_DISCONNECT" : "Отключиться", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "Переподключиться", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "Загрузка файлов", + + "DIALOG_HEADER_CONNECTING" : "Подключение", + "DIALOG_HEADER_CONNECTION_ERROR" : "Ошибка подключения", + "DIALOG_HEADER_DISCONNECTED" : "Отключено", + + "ERROR_CLIENT_201" : "Соединение было закрыто, так как сервер перегружен. Пожалуйста, попробуйте повторить попытку позднее.", + "ERROR_CLIENT_202" : "Сервер Guacamole закрыл соединение, так как удаленный рабочий стол долго не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + "ERROR_CLIENT_203" : "На сервере удаленных рабочих столов произошла ошибка и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + "ERROR_CLIENT_207" : "Сервер удаленных рабочих столов недосягаем. Если проблема сохранится, свяжитесь с системным администратором или проверьте логи.", + "ERROR_CLIENT_208" : "Сервер удаленных рабочих столов недоступен. Если проблема сохранится, свяжитесь с системным администратором или проверьте логи.", + "ERROR_CLIENT_209" : "Сервер удаленных рабочих столов закрыл соединение, так как оно конфликтует с другим соединением. Пожалуйста, попробуйте повторить попытку позднее.", + "ERROR_CLIENT_20A" : "Сервер удаленных рабочих столов закрыл соединение, так как оно долгое время было неактивно. Если это нежелательное поведение, обратитесь к системному администратору или проверьте настройки.", + "ERROR_CLIENT_20B" : "Сервер удаленных рабочих столов закрыл соединение принудительно. Если это нежелательное поведение, обратитесь к системному администратору или проверьте настройки.", + "ERROR_CLIENT_301" : "Не удалось выполнить вход. Пожалуйста, переподключитесь и повторите попытку.", + "ERROR_CLIENT_303" : "Сервер удаленных рабочих столов запретил доступ к этому соединению. Для получения доступа, пожалуйста, обратитесь к администратору.", + "ERROR_CLIENT_308" : "Сервер Guacamole закрыл соединение, так как браузер не ответил в течение отведенного времени. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", + "ERROR_CLIENT_31D" : "Сервер Guacamole отклонил доступ к соединению, так как вы превысили максимальное количество одновременных подключений. Пожалуйста, закройте ненужные соединения и повторите попытку.", + "ERROR_CLIENT_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + + "ERROR_TUNNEL_201" : "Сервер Guacamole отклонил соединение, так как уже открыто слишком много соединений. Пожалуйста, попробуйте повторить попытку позднее.", + "ERROR_TUNNEL_202" : "Соединение было закрыто, так как сервер долго не отвечает. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", + "ERROR_TUNNEL_203" : "На сервере произошла ошибка и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + "ERROR_TUNNEL_204" : "Соединение не существует. Проверьте, пожалуйста, название соединения.", + "ERROR_TUNNEL_205" : "Соединение в настоящий момент занято и доступ к этому соединению не разрешен. Пожалуйста, попробуйте повторить попытку позднее.", + "ERROR_TUNNEL_207" : "Сервер Guacamole на данный момент недоступен. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", + "ERROR_TUNNEL_208" : "Сервер Guacamole не принимает соединения. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", + "ERROR_TUNNEL_301" : "У вас нет разрешения для доступа к этому соединению, так как вы не выполнили вход. Пожалуйста, выполните вход и повторите попытку.", + "ERROR_TUNNEL_303" : "У вас нет разрешения для доступа к этому соединению. Для получения доступа, пожалуйста, обратитесь к администратору.", + "ERROR_TUNNEL_308" : "Сервер Guacamole закрыл соединение, так как браузер не ответил в течение отведенного времени. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", + "ERROR_TUNNEL_31D" : "Сервер Guacamole отклонил доступ к соединению, так как вы превысили максимальное количество одновременных подключений. Пожалуйста, закройте несколько установленных соединений и повторите попытку.", + "ERROR_TUNNEL_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + + "ERROR_UPLOAD_100" : "Передача файлов либо не поддерживается, либо выключена. Пожалуйста, обратитесь к администратору или проверьте логи.", + "ERROR_UPLOAD_201" : "Слишком много задач передачи файлов уже активно. Подождите завершения текущих задач и повторите попытку снова.", + "ERROR_UPLOAD_202" : "Файл не может быть передан, так как удаленный рабочий стол не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + "ERROR_UPLOAD_203" : "Произошла ошибка при передаче файла. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + "ERROR_UPLOAD_204" : "Место назначения для передаваемого файла не существует. Пожалуйста, проверьте правильность указания места назначения и повторите попытку снова.", + "ERROR_UPLOAD_205" : "Место назначения для передаваемого файла заблокировано. Пожалуйста, дождитесь завершения других передач и повторите попытку снова.", + "ERROR_UPLOAD_301" : "У вас нет разрешения на загрузку файла, так как вы не выполнили вход. Пожалуйста, выполните вход и повторите попытку передачи файла.", + "ERROR_UPLOAD_303" : "У вас нет разрешения на загрузку файла. Для получения разрешения проверьте настройки или обратитесь к администратору.", + "ERROR_UPLOAD_308" : "Передача файла зависла. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.", + "ERROR_UPLOAD_31D" : "Слишком много файлов уже передается в настоящий момент. Подождите завершения текущих передач и повторите попытку снова.", + "ERROR_UPLOAD_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.", + + "HELP_CLIPBOARD" : "Текст, скопированный или вырезанный внутри сеанса, появится в этом поле. Изменение текста в этом поле также отобразится в буфере обмена удаленного рабочего стола.", + "HELP_INPUT_METHOD_NONE" : "Никакой метод ввода не используется. Ввод разрешен только для физической клавиатуры.", + "HELP_INPUT_METHOD_OSK" : "Отображать и принимать ввод со встроенной экранной клавиатуры. Экранная клавиатура позволяет вводить любые комбинации, недоступные в других режимах (например Alt-Ctrl-Del).", + "HELP_INPUT_METHOD_TEXT" : "Разрешить ввод текста, эмулировать события клавиатуры в зависимости от нажатых клавиш. Это необходимо для устройств без физической клавиатуры (смартфоны, планшеты).", + "HELP_MOUSE_MODE" : "Определяет поведение курсора мыши при прикосновении.", + "HELP_MOUSE_MODE_ABSOLUTE" : "Прикоснитесь, чтобы сделать клик. Клик происходит в точке прикосновения к экрану.", + "HELP_MOUSE_MODE_RELATIVE" : "Потяните, чтобы перемещать курсор. Прикоснитесь, чтобы сделать клик. Клик происходит в точке нахождения курсора.", + "HELP_SHARE_LINK" : "Это соединение расшарено и доступно всем по следующ{LINKS, plural, one{ей ссылке} other{им ссылкам}}:", + + "INFO_CONNECTION_SHARED" : "Это соединение теперь расшарено.", + "INFO_NO_FILE_TRANSFERS" : "Нет загрузок.", + + "NAME_INPUT_METHOD_NONE" : "Нет", + "NAME_INPUT_METHOD_OSK" : "Экранная клавиатура", + "NAME_INPUT_METHOD_TEXT" : "Ввод текста", + "NAME_MOUSE_MODE_ABSOLUTE" : "Тачскрин", + "NAME_MOUSE_MODE_RELATIVE" : "Тачпад", + + "SECTION_HEADER_CLIPBOARD" : "Буфер обмена", + "SECTION_HEADER_DEVICES" : "Устройства", + "SECTION_HEADER_DISPLAY" : "Экран", + "SECTION_HEADER_FILE_TRANSFERS" : "Загрузки файлов", + "SECTION_HEADER_INPUT_METHOD" : "Метод ввода", + "SECTION_HEADER_MOUSE_MODE" : "Режим эмуляции мыши", + + "TEXT_ZOOM_AUTO_FIT" : "Автоматически умещать в браузере", + "TEXT_CLIENT_STATUS_IDLE" : "Бездействие.", + "TEXT_CLIENT_STATUS_CONNECTING" : "Подключение к Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "Вы были отключены.", + "TEXT_CLIENT_STATUS_UNSTABLE" : "Сетевое соединение с сервером Guacamole нестабильно.", + "TEXT_CLIENT_STATUS_WAITING" : "Подключено к Guacamole. Ожидание ответа...", + "TEXT_RECONNECT_COUNTDOWN" : "Переподключение через {REMAINING} {REMAINING, plural, one{секунду} few{секунды} many{секунд} other{секунды}}...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + + "URL_OSK_LAYOUT" : "layouts/ru-ru-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "Спрятать", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "Показать", + + "FIELD_HEADER_BACKGROUND" : "Цвет фона", + "FIELD_HEADER_FOREGROUND" : "Основной цвет", + + "FIELD_OPTION_CUSTOM" : "Выбрать...", + + "SECTION_HEADER_DETAILS" : "Подробно:" + + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "По умолчанию (XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "DD.MM.YYYY", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "Нажмите, чтобы показать пароль", + "HELP_HIDE_PASSWORD" : "Нажмите, чтобы спрятать пароль" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "Нет недавних подключений.", + + "PASSWORD_CHANGED" : "Пароль был изменен.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Все подключения", + "SECTION_HEADER_RECENT_CONNECTIONS" : "Недавние подключения" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "@:APP.TEXT_ANONYMOUS_USER" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "Неверные данные для входа", + + "FIELD_HEADER_USERNAME" : "Имя пользователя", + "FIELD_HEADER_PASSWORD" : "Пароль" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить подключение", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Размещение:", + "FIELD_HEADER_NAME" : "Название:", + "FIELD_HEADER_PROTOCOL" : "Протокол:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "Активно", + "INFO_CONNECTION_NOT_USED" : "Это подключение еще не использовалось.", + + "SECTION_HEADER_EDIT_CONNECTION" : "Редактирование подключения", + "SECTION_HEADER_HISTORY" : "История использования", + "SECTION_HEADER_PARAMETERS" : "Настройки", + + "TABLE_HEADER_HISTORY_USERNAME" : "Имя пользователя", + "TABLE_HEADER_HISTORY_START" : "Время начала", + "TABLE_HEADER_HISTORY_DURATION" : "Продолжительность", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "Удаленный узел", + + "TEXT_CONFIRM_DELETE" : "Подключения не могут быть восстановлены после удаления. Вы уверены, что хотите удалить подключение?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить группу подключений", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "Размещение:", + "FIELD_HEADER_NAME" : "Название:", + "FIELD_HEADER_TYPE" : "Тип:", + + "NAME_TYPE_BALANCING" : "Балансирующая", + "NAME_TYPE_ORGANIZATIONAL" : "Структурная", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Редактирование группы подключений", + + "TEXT_CONFIRM_DELETE" : "Группы подключений не могут быть восстановлены после удаления. Вы уверены, что хотите удалить группу подключений?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить профиль расшаривания", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "Название:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "Изначальное подключение:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Редактирование профиля расшаривания", + "SECTION_HEADER_PARAMETERS" : "Настройки", + + "TEXT_CONFIRM_DELETE" : "Профили расшаривания не могут быть восстановлены после удаления. Вы уверены, что хотите удалить профиль расшаривания?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить пользователя", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "Администрирование системы:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "Изменение собственного пароля:", + "FIELD_HEADER_CREATE_NEW_USERS" : "Создание нового пользователя:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "Создание новой группы пользователей:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "Создание нового подключения:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "Создание новой группы подключений:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "Создание нового профиля расшаривания:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "Имя пользователя:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Этот пользователь еще не сопоставлен ни с одной группой. Раскройте эту секцию для добавления групп.", + + "INFO_READ_ONLY" : "Извините, этот пользователь не может быть изменен.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "Нет доступных групп.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "Все подключения", + "SECTION_HEADER_CONNECTIONS" : "Подключения", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "Текущие подключения", + "SECTION_HEADER_EDIT_USER" : "Редактирование пользователя", + "SECTION_HEADER_PERMISSIONS" : "Разрешения", + "SECTION_HEADER_USER_GROUPS" : "Группы", + + "TEXT_CONFIRM_DELETE" : "Пользователи не могут быть восстановлены после удаления. Вы уверены, что хотите удалить пользователя?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить группу", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "Название:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "Эта группа еще не сопоставлена ни с одной группой. Раскройте эту секцию для добавления групп.", + "HELP_NO_MEMBER_USER_GROUPS" : "Эта группа еще не содержит ни одной группы. Раскройте эту секцию для добавления групп.", + "HELP_NO_MEMBER_USERS" : "Эта группа еще не содержит ни одного пользователя. Раскройте эту секцию для добавления пользователей.", + + "INFO_READ_ONLY" : "Извините, эта группа не может быть изменена.", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "Нет доступных пользователей.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "Редактирование группы", + "SECTION_HEADER_MEMBER_USERS" : "Пользователи в группе", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "Дочерние группы", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "Родительские группы", + + "TEXT_CONFIRM_DELETE" : "Группы не могут быть восстановлены после удаления. Вы уверены, что хотите удалить группу?" + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "Клавиша Backspace посылает:", + "FIELD_HEADER_CA_CERT" : "Сертификат центра сертификации (CA):", + "FIELD_HEADER_CLIENT_CERT" : "Сертификат клиента:", + "FIELD_HEADER_CLIENT_KEY" : "Ключ клиента:", + "FIELD_HEADER_COLOR_SCHEME" : "Цветовая схема:", + "FIELD_HEADER_CONTAINER" : "Название контейнера:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Автоматически создавать путь typescript:", + "FIELD_HEADER_FONT_NAME" : "Шрифт:", + "FIELD_HEADER_FONT_SIZE" : "Размер шрифта:", + "FIELD_HEADER_HOSTNAME" : "Сервер:", + "FIELD_HEADER_IGNORE_CERT" : "Игнорировать сертификат сервера:", + "FIELD_HEADER_NAMESPACE" : "Пространство имен:", + "FIELD_HEADER_POD" : "Название пода:", + "FIELD_HEADER_PORT" : "Порт:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", + "FIELD_HEADER_RECORDING_NAME" : "Название записи:", + "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", + "FIELD_HEADER_SCROLLBACK" : "Размер буфера прокрутки:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Название typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Путь typescript:", + "FIELD_HEADER_USE_SSL" : "Использовать SSL/TLS", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Серое на черном", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", + "SECTION_HEADER_BEHAVIOR" : "Поведение терминала", + "SECTION_HEADER_CONTAINER" : "Контейнер", + "SECTION_HEADER_DISPLAY" : "Экран", + "SECTION_HEADER_RECORDING" : "Запись экрана", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (запись текстовой сессии)", + "SECTION_HEADER_NETWORK" : "Сеть" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "Имя клиента:", + "FIELD_HEADER_COLOR_DEPTH" : "Глубина цвета:", + "FIELD_HEADER_CONSOLE" : "Консоль администратора:", + "FIELD_HEADER_CONSOLE_AUDIO" : "Поддержка звука в консоли:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "Автоматически создавать путь для диска:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", + "FIELD_HEADER_DISABLE_AUDIO" : "Отключить звук:", + "FIELD_HEADER_DISABLE_AUTH" : "Отключить аутентификацию:", + "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", + "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", + "FIELD_HEADER_DOMAIN" : "Домен:", + "FIELD_HEADER_DPI" : "Разрешение экрана (DPI):", + "FIELD_HEADER_DRIVE_NAME" : "Название диска:", + "FIELD_HEADER_DRIVE_PATH" : "Путь для диска:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "Включить звуковой вход (микрофон):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Включить композитор рабочего стола (Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "Включить диск:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "Включить сглаживание шрифтов (ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "Включить отображение содержимого окна при перетаскивании:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "Включить анимации меню:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "Отключить кеширование битмапов:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "Отключить кеширование скрытых элементов:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "Отключить кеширование глифов:", + "FIELD_HEADER_ENABLE_PRINTING" : "Включить печать:", + "FIELD_HEADER_ENABLE_SFTP" : "Включить SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "Включить темы:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "Включить обои:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "Домен:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "Сервер:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "Пароль:", + "FIELD_HEADER_GATEWAY_PORT" : "Порт:", + "FIELD_HEADER_GATEWAY_USERNAME" : "Имя пользователя:", + "FIELD_HEADER_HEIGHT" : "Высота:", + "FIELD_HEADER_HOSTNAME" : "Сервер:", + "FIELD_HEADER_IGNORE_CERT" : "Игнорировать сертификат сервера:", + "FIELD_HEADER_INITIAL_PROGRAM" : "Запуск программ при подключении:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "Информация о балансировке нагрузки:", + "FIELD_HEADER_PASSWORD" : "Пароль:", + "FIELD_HEADER_PORT" : "Порт:", + "FIELD_HEADER_PRINTER_NAME" : "Название принтера:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "Данные BLOB (HyperV VM ID):", + "FIELD_HEADER_PRECONNECTION_ID" : "Данные RDP ID:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", + "FIELD_HEADER_RECORDING_NAME" : "Название записи:", + "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", + "FIELD_HEADER_RESIZE_METHOD" : "Метод изменения размера стола:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "Параметры RemoteApp:", + "FIELD_HEADER_REMOTE_APP_DIR" : "Рабочий каталог RemoteApp:", + "FIELD_HEADER_REMOTE_APP" : "Программа RemoteApp:", + "FIELD_HEADER_SECURITY" : "Режим безопасности:", + "FIELD_HEADER_SERVER_LAYOUT" : "Раскладка клавиатуры:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Директория загрузки по умолчанию:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Публичный ключ сервера (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Сервер:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Секретная фраза:", + "FIELD_HEADER_SFTP_PASSWORD" : "Пароль:", + "FIELD_HEADER_SFTP_PORT" : "Порт:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Приватный ключ:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Директория просмотра по умолчанию:", + "FIELD_HEADER_SFTP_USERNAME" : "Имя пользователя:", + "FIELD_HEADER_STATIC_CHANNELS" : "Названия статических каналов:", + "FIELD_HEADER_TIMEZONE" : "Часовой пояс:", + "FIELD_HEADER_USERNAME" : "Имя пользователя:", + "FIELD_HEADER_WIDTH" : "Ширина:", + + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-бит)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-бит)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-бит)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 цветов", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "Виртуальный канал \"Display Update\" (RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "Переподключение", + + "FIELD_OPTION_SECURITY_ANY" : "Любой", + "FIELD_OPTION_SECURITY_NLA" : "NLA (аутентификация уровня сети)", + "FIELD_OPTION_SECURITY_RDP" : "RDP-шифрование", + "FIELD_OPTION_SECURITY_TLS" : "TLS-шифрование", + + "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", + "SECTION_HEADER_BASIC_PARAMETERS" : "Основные настройки", + "SECTION_HEADER_DEVICE_REDIRECTION" : "Перенаправление устройств", + "SECTION_HEADER_DISPLAY" : "Экран", + "SECTION_HEADER_GATEWAY" : "Шлюз удаленных рабочих столов", + "SECTION_HEADER_LOAD_BALANCING" : "Балансировщик нагрузки", + "SECTION_HEADER_NETWORK" : "Сеть", + "SECTION_HEADER_PERFORMANCE" : "Производительность", + "SECTION_HEADER_PRECONNECTION_PDU" : "Предварительные данные подключения (Hyper-V)", + "SECTION_HEADER_RECORDING" : "Запись экрана" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "Клавиша Backspace посылает:", + "FIELD_HEADER_COLOR_SCHEME" : "Цветовая схема:", + "FIELD_HEADER_COMMAND" : "Команда для выполнения:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Автоматически создавать путь typescript:", + "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", + "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", + "FIELD_HEADER_FONT_NAME" : "Шрифт:", + "FIELD_HEADER_FONT_SIZE" : "Размер шрифта:", + "FIELD_HEADER_ENABLE_SFTP" : "Включить SFTP:", + "FIELD_HEADER_HOST_KEY" : "Публичный ключ сервера (Base64):", + "FIELD_HEADER_HOSTNAME" : "Сервер:", + "FIELD_HEADER_LOCALE" : "Language/Locale ($LANG):", + "FIELD_HEADER_USERNAME" : "Имя пользователя:", + "FIELD_HEADER_PASSWORD" : "Пароль:", + "FIELD_HEADER_PASSPHRASE" : "Секретная фраза:", + "FIELD_HEADER_PORT" : "Порт:", + "FIELD_HEADER_PRIVATE_KEY" : "Приватный ключ:", + "FIELD_HEADER_SCROLLBACK" : "Размер буфера прокрутки:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", + "FIELD_HEADER_RECORDING_NAME" : "Название записи:", + "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для сервера:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Директория просмотра по умолчанию:", + "FIELD_HEADER_TERMINAL_TYPE" : "Тип терминала:", + "FIELD_HEADER_TIMEZONE" : "Часовой пояс ($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Название typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Путь typescript:", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Серое на черном", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном", + + "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", + "SECTION_HEADER_BEHAVIOR" : "Поведение терминала", + "SECTION_HEADER_DISPLAY" : "Экран", + "SECTION_HEADER_NETWORK" : "Сеть", + "SECTION_HEADER_RECORDING" : "Запись экрана", + "SECTION_HEADER_SESSION" : "Сессия / среда:", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (запись текстовой сессии)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "Клавиша Backspace посылает:", + "FIELD_HEADER_COLOR_SCHEME" : "Цветовая схема:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Автоматически создавать путь typescript:", + "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", + "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", + "FIELD_HEADER_FONT_NAME" : "Шрифт:", + "FIELD_HEADER_FONT_SIZE" : "Размер шрифта:", + "FIELD_HEADER_HOSTNAME" : "Сервер:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "Regex определения отказа во входе:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "Regex определения успешного входа:", + "FIELD_HEADER_USERNAME" : "Имя пользователя:", + "FIELD_HEADER_USERNAME_REGEX" : "Regex определения запроса имени пользователя:", + "FIELD_HEADER_PASSWORD" : "Пароль:", + "FIELD_HEADER_PASSWORD_REGEX" : "Regex определения запроса пароля:", + "FIELD_HEADER_PORT" : "Порт:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", + "FIELD_HEADER_RECORDING_NAME" : "Название записи:", + "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", + "FIELD_HEADER_SCROLLBACK" : "Размер буфера прокрутки:", + "FIELD_HEADER_TERMINAL_TYPE" : "Тип терминала:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Название typescript:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Путь typescript:", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "Серое на черном", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном", + + "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", + "SECTION_HEADER_BEHAVIOR" : "Поведение терминала", + "SECTION_HEADER_DISPLAY" : "Экран", + "SECTION_HEADER_RECORDING" : "Запись экрана", + "SECTION_HEADER_TYPESCRIPT" : "Typescript (запись текстовой сессии)", + "SECTION_HEADER_NETWORK" : "Сеть" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "Название аудио-сервера:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "Кодировка:", + "FIELD_HEADER_COLOR_DEPTH" : "Глубина цвета:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "Автоматически создавать путь для записи:", + "FIELD_HEADER_CURSOR" : "Курсор:", + "FIELD_HEADER_DEST_HOST" : "Сервер назначения:", + "FIELD_HEADER_DEST_PORT" : "Порт назначения:", + "FIELD_HEADER_DISABLE_COPY" : "Отключить копирование в буфер обмена:", + "FIELD_HEADER_DISABLE_PASTE" : "Отключить вставку из буфера обмена:", + "FIELD_HEADER_ENABLE_AUDIO" : "Включить звук:", + "FIELD_HEADER_ENABLE_SFTP" : "Включить SFTP:", + "FIELD_HEADER_HOSTNAME" : "Сервер:", + "FIELD_HEADER_PASSWORD" : "Пароль:", + "FIELD_HEADER_PORT" : "Порт:", + "FIELD_HEADER_READ_ONLY" : "Только просмотр:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "Исключить мышь:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "Включить события клавиатуры:", + "FIELD_HEADER_RECORDING_NAME" : "Название записи:", + "FIELD_HEADER_RECORDING_PATH" : "Путь для записи:", + "FIELD_HEADER_SFTP_DIRECTORY" : "Директория загрузки по умолчанию:", + "FIELD_HEADER_SFTP_HOST_KEY" : "Публичный ключ сервера (Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "Сервер:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для SFTP:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "Секретная фраза:", + "FIELD_HEADER_SFTP_PASSWORD" : "Пароль:", + "FIELD_HEADER_SFTP_PORT" : "Порт:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Приватный ключ:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "Директория просмотра по умолчанию:", + "FIELD_HEADER_SFTP_USERNAME" : "Имя пользователя:", + "FIELD_HEADER_SWAP_RED_BLUE" : "Поменять синий и красный компоненты:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 цветов", + "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-бит)", + "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-бит)", + "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-бит)", + + "FIELD_OPTION_CURSOR_LOCAL" : "Локальный", + "FIELD_OPTION_CURSOR_REMOTE" : "Удаленный", + + "SECTION_HEADER_AUDIO" : "Аудио", + "SECTION_HEADER_AUTHENTICATION" : "Аутентификация", + "SECTION_HEADER_CLIPBOARD" : "Буфер обмена", + "SECTION_HEADER_DISPLAY" : "Экран", + "SECTION_HEADER_NETWORK" : "Сеть", + "SECTION_HEADER_RECORDING" : "Запись экрана" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "Настройки" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "Здесь отображается журнал предыдущих подключений, который можно отсортировать, кликнув на заголовке колонки. Для поиска конкретных записей введите нужные данные и нажмите «Поиск». Тогда будут отображаться только записи, соответствующие данным для поиска.", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "Подходящих записей нет", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Название подключения", + "TABLE_HEADER_SESSION_DURATION" : "Продолжительность", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Удаленный узел", + "TABLE_HEADER_SESSION_STARTDATE" : "Время начала", + "TABLE_HEADER_SESSION_USERNAME" : "Имя пользователя", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_CONNECTION" : "Новое подключение", + "ACTION_NEW_CONNECTION_GROUP" : "Новая группа", + "ACTION_NEW_SHARING_PROFILE" : "Новый профиль расшаривания", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "Нажмите на подключение, чтобы управлять им. В зависимости от прав доступа возможно добавление и удаление подключений, а также изменение их свойств (протокол, название сервера, порт и т.д.).", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "Подключения" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "Язык:", + "FIELD_HEADER_PASSWORD" : "Пароль:", + "FIELD_HEADER_PASSWORD_OLD" : "Текущий пароль:", + "FIELD_HEADER_PASSWORD_NEW" : "Новый пароль:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Повтор нового пароля:", + "FIELD_HEADER_TIMEZONE" : "Часовой пояс:", + "FIELD_HEADER_USERNAME" : "Имя пользователя:", + + "HELP_DEFAULT_INPUT_METHOD" : "Режим ввода по умолчанию определяет, каким образом нажатия на клавиатуру будут передаваться Guacamole. Изменение данной настройки может быть полезным при работе с мобильных устройств или при вводе через IME. Данная настройка может быть сделана для каждого подключения через основное меню Guacamole.", + "HELP_DEFAULT_MOUSE_MODE" : "Режим эмуляции мыши по умолчанию определяет, каким образом мышь на удаленном сервере будет реагировать на прикосновения для новых подключений. Данная настройка может быть переопределена для каждого подключения через основное меню Guacamole.", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "Ниже вы можете выбрать язык и установить другие настройки локали, влияющие на отображение интерфейса пользователя.", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "Если вы хотите изменить пароль, укажите ваш текущий пароль и дважды укажите новый. Затем нажмите «Обновить пароль». Изменения вступят в силу моментально.", + + "INFO_PASSWORD_CHANGED" : "Пароль успешно изменен.", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "Метод ввода по умолчанию", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "Режим эмуляции мыши по умолчанию", + "SECTION_HEADER_UPDATE_PASSWORD" : "Изменить пароль" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "Создать пользователя", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "Нажмите на пользователя, чтобы управлять им. В зависимости от прав доступа возможно добавление и удаление пользователей, а также изменение паролей.", + + "SECTION_HEADER_USERS" : "Пользователи", + + "TABLE_HEADER_FULL_NAME" : "Полное имя", + "TABLE_HEADER_LAST_ACTIVE" : "Был активен", + "TABLE_HEADER_ORGANIZATION" : "Организация", + "TABLE_HEADER_USERNAME" : "Имя пользователя" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "Создать группу", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "Нажмите на группу, чтобы управлять ей. В зависимости от прав доступа возможно добавление и удаление групп, а также изменение членства других групп и пользователей.", + + "SECTION_HEADER_USER_GROUPS" : "Группы", + + "TABLE_HEADER_USER_GROUP_NAME" : "Название группы" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "Завершить сессии", + + "DIALOG_HEADER_CONFIRM_DELETE" : "Завершение сессий", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "Здесь показаны текущие активные сессии Guacamole. Отображаемые сессии и возможность их завершения зависит от ваших прав доступа. Если вы хотите завершить одну или несколько сессий, выберите нужные и нажмите «Завершить сессии». Принудительное завершение сессий приведет к немедленному отключению пользователей.", + + "INFO_NO_SESSIONS" : "Нет активных сессий", + + "SECTION_HEADER_SESSIONS" : "Активные сессии", + + "TABLE_HEADER_SESSION_USERNAME" : "Имя пользователя", + "TABLE_HEADER_SESSION_STARTDATE" : "Активен с", + "TABLE_HEADER_SESSION_REMOTEHOST" : "Удаленный узел", + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Название подключения", + + "TEXT_CONFIRM_DELETE" : "Вы уверены, что хотите завершить все выбранные сессии? Пользователи, работающие в этих сессиях, будут немедленно отключены." + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "Адрес электронной почты:", + "FIELD_HEADER_GUAC_FULL_NAME" : "Полное имя:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "Организация:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Роль:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/zh.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/zh.json new file mode 100644 index 0000000000..1431ed9e0b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/translations/zh.json @@ -0,0 +1,1133 @@ +{ + + "NAME" : "简体中文", + + "APP" : { + + "NAME" : "Apache Guacamole", + + "ACTION_ACKNOWLEDGE" : "确定", + "ACTION_CANCEL" : "取消", + "ACTION_CLEAR" : "清除", + "ACTION_CLONE" : "克隆", + "ACTION_CONTINUE" : "继续", + "ACTION_DELETE" : "删除", + "ACTION_DELETE_SESSIONS" : "删除会话", + "ACTION_DOWNLOAD" : "下载", + "ACTION_IMPORT" : "导入", + "ACTION_LOGIN" : "登录", + "ACTION_LOGIN_AGAIN" : "重新登录", + "ACTION_LOGOUT" : "登出", + "ACTION_MANAGE_CONNECTIONS" : "连接", + "ACTION_MANAGE_PREFERENCES" : "偏好", + "ACTION_MANAGE_SETTINGS" : "设置", + "ACTION_MANAGE_SESSIONS" : "活动会话", + "ACTION_MANAGE_USERS" : "用户", + "ACTION_MANAGE_USER_GROUPS" : "用户组", + "ACTION_NAVIGATE_BACK" : "返回", + "ACTION_NAVIGATE_HOME" : "首页", + "ACTION_PAUSE" : "暂停", + "ACTION_PLAY" : "播放", + "ACTION_SAVE" : "保存", + "ACTION_SEARCH" : "搜索", + "ACTION_SHARE" : "共享", + "ACTION_UPDATE_PASSWORD" : "更新密码", + "ACTION_VIEW_HISTORY" : "历史", + "ACTION_VIEW_RECORDING" : "查看", + + "DIALOG_HEADER_ERROR" : "错误", + + "ERROR_PAGE_UNAVAILABLE" : "发生错误,此操作无法完成。 如果问题仍然存在,请通知系统管理员或检查系统日志。", + "ERROR_PASSWORD_BLANK" : "密码不能为空。", + "ERROR_PASSWORD_MISMATCH" : "输入的密码不匹配。", + "ERROR_SINGLE_FILE_ONLY" : "请一次只上传一个文件", + + "FIELD_HEADER_PASSWORD" : "密码:", + "FIELD_HEADER_PASSWORD_AGAIN" : "重输密码:", + + "FIELD_PLACEHOLDER_FILTER" : "过滤", + + "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss", + + "INFO_ACTIVE_USER_COUNT" : "正在被 {USERS} 个用户使用。", + "INFO_LOGGED_OUT" : "您已登出。", + + "TEXT_ANONYMOUS_USER" : "匿名用户", + "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{秒} minute{分} hour{小时} day{天} other{}}", + "TEXT_UNTRANSLATED" : "{MESSAGE}" + + }, + + "CLIENT" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR_CLIENT_MESSAGES" : "@:APP.ACTION_CLEAR", + "ACTION_CLEAR_COMPLETED_TRANSFERS" : "@:APP.ACTION_CLEAR", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_DISCONNECT" : "断开连接", + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_NAVIGATE_BACK" : "@:APP.ACTION_NAVIGATE_BACK", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_RECONNECT" : "重新连接", + "ACTION_SAVE_FILE" : "@:APP.ACTION_SAVE", + "ACTION_SHARE" : "@:APP.ACTION_SHARE", + "ACTION_UPLOAD_FILES" : "上传文件", + + "DIALOG_HEADER_CONNECTING" : "正在连接", + "DIALOG_HEADER_CONNECTION_ERROR" : "连接出错", + "DIALOG_HEADER_DISCONNECTED" : "已断开连接", + + "ERROR_CLIENT_201" : "因服务器繁忙,本连接已被关闭。请稍等几分钟后再尝试。", + "ERROR_CLIENT_202" : "因远程桌面太久没有应答,Guacamole 服务器关闭了本连接。请重试或联系您的系统管理员。", + "ERROR_CLIENT_203" : "远程桌面服务器因为发生错误而关闭了本连接。请重试或联系您的系统管理员。", + "ERROR_CLIENT_207" : "联系不上远程桌面服务器。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", + "ERROR_CLIENT_208" : "远程桌面服务器不在线。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", + "ERROR_CLIENT_209" : "因与另一个连接冲突,远程桌面服务器关闭了本连接。请稍后重试。", + "ERROR_CLIENT_20A" : "因长时间没有活动,远程桌面服务器关闭了本连接。如果这不是期望的设置,请通知您的系统管理员,或检查您的系统设置。", + "ERROR_CLIENT_20B" : "远程桌面服务器强制关闭了本连接。如果这不是预期的情况,请通知您的系统管理员,或检查您的系统日志。", + "ERROR_CLIENT_301" : "登录失败。请重新连接后再重试。", + "ERROR_CLIENT_303" : "远程桌面服务器拒绝了本连接。如果需要使用本连接,请联系您的系统管理员开放权限,或者检查您的系统设置。", + "ERROR_CLIENT_308" : "因为您的浏览器长时间没有应答,Guacamole 服务器关闭了本连接。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试。", + "ERROR_CLIENT_31D" : "因为您已超出了单一用户可同时使用的连接数量,Guacamole 服务器拒绝了本连接。请先关闭至少一个连接再重试。", + "ERROR_CLIENT_DEFAULT" : "本连接因为 Guacamole 服务器出现了内部错误而被终止。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", + + "ERROR_TUNNEL_201" : "因为正在使用的活动连接太多,Guacamole 服务器拒绝了本连接。请稍后再重试。", + "ERROR_TUNNEL_202" : "因服务器太久没有应答,本连接已被关闭。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试,或者联系您的系统管理员。", + "ERROR_TUNNEL_203" : "服务器出错并关闭了本连接。请重试,或联系您的系统管理员。", + "ERROR_TUNNEL_204" : "请求的连接不存在。请先检查连接的名字再重试。", + "ERROR_TUNNEL_205" : "本连接正在使用中,并且不允许共享连接。请稍后重试。", + "ERROR_TUNNEL_207" : "联系不上 Guacamole 服务器。请先检查您的网络连接再重试。", + "ERROR_TUNNEL_208" : "Guacamole 服务器不接受连接请求。请先检查您的网络连接再重试。", + "ERROR_TUNNEL_301" : "您还未登录,所以没有使用此连接的权限。请先登录再重试。", + "ERROR_TUNNEL_303" : "您没有使用此连接的权限。如果您的确需要使用此连接,请联系您的系统管理员开通权限,或检查您的系统设置。", + "ERROR_TUNNEL_308" : "因为您的浏览器长时间没有应答,Guacamole 服务器关闭了本连接。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试。", + "ERROR_TUNNEL_31D" : "因为您已超出了单一用户可同时使用的连接数量,Guacamole 服务器拒绝了本连接。请先关闭至少一个连接再重试。", + "ERROR_TUNNEL_DEFAULT" : "本连接因为 Guacamole 服务器出现了内部错误而被终止。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", + + "ERROR_UPLOAD_100" : "不支持或不允许使用文件传输。请联系您的系统管理员,或检查您的系统日志。", + "ERROR_UPLOAD_201" : "正在同时传输太多文件。请等待当前的文件传输任务完成后,再重试。", + "ERROR_UPLOAD_202" : "因远程桌面服务器太久没有应答,文件不能传输。请重试或联系您的系统管理员。", + "ERROR_UPLOAD_203" : "远程桌面服务器在文件传输时出错。请重试或联系您的系统管理员。", + "ERROR_UPLOAD_204" : "文件传输的接收目录不存在。请先检查接收目录再重试。", + "ERROR_UPLOAD_205" : "文件传输的接收目录正被锁定。请等待正在进行的操作完成后,再重试。", + "ERROR_UPLOAD_301" : "您还未登录,所以没有上传此文件的权限。请先登录再重试。", + "ERROR_UPLOAD_303" : "您没有上传此文件的权限。如果您需要权限,请检查您的系统设置,或联系您的系统管理员。", + "ERROR_UPLOAD_308" : "文件传输已停止。这通常是因为网络问题(如不稳定的无线连接或网速太慢等)而导致的。请先检查您的网络连接再重试。", + "ERROR_UPLOAD_31D" : "正在同时传输太多文件。请等待当前的传输任务完成后,再重试。", + "ERROR_UPLOAD_DEFAULT" : "本连接因为 Guacamole 服务器出现了内部错误而被终止。如果问题持续,请通知您的系统管理员,或检查您的系统日志。", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CLIPBOARD" : "复制/剪切的文本将出现在这里。对下面文本内容所作的修改将会影响远程电脑上的剪贴板。", + "HELP_INPUT_METHOD_NONE" : "没有选择任何输入方式。将从连接的物理键盘接受键盘输入。", + "HELP_INPUT_METHOD_OSK" : "显示并从内建的 Guacamole 屏幕键盘接受输入。屏幕键盘可以输入平常无法输入的按键组合(如 Ctrl-Alt-Del 等)。", + "HELP_INPUT_METHOD_TEXT" : "允许输入文本,并根据所输入的文本模拟键盘事件。可用于没有物理键盘的设备,如手机等。", + "HELP_MOUSE_MODE" : "设置远程电脑上的鼠标对触控行为的反应。", + "HELP_MOUSE_MODE_ABSOLUTE" : "点击时立即触发按键。在点击的位置触发鼠标按键事件。", + "HELP_MOUSE_MODE_RELATIVE" : "拖拽时移动鼠标,再点击时触发按键。在鼠标当前所在的位置触发按键事件。", + "HELP_SHARE_LINK" : "正在共享当前连接,并可被使用以下链接的任何人使用:", + + "INFO_ANONYMOUS_USER_COUNT" : "匿名用户{COUNT, plural, one{} other{ (#)}}", + "INFO_CONNECTION_SHARED" : "此连接已被共享。", + "INFO_NO_FILE_TRANSFERS" : "无文件传输任务。", + "INFO_USER_COUNT" : "{USERNAME}{COUNT, plural, one{} other{ (#)}}", + + "NAME_INPUT_METHOD_NONE" : "无", + "NAME_INPUT_METHOD_OSK" : "屏幕键盘", + "NAME_INPUT_METHOD_TEXT" : "文本输入", + "NAME_KEY_CTRL" : "Ctrl", + "NAME_KEY_ALT" : "Alt", + "NAME_KEY_ESC" : "Esc", + "NAME_KEY_TAB" : "Tab", + "NAME_MOUSE_MODE_ABSOLUTE" : "触摸屏", + "NAME_MOUSE_MODE_RELATIVE" : "触控板", + + "SECTION_HEADER_CLIENT_MESSAGES" : "消息", + "SECTION_HEADER_CLIPBOARD" : "剪贴板", + "SECTION_HEADER_DEVICES" : "设备", + "SECTION_HEADER_DISPLAY" : "显示", + "SECTION_HEADER_FILE_TRANSFERS" : "文件传输", + "SECTION_HEADER_INPUT_METHOD" : "输入方式", + + "SECTION_HEADER_MOUSE_MODE" : "模拟鼠标模式", + + "TEXT_ANONYMOUS_USER_JOINED" : "有一名匿名用户已加入连接。", + "TEXT_ANONYMOUS_USER_LEFT" : "有一名匿名用户断开了连接。", + "TEXT_ZOOM_AUTO_FIT" : "自适应浏览器窗口大小", + "TEXT_CLIENT_STATUS_IDLE" : "空闲。", + "TEXT_CLIENT_STATUS_CONNECTING" : "正在连接 Guacamole...", + "TEXT_CLIENT_STATUS_DISCONNECTED" : "您的连接已断开。", + "TEXT_CLIENT_STATUS_UNSTABLE" : "到 Guacamole 服务器的网络连接似乎不太稳定。", + "TEXT_CLIENT_STATUS_WAITING" : "已连接到 Guacamole。正在等待应答...", + "TEXT_USER_JOINED" : "用户 {USERNAME} 已加入连接。", + "TEXT_USER_LEFT" : "用户 {USERNAME} 断开了连接。", + "TEXT_RECONNECT_COUNTDOWN" : "在 {REMAINING} 秒后重连...", + "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", + "TEXT_CLIPBOARD_AWAITING_FOCUS" : "点击以查看剪贴板内容...", + + "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" + + }, + + "COLOR_SCHEME" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_HIDE_DETAILS" : "隐藏", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_SHOW_DETAILS" : "显示", + + "FIELD_HEADER_BACKGROUND" : "背景色", + "FIELD_HEADER_FOREGROUND" : "前景色", + + "FIELD_OPTION_CUSTOM" : "自定义...", + + "SECTION_HEADER_DETAILS" : "详情:" + + }, + + "IMPORT": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_BROWSE" : "浏览文件", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLEAR" : "@:APP.ACTION_CLEAR", + "ACTION_VIEW_FORMAT_HELP" : "查看帮助", + "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", + "ACTION_IMPORT_CONNECTIONS" : "导入连接", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + "DIALOG_HEADER_SUCCESS" : "成功", + + "ERROR_AMBIGUOUS_CSV_HEADER" : "存在冲突的 CSV 列名: \"{HEADER}\" ,可能是一个连接属性或者参数", + "ERROR_AMBIGUOUS_PARENT_GROUP" : "连接组以其父连接组不能同时设置", + "ERROR_ARRAY_REQUIRED" : "上传的文件必须包含有效的连接数据", + "ERROR_DETECTED_INVALID_TYPE" : "不支持的文件类型。请确认您上传的文件是合法的 CSV,JSON 或者 YAML 文件。", + "ERROR_DUPLICATE_CONNECTION_IN_FILE" : "在导入的文件中发现了重复的连接: \"{NAME}\" 位于 \"{PATH}\"", + "ERROR_DUPLICATE_CSV_HEADER" : "重复的 CSV 列名: {HEADER}", + "ERROR_EMPTY_FILE" : "上传的文件内容为空", + "ERROR_INVALID_CSV_HEADER" : "非法的 CSV 列名: \"{HEADER}\" 不是一个可识别的属性或者参数。", + "ERROR_INVALID_MIME_TYPE" : "不支持的文件类型: \"{TYPE}\"", + "ERROR_INVALID_GROUP" : "未找到名称为: \"{GROUP}\" 的连接组", + "ERROR_INVALID_GROUP_IDENTIFIER" : "未找到能识别为: \"{IDENTIFIER}\" 的连接组", + "ERROR_NO_FILE_SUPPLIED" : "请选择一个文件", + "ERROR_PARSE_FAILURE_CSV" : "请确保您上传的是合法的 CSV 文件。解析错误: \"{ERROR}\" 。", + "ERROR_PARSE_FAILURE_JSON" : "请确保您上传的是合法的 JSON 文件。解析错误: \"{ERROR}\" 。", + "ERROR_PARSE_FAILURE_YAML" : "请确保您上传的是合法的 YAML 文件。解析错误: \"{ERROR}\" 。", + "ERROR_REJECT_UPDATE_CONNECTION" : "连接 \"{NAME}\" 已存在于 \"{PATH}\"", + "ERROR_REQUIRED_NAME" : "在提供的文件中未找到连接名称", + "ERROR_REQUIRED_PROTOCOL" : "在提供的文件中未找到协议", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FIELD_HEADER_EXISTING_CONNECTION_MODE" : "替换/更新已存在的连接", + "FIELD_HEADER_EXISTING_PERMISSION_MODE" : "重置权限", + + "HELP_CSV_DESCRIPTION" : "当导入的文件格式为 CSV 时,一行记录为一条连接数据。每列为一个配置条目。每条记录至少需要提供连接名称以及协议。", + "HELP_CSV_EXAMPLE" : "name,protocol,hostname,group,users,groups,guacd-encryption (attribute)\nconn1,vnc,conn1.web.com,ROOT,guac user 1;guac user 2,Connection 1 Users,none\nconn2,rdp,conn2.web.com,ROOT/Parent Group,guac user 1,,ssl\nconn3,ssh,conn3.web.com,ROOT/Parent Group/Child Group,guac user 2;guac user 3,,\nconn4,kubernetes,,,,,", + "HELP_CSV_MORE_DETAILS" : "CSV 列名与连接中的属性一一对应。需要导入的连接组信息可以通过 \"parentIdentifier\" 属性直接设定,或者通过 \"group\" 属性进行指定。在大多数场合下,属性之间不应当存在冲突。但如过这种情况发生时,在列名后加入 \" (attribute)\" 或者 \" (parameter)\" 即可避免混淆。用户或者用户组必须使用分号进行分隔。¹", + "HELP_FILE_TYPE_DESCRIPTION" : "目前系统支持三种文件格式:CSV,JSON 或者 YAML。文件格式之间支持的属性相同,即至少需要连接名称以及协议。当然,连接组,哪些用户或者用户组有权限使用,连接参数等属性均可以被指定。不存在的用户或者用户组会被自动创建。注意,任何已存在的连接权限并不会根据导入的数据被清除,除非您勾选了“重置权限”选框。", + "HELP_FILE_TYPE_HEADER" : "文件格式", + "HELP_JSON_DESCRIPTION" : "当导入的文件格式为 JSON 时,每条记录至少需要提供连接名称以及协议。", + "HELP_JSON_EXAMPLE" : "[\n \\{\n \"name\": \"conn1\",\n \"protocol\": \"vnc\",\n \"parameters\": \\{ \"hostname\": \"conn1.web.com\" \\},\n \"parentIdentifier\": \"ROOT\",\n \"users\": [ \"guac user 1\", \"guac user 2\" ],\n \"groups\": [ \"Connection 1 Users\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn2\",\n \"protocol\": \"rdp\",\n \"parameters\": \\{ \"hostname\": \"conn2.web.com\" \\},\n \"group\": \"ROOT/Parent Group\",\n \"users\": [ \"guac user 1\" ],\n \"attributes\": \\{ \"guacd-encryption\": \"none\" \\}\n \\},\n \\{\n \"name\": \"conn3\",\n \"protocol\": \"ssh\",\n \"parameters\": \\{ \"hostname\": \"conn3.web.com\" \\},\n \"group\": \"ROOT/Parent Group/Child Group\",\n \"users\": [ \"guac user 2\", \"guac user 3\" ]\n \\},\n \\{\n \"name\": \"conn4\",\n \"protocol\": \"kubernetes\"\n \\}\n]", + "HELP_JSON_MORE_DETAILS" : "需要被导入的连接组信息可以通过 \"parentIdentifier\" 属性直接指定,或者通过 \"group\" 属性进行指定。每条连接信息均可单独设置用户以及用户组的访问权限", + "HELP_EXISTING_CONNECTION_MODE" : "如果提供文件中的信息匹配,将完全替换/更新已存在的连接信息。如果未勾选,尝试导入已存在的连接将会导致导入时发生错误。", + "HELP_EXISTING_PERMISSION_MODE" : "根据提供文件中的设定完全重置权限。如果没有权限设定信息,所有已设定的连接权限将会被撤销。如果未勾选,已存在的权限会被保留,任何新权限设定会被自动添加。", + "HELP_SEMICOLON_FOOTNOTE" : "如果需要,您可以通过反斜杠来转义分号,比如: \"first\\\\;last\"", + "HELP_UPLOAD_DROP_TITLE" : "拖拽文件", + "HELP_UPLOAD_FILE_TYPES" : "CSV,JSON 或者 YAML", + "HELP_YAML_DESCRIPTION" : "当导入的文件格式为 YAML 时,其数据结构必须与使用 JSON 格式时保持一致。", + "HELP_YAML_EXAMPLE" : "---\n - name: conn1\n protocol: vnc\n parameters:\n hostname: conn1.web.com\n group: ROOT\n users:\n - guac user 1\n - guac user 2\n groups:\n - Connection 1 Users\n attributes:\n guacd-encryption: none\n - name: conn2\n protocol: rdp\n parameters:\n hostname: conn2.web.com\n group: ROOT/Parent Group\n users:\n - guac user 1\n attributes:\n guacd-encryption: none\n - name: conn3\n protocol: ssh\n parameters:\n hostname: conn3.web.com\n group: ROOT/Parent Group/Child Group\n users:\n - guac user 2\n - guac user 3\n - name: conn4\n protocol: kubernetes", + + "INFO_CONNECTIONS_IMPORTED_SUCCESS" : "{NUMBER} 条连接已成功导入。", + + "SECTION_HEADER_CONNECTION_IMPORT" : "导入连接", + "SECTION_HEADER_HELP_CONNECTION_IMPORT_FILE" : "导入连接文件格式", + "SECTION_HEADER_CSV" : "CSV 格式", + "SECTION_HEADER_JSON" : "JSON 格式", + "SECTION_HEADER_YAML" : "YAML 格式", + + "TABLE_HEADER_ERRORS" : "错误", + "TABLE_HEADER_GROUP" : "分组", + "TABLE_HEADER_NAME" : "名称", + "TABLE_HEADER_PROTOCOL" : "协议", + "TABLE_HEADER_ROW_NUMBER" : "行 #" + }, + + "DATA_SOURCE_DEFAULT" : { + "NAME" : "默认(XML)" + }, + + "FORM" : { + + "FIELD_PLACEHOLDER_DATE" : "YYYY-MM-DD", + "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS", + + "HELP_SHOW_PASSWORD" : "点击显示密码", + "HELP_HIDE_PASSWORD" : "点击隐藏密码" + + }, + + "HOME" : { + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "INFO_NO_RECENT_CONNECTIONS" : "无最近使用过的连接。", + + "PASSWORD_CHANGED" : "密码已修改。", + + "SECTION_HEADER_ALL_CONNECTIONS" : "全部连接", + "SECTION_HEADER_RECENT_CONNECTIONS" : "最近使用过的连接" + + }, + + "LIST" : { + + "TEXT_ANONYMOUS_USER" : "匿名用户" + + }, + + "LOGIN": { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CONTINUE" : "@:APP.ACTION_CONTINUE", + "ACTION_LOGIN" : "@:APP.ACTION_LOGIN", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_INVALID_LOGIN" : "非法登录", + + "FIELD_HEADER_USERNAME" : "用户名", + "FIELD_HEADER_PASSWORD" : "密码" + + }, + + "MANAGE_CONNECTION" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "删除连接", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "位置:", + "FIELD_HEADER_NAME" : "名称:", + "FIELD_HEADER_PROTOCOL" : "协议:", + + "FORMAT_HISTORY_START" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_CONNECTION_ACTIVE_NOW" : "活动中", + "INFO_CONNECTION_NOT_USED" : "此连接未被使用过。", + + "SECTION_HEADER_EDIT_CONNECTION" : "编辑连接", + "SECTION_HEADER_HISTORY" : "使用历史", + "SECTION_HEADER_PARAMETERS" : "参数", + + "TABLE_HEADER_HISTORY_USERNAME" : "用户名", + "TABLE_HEADER_HISTORY_START" : "开始时间", + "TABLE_HEADER_HISTORY_DURATION" : "持续时间", + "TABLE_HEADER_HISTORY_REMOTEHOST" : "远程主机", + + "TEXT_CONFIRM_DELETE" : "连接被删除后将无法恢复。确定要删除这个连接吗?", + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "MANAGE_CONNECTION_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "删除连接组", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_LOCATION" : "位置:", + "FIELD_HEADER_NAME" : "名字:", + "FIELD_HEADER_TYPE" : "类型:", + + "NAME_TYPE_BALANCING" : "负载平衡", + "NAME_TYPE_ORGANIZATIONAL" : "组织架构", + + "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "编辑连接组", + + "TEXT_CONFIRM_DELETE" : "将不能恢复已被删除的连接组。确定要删除这个连接组吗?" + + }, + + "MANAGE_SHARING_PROFILE" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "删除共享设定", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_NAME" : "名字:", + "FIELD_HEADER_PRIMARY_CONNECTION" : "主连接:", + + "SECTION_HEADER_EDIT_SHARING_PROFILE" : "编辑共享设定", + "SECTION_HEADER_PARAMETERS" : "参数", + + "TEXT_CONFIRM_DELETE" : "将不能恢复已被删除的共享设定。确定要删除这个共享设定吗?" + + }, + + "MANAGE_USER" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "删除用户", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "授权管理系统:", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "修改自己的密码:", + "FIELD_HEADER_CREATE_NEW_USERS" : "新建用户:", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "新建用户组:", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "新建连接:", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "新建连接组:", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "新建共享设定:", + "FIELD_HEADER_PASSWORD" : "@:APP.FIELD_HEADER_PASSWORD", + "FIELD_HEADER_PASSWORD_AGAIN" : "@:APP.FIELD_HEADER_PASSWORD_AGAIN", + "FIELD_HEADER_USERNAME" : "用户名:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "该用户当前不属于任何组。 展开此部分以添加组。", + + "INFO_READ_ONLY" : "对不起,不能编辑此用户的账户。", + "INFO_NO_USER_GROUPS_AVAILABLE" : "没用可用的用户组.", + + "SECTION_HEADER_ALL_CONNECTIONS" : "全部连接", + "SECTION_HEADER_CONNECTIONS" : "连接", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "当前连接", + "SECTION_HEADER_EDIT_USER" : "编辑用户", + "SECTION_HEADER_PERMISSIONS" : "使用权限", + "SECTION_HEADER_USER_GROUPS" : "用户组", + + "TEXT_CONFIRM_DELETE" : "将不能恢复已被删除的用户。确定要删除这个用户吗?" + + }, + + "MANAGE_USER_GROUP" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_CLONE" : "@:APP.ACTION_CLONE", + "ACTION_DELETE" : "@:APP.ACTION_DELETE", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + + "DIALOG_HEADER_CONFIRM_DELETE" : "删除用户组", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_HEADER_ADMINISTER_SYSTEM" : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM", + "FIELD_HEADER_CHANGE_OWN_PASSWORD" : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD", + "FIELD_HEADER_CREATE_NEW_USERS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS", + "FIELD_HEADER_CREATE_NEW_USER_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS", + "FIELD_HEADER_CREATE_NEW_CONNECTIONS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS", + "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS", + "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES" : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES", + "FIELD_HEADER_USER_GROUP_NAME" : "用户组名称:", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_NO_USER_GROUPS" : "该组当前不属于任何组。展开此部分以添加组。", + "HELP_NO_MEMBER_USER_GROUPS" : "该组当前不包含任何组。展开此部分以添加组。", + "HELP_NO_MEMBER_USERS" : "该组当前不包含任何用户。展开此部分以添加用户。", + + "INFO_READ_ONLY" : "抱歉,无法编辑此用户组。", + "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE", + "INFO_NO_USERS_AVAILABLE" : "没有可用的用户。", + + "SECTION_HEADER_ALL_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS", + "SECTION_HEADER_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS", + "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS", + "SECTION_HEADER_EDIT_USER_GROUP" : "编辑用户组", + "SECTION_HEADER_MEMBER_USERS" : "成员用户", + "SECTION_HEADER_MEMBER_USER_GROUPS" : "成员用户组", + "SECTION_HEADER_PERMISSIONS" : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS", + "SECTION_HEADER_USER_GROUPS" : "父用户组", + + "TEXT_CONFIRM_DELETE" : "删除用户组后将无法还原。确定要删除该用户组吗?" + + }, + + "PLAYER" : { + + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_PAUSE" : "@:APP.ACTION_PAUSE", + "ACTION_PLAY" : "@:APP.ACTION_PLAY", + + "INFO_LOADING_RECORDING" : "录像已载入。请稍候...", + "INFO_SEEK_IN_PROGRESS" : "正在跳转到指定位置。请稍候..." + + }, + + "PROTOCOL_KUBERNETES" : { + + "FIELD_HEADER_BACKSPACE" : "发送退格键:", + "FIELD_HEADER_CA_CERT" : "证书颁发机构证书:", + "FIELD_HEADER_CLIENT_CERT" : "客户证书:", + "FIELD_HEADER_CLIENT_KEY" : "客户端密钥:", + "FIELD_HEADER_COLOR_SCHEME" : "配色方案:", + "FIELD_HEADER_CONTAINER" : "容器名称:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "自动建立 Typescript 目录:", + "FIELD_HEADER_EXEC_COMMAND" : "命令(exec):", + "FIELD_HEADER_FONT_NAME" : "字体名:", + "FIELD_HEADER_FONT_SIZE" : "字体大小:", + "FIELD_HEADER_HOSTNAME" : "主机名:", + "FIELD_HEADER_IGNORE_CERT" : "忽略服务器证书:", + "FIELD_HEADER_NAMESPACE" : "命名空间:", + "FIELD_HEADER_POD" : "Pod 名称:", + "FIELD_HEADER_PORT" : "端口:", + "FIELD_HEADER_READ_ONLY" : "只读:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", + "FIELD_HEADER_RECORDING_NAME" : "录像名:", + "FIELD_HEADER_RECORDING_PATH" : "录像路径:", + "FIELD_HEADER_SCROLLBACK" : "最大回滚尺寸:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 名称:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 路径:", + "FIELD_HEADER_USE_SSL" : "使用 SSL/TLS", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "退格键(Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "删除键(Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "白底黑字", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "黑底灰字", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "黑底绿字", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "黑底白字", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "NAME" : "Kubernetes", + + "SECTION_HEADER_AUTHENTICATION" : "认证方式", + "SECTION_HEADER_BEHAVIOR" : "终端行为", + "SECTION_HEADER_CONTAINER" : "容器", + "SECTION_HEADER_DISPLAY" : "显示", + "SECTION_HEADER_RECORDING" : "屏幕录制", + "SECTION_HEADER_TYPESCRIPT" : "Typescript(文本会话录制)", + "SECTION_HEADER_NETWORK" : "网络" + + }, + + "PROTOCOL_RDP" : { + + "FIELD_HEADER_CLIENT_NAME" : "客户端:", + "FIELD_HEADER_COLOR_DEPTH" : "色彩深度:", + "FIELD_HEADER_CONSOLE" : "管理员控制台:", + "FIELD_HEADER_CONSOLE_AUDIO" : "在控制台内支持音频:", + "FIELD_HEADER_CREATE_DRIVE_PATH" : "自动建立虚拟盘:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", + "FIELD_HEADER_DISABLE_AUDIO" : "禁用音频:", + "FIELD_HEADER_DISABLE_AUTH" : "禁用认证:", + "FIELD_HEADER_DISABLE_COPY" : "禁用从远程桌面复制:", + "FIELD_HEADER_DISABLE_DOWNLOAD" : "禁用文件下载:", + "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", + "FIELD_HEADER_DISABLE_UPLOAD" : "禁用文件上传:", + "FIELD_HEADER_DOMAIN" : "域:", + "FIELD_HEADER_DPI" : "分辨率(DPI):", + "FIELD_HEADER_DRIVE_NAME" : "驱动器名称:", + "FIELD_HEADER_DRIVE_PATH" : "虚拟盘路径:", + "FIELD_HEADER_ENABLE_AUDIO_INPUT" : "启用音频输入(话筒):", + "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "启用桌面合成效果(Aero):", + "FIELD_HEADER_ENABLE_DRIVE" : "启用虚拟驱动器:", + "FIELD_HEADER_ENABLE_FONT_SMOOTHING" : "启用字体平滑(ClearType):", + "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG" : "启用全窗口拖拽:", + "FIELD_HEADER_ENABLE_MENU_ANIMATIONS" : "启用菜单动画:", + "FIELD_HEADER_DISABLE_BITMAP_CACHING" : "禁用位图缓存:", + "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING" : "禁用离屏缓存:", + "FIELD_HEADER_DISABLE_GLYPH_CACHING" : "禁用字形缓存:", + "FIELD_HEADER_DISABLE_GFX" : "禁用图形管线拓展:", + "FIELD_HEADER_ENABLE_PRINTING" : "启用打印功能:", + "FIELD_HEADER_ENABLE_SFTP" : "启用SFTP:", + "FIELD_HEADER_ENABLE_THEMING" : "启用桌面主题:", + "FIELD_HEADER_ENABLE_TOUCH" : "启用多点触控:", + "FIELD_HEADER_ENABLE_WALLPAPER" : "启用桌面墙纸:", + "FIELD_HEADER_FORCE_LOSSLESS" : "强制无损压缩:", + "FIELD_HEADER_GATEWAY_DOMAIN" : "域:", + "FIELD_HEADER_GATEWAY_HOSTNAME" : "主机名:", + "FIELD_HEADER_GATEWAY_PASSWORD" : "密码:", + "FIELD_HEADER_GATEWAY_PORT" : "端口:", + "FIELD_HEADER_GATEWAY_USERNAME" : "用户名:", + "FIELD_HEADER_HEIGHT" : "高度:", + "FIELD_HEADER_HOSTNAME" : "主机名:", + "FIELD_HEADER_IGNORE_CERT" : "忽略服务器证书:", + "FIELD_HEADER_INITIAL_PROGRAM" : "初始程序:", + "FIELD_HEADER_LOAD_BALANCE_INFO" : "负载平衡信息/Cookie:", + "FIELD_HEADER_NORMALIZE_CLIPBOARD" : "换行符:", + "FIELD_HEADER_PASSWORD" : "密码:", + "FIELD_HEADER_PORT" : "端口:", + "FIELD_HEADER_PRINTER_NAME" : "重定向的打印机名称:", + "FIELD_HEADER_PRECONNECTION_BLOB" : "预连接 BLOB(VM 标识):", + "FIELD_HEADER_PRECONNECTION_ID" : "RDP 源标识:", + "FIELD_HEADER_READ_ONLY" : "只读:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", + "FIELD_HEADER_RECORDING_EXCLUDE_TOUCH" : "排除触摸事件:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", + "FIELD_HEADER_RECORDING_NAME" : "录像名:", + "FIELD_HEADER_RECORDING_PATH" : "录像路径:", + "FIELD_HEADER_RESIZE_METHOD" : "缩放方法:", + "FIELD_HEADER_REMOTE_APP_ARGS" : "参数:", + "FIELD_HEADER_REMOTE_APP_DIR" : "工作目录:", + "FIELD_HEADER_REMOTE_APP" : "程序:", + "FIELD_HEADER_SECURITY" : "安全模式:", + "FIELD_HEADER_SERVER_LAYOUT" : "键盘布局:", + "FIELD_HEADER_SFTP_DIRECTORY" : "缺省文件上传目录:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "禁用文件下载:", + "FIELD_HEADER_SFTP_HOST_KEY" : "公钥(Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "主机名:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive 时间间隔:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "口令:", + "FIELD_HEADER_SFTP_PASSWORD" : "密码:", + "FIELD_HEADER_SFTP_PORT" : "端口:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "私钥:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "文件浏览器根目录:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "禁用文件上传:", + "FIELD_HEADER_SFTP_USERNAME" : "用户名:", + "FIELD_HEADER_STATIC_CHANNELS" : "静态通道名:", + "FIELD_HEADER_TIMEZONE" : "时区:", + "FIELD_HEADER_USERNAME" : "用户名:", + "FIELD_HEADER_WIDTH" : "宽度:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", + "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", + "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", + "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口: ", + "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", + + "FIELD_OPTION_NORMALIZE_CLIPBOARD_EMPTY" : "", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_PRESERVE" : "保持原样", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_UNIX" : "Linux/Mac/Unix (LF)", + "FIELD_OPTION_NORMALIZE_CLIPBOARD_WINDOWS" : "Windows (CRLF)", + + "FIELD_OPTION_COLOR_DEPTH_16" : "低彩色(16 位)", + "FIELD_OPTION_COLOR_DEPTH_24" : "真彩色(24 位)", + "FIELD_OPTION_COLOR_DEPTH_32" : "真彩色(32 位)", + "FIELD_OPTION_COLOR_DEPTH_8" : "256 色", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "“显示更新”虚拟通道(RDP 8.1+)", + "FIELD_OPTION_RESIZE_METHOD_EMPTY" : "", + "FIELD_OPTION_RESIZE_METHOD_RECONNECT" : "重新连接", + + "FIELD_OPTION_SECURITY_ANY" : "任意", + "FIELD_OPTION_SECURITY_EMPTY" : "", + "FIELD_OPTION_SECURITY_NLA" : "NLA(网络级别认证)", + "FIELD_OPTION_SECURITY_RDP" : "RDP 加密", + "FIELD_OPTION_SECURITY_TLS" : "TLS 加密", + "FIELD_OPTION_SECURITY_VMCONNECT" : "Hyper-V / VMConnect", + + "FIELD_OPTION_SERVER_LAYOUT_DE_CH_QWERTZ" : "Swiss German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_EMPTY" : "", + "FIELD_OPTION_SERVER_LAYOUT_EN_GB_QWERTY" : "UK English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_ES_QWERTY" : "Spanish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_ES_LATAM_QWERTY" : "Latin American (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE" : "Unicode", + "FIELD_OPTION_SERVER_LAYOUT_FR_BE_AZERTY" : "Belgian French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CA_QWERTY" : "Canadian French (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_FR_CH_QWERTZ" : "Swiss French (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)", + "FIELD_OPTION_SERVER_LAYOUT_HU_HU_QWERTZ" : "Hungarian (Qwertz)", + "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_JA_JP_QWERTY" : "Japanese (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_NO_NO_QWERTY" : "Norwegian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PL_PL_QWERTY" : "Polish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_BR_QWERTY" : "Portuguese Brazilian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_PT_PT_QWERTY" : "Portuguese (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_RO_RO_QWERTY" : "Romanian (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_DA_DK_QWERTY" : "Danish (Qwerty)", + "FIELD_OPTION_SERVER_LAYOUT_TR_TR_QWERTY" : "Turkish-Q (Qwerty)", + + "NAME" : "RDP", + + "SECTION_HEADER_AUTHENTICATION" : "认证", + "SECTION_HEADER_BASIC_PARAMETERS" : "基础设置", + "SECTION_HEADER_CLIPBOARD" : "剪贴板", + "SECTION_HEADER_DEVICE_REDIRECTION" : "设备重定向", + "SECTION_HEADER_DISPLAY" : "显示", + "SECTION_HEADER_GATEWAY" : "远程桌面网关", + "SECTION_HEADER_LOAD_BALANCING" : "负载平衡", + "SECTION_HEADER_NETWORK" : "网络", + "SECTION_HEADER_PERFORMANCE" : "性能", + "SECTION_HEADER_PRECONNECTION_PDU" : "预连接 PDU / Hyper-V", + "SECTION_HEADER_RECORDING" : "屏幕录像", + "SECTION_HEADER_REMOTEAPP" : "RemoteApp", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "网络唤醒(WoL)" + + }, + + "PROTOCOL_SSH" : { + + "FIELD_HEADER_BACKSPACE" : "退格键发送:", + "FIELD_HEADER_COLOR_SCHEME" : "配色方案:", + "FIELD_HEADER_COMMAND" : "运行命令:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "自动建立 Typescript 目录:", + "FIELD_HEADER_DISABLE_COPY" : "禁用从终端复制:", + "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", + "FIELD_HEADER_FONT_NAME" : "字体名:", + "FIELD_HEADER_FONT_SIZE" : "字体大小:", + "FIELD_HEADER_ENABLE_SFTP" : "启用SFTP:", + "FIELD_HEADER_HOST_KEY" : "公钥(Base64):", + "FIELD_HEADER_HOSTNAME" : "主机名:", + "FIELD_HEADER_LOCALE" : "语言/地区($LANG):", + "FIELD_HEADER_USERNAME" : "用户名:", + "FIELD_HEADER_PASSWORD" : "密码:", + "FIELD_HEADER_PASSPHRASE" : "口令:", + "FIELD_HEADER_PORT" : "端口:", + "FIELD_HEADER_PRIVATE_KEY" : "私钥:", + "FIELD_HEADER_SCROLLBACK" : "最大回滚尺寸:", + "FIELD_HEADER_READ_ONLY" : "只读:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", + "FIELD_HEADER_RECORDING_NAME" : "录像名:", + "FIELD_HEADER_RECORDING_PATH" : "录像路径:", + "FIELD_HEADER_SERVER_ALIVE_INTERVAL" : "服务器 keepalive 时间间隔:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "禁用文件下载:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "文件浏览器根目录:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "禁用文件上传:", + "FIELD_HEADER_TERMINAL_TYPE" : "终端类型:", + "FIELD_HEADER_TIMEZONE" : "时区($TZ):", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 名称:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 路径:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", + "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", + "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", + "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口: ", + "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "退格键(Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "删除键(Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "白底黑字", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "黑底灰字", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "黑底绿字", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "黑底白字", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "SSH", + + "SECTION_HEADER_AUTHENTICATION" : "认证", + "SECTION_HEADER_BEHAVIOR" : "终端行为", + "SECTION_HEADER_CLIPBOARD" : "剪贴板", + "SECTION_HEADER_DISPLAY" : "显示", + "SECTION_HEADER_NETWORK" : "网络", + "SECTION_HEADER_RECORDING" : "屏幕录像", + "SECTION_HEADER_SESSION" : "会话 / 环境", + "SECTION_HEADER_TYPESCRIPT" : "Typescript(文本会话录像)", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "网络唤醒(WoL)" + + }, + + "PROTOCOL_TELNET" : { + + "FIELD_HEADER_BACKSPACE" : "发送退格键:", + "FIELD_HEADER_COLOR_SCHEME" : "配色方案:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动创建记录路径:", + "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "自动创建 Typescript 路径:", + "FIELD_HEADER_DISABLE_COPY" : "禁止从终端复制:", + "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", + "FIELD_HEADER_FONT_NAME" : "字体名称:", + "FIELD_HEADER_FONT_SIZE" : "字体大小:", + "FIELD_HEADER_HOSTNAME" : "主机名:", + "FIELD_HEADER_LOGIN_FAILURE_REGEX" : "登录失败的正则表达式:", + "FIELD_HEADER_LOGIN_SUCCESS_REGEX" : "登录成功的正则表达式:", + "FIELD_HEADER_USERNAME" : "用户名:", + "FIELD_HEADER_USERNAME_REGEX" : "用户名正则表达式:", + "FIELD_HEADER_PASSWORD" : "密码:", + "FIELD_HEADER_PASSWORD_REGEX" : "密码正则表达式:", + "FIELD_HEADER_PORT" : "端口:", + "FIELD_HEADER_READ_ONLY" : "只读:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图形/流:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含关键事件:", + "FIELD_HEADER_RECORDING_NAME" : "记录名称:", + "FIELD_HEADER_RECORDING_PATH" : "记录路径:", + "FIELD_HEADER_SCROLLBACK" : "最大回滚尺寸:", + "FIELD_HEADER_TERMINAL_TYPE" : "终端类型:", + "FIELD_HEADER_TYPESCRIPT_NAME" : "Typescript 名称:", + "FIELD_HEADER_TYPESCRIPT_PATH" : "Typescript 路径:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", + "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", + "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", + "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口:", + "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", + + "FIELD_OPTION_BACKSPACE_EMPTY" : "", + "FIELD_OPTION_BACKSPACE_8" : "退格键(Ctrl-H)", + "FIELD_OPTION_BACKSPACE_127" : "删除键(Ctrl-?)", + + "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "白底黑字", + "FIELD_OPTION_COLOR_SCHEME_EMPTY" : "", + "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK" : "黑底灰字", + "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "黑底绿字", + "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "黑底白字", + + "FIELD_OPTION_FONT_SIZE_8" : "8", + "FIELD_OPTION_FONT_SIZE_9" : "9", + "FIELD_OPTION_FONT_SIZE_10" : "10", + "FIELD_OPTION_FONT_SIZE_11" : "11", + "FIELD_OPTION_FONT_SIZE_12" : "12", + "FIELD_OPTION_FONT_SIZE_14" : "14", + "FIELD_OPTION_FONT_SIZE_18" : "18", + "FIELD_OPTION_FONT_SIZE_24" : "24", + "FIELD_OPTION_FONT_SIZE_30" : "30", + "FIELD_OPTION_FONT_SIZE_36" : "36", + "FIELD_OPTION_FONT_SIZE_48" : "48", + "FIELD_OPTION_FONT_SIZE_60" : "60", + "FIELD_OPTION_FONT_SIZE_72" : "72", + "FIELD_OPTION_FONT_SIZE_96" : "96", + "FIELD_OPTION_FONT_SIZE_EMPTY" : "", + + "FIELD_OPTION_TERMINAL_TYPE_ANSI" : "ansi", + "FIELD_OPTION_TERMINAL_TYPE_EMPTY" : "", + "FIELD_OPTION_TERMINAL_TYPE_LINUX" : "linux", + "FIELD_OPTION_TERMINAL_TYPE_VT100" : "vt100", + "FIELD_OPTION_TERMINAL_TYPE_VT220" : "vt220", + "FIELD_OPTION_TERMINAL_TYPE_XTERM" : "xterm", + "FIELD_OPTION_TERMINAL_TYPE_XTERM_256COLOR" : "xterm-256color", + + "NAME" : "Telnet", + + "SECTION_HEADER_AUTHENTICATION" : "认证", + "SECTION_HEADER_BEHAVIOR" : "终端行为", + "SECTION_HEADER_CLIPBOARD" : "剪贴板", + "SECTION_HEADER_DISPLAY" : "显示", + "SECTION_HEADER_RECORDING" : "屏幕录像", + "SECTION_HEADER_TYPESCRIPT" : "Typescript(文本会话录像)", + "SECTION_HEADER_NETWORK" : "网络", + "SECTION_HEADER_WOL" : "网络唤醒(WoL)" + + }, + + "PROTOCOL_VNC" : { + + "FIELD_HEADER_AUDIO_SERVERNAME" : "音频服务器名:", + "FIELD_HEADER_CLIPBOARD_ENCODING" : "编码:", + "FIELD_HEADER_COLOR_DEPTH" : "色彩深度:", + "FIELD_HEADER_CREATE_RECORDING_PATH" : "自动建立录像目录:", + "FIELD_HEADER_CURSOR" : "光标:", + "FIELD_HEADER_DEST_HOST" : "目标主机:", + "FIELD_HEADER_DEST_PORT" : "目标端口:", + "FIELD_HEADER_DISABLE_COPY" : "禁用从远程桌面复制:", + "FIELD_HEADER_DISABLE_PASTE" : "禁用从客户端粘贴:", + "FIELD_HEADER_ENABLE_AUDIO" : "启用音频:", + "FIELD_HEADER_ENABLE_SFTP" : "启用 SFTP:", + "FIELD_HEADER_FORCE_LOSSLESS" : "强制无损压缩:", + "FIELD_HEADER_HOSTNAME" : "主机名:", + "FIELD_HEADER_USERNAME" : "用户名:", + "FIELD_HEADER_PASSWORD" : "密码:", + "FIELD_HEADER_PORT" : "端口:", + "FIELD_HEADER_READ_ONLY" : "只读:", + "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE" : "排除鼠标:", + "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "排除图像/数据流:", + "FIELD_HEADER_RECORDING_INCLUDE_KEYS" : "包含按键事件:", + "FIELD_HEADER_RECORDING_NAME" : "录像名:", + "FIELD_HEADER_RECORDING_PATH" : "录像路径:", + "FIELD_HEADER_SFTP_DIRECTORY" : "缺省文件上传目录:", + "FIELD_HEADER_SFTP_DISABLE_DOWNLOAD" : "禁用文件下载:", + "FIELD_HEADER_SFTP_HOST_KEY" : "公钥(Base64):", + "FIELD_HEADER_SFTP_HOSTNAME" : "主机名:", + "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "SFTP keepalive 时间间隔:", + "FIELD_HEADER_SFTP_PASSPHRASE" : "口令:", + "FIELD_HEADER_SFTP_PASSWORD" : "密码:", + "FIELD_HEADER_SFTP_PORT" : "端口:", + "FIELD_HEADER_SFTP_PRIVATE_KEY" : "私钥:", + "FIELD_HEADER_SFTP_ROOT_DIRECTORY" : "文件浏览器根目录:", + "FIELD_HEADER_SFTP_DISABLE_UPLOAD" : "禁用文件上传:", + "FIELD_HEADER_SFTP_USERNAME" : "用户名:", + "FIELD_HEADER_SWAP_RED_BLUE" : "交换红/蓝成分:", + "FIELD_HEADER_WOL_BROADCAST_ADDR" : "WoL 数据包广播地址:", + "FIELD_HEADER_WOL_MAC_ADDR" : "远程主机 MAC 地址:", + "FIELD_HEADER_WOL_SEND_PACKET" : "发送 WoL 数据包:", + "FIELD_HEADER_WOL_UDP_PORT" : "WoL 数据包 UDP 端口: ", + "FIELD_HEADER_WOL_WAIT_TIME" : "主机启动等待时间:", + + "FIELD_OPTION_COLOR_DEPTH_8" : "256 色", + "FIELD_OPTION_COLOR_DEPTH_16" : "低彩色(16 位)", + "FIELD_OPTION_COLOR_DEPTH_24" : "真彩色(24 位)", + "FIELD_OPTION_COLOR_DEPTH_32" : "真彩色(32 位)", + "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "", + + "FIELD_OPTION_CURSOR_EMPTY" : "", + "FIELD_OPTION_CURSOR_LOCAL" : "本地", + "FIELD_OPTION_CURSOR_REMOTE" : "远程", + + "FIELD_OPTION_CLIPBOARD_ENCODING_CP1252" : "CP1252", + "FIELD_OPTION_CLIPBOARD_ENCODING_EMPTY" : "", + "FIELD_OPTION_CLIPBOARD_ENCODING_ISO8859_1" : "ISO 8859-1", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_8" : "UTF-8", + "FIELD_OPTION_CLIPBOARD_ENCODING_UTF_16" : "UTF-16", + + "NAME" : "VNC", + + "SECTION_HEADER_AUDIO" : "音频", + "SECTION_HEADER_AUTHENTICATION" : "认证", + "SECTION_HEADER_CLIPBOARD" : "剪贴板", + "SECTION_HEADER_DISPLAY" : "显示", + "SECTION_HEADER_NETWORK" : "网络", + "SECTION_HEADER_RECORDING" : "屏幕录像", + "SECTION_HEADER_REPEATER" : "VNC 中继", + "SECTION_HEADER_SFTP" : "SFTP", + "SECTION_HEADER_WOL" : "网络唤醒(WoL)" + + }, + + "SETTINGS" : { + + "SECTION_HEADER_SETTINGS" : "设置" + + }, + + "SETTINGS_CONNECTION_HISTORY" : { + + "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD", + "ACTION_SEARCH" : "@:APP.ACTION_SEARCH", + "ACTION_VIEW_RECORDING" : "@:APP.ACTION_VIEW_RECORDING", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FILENAME_HISTORY_CSV" : "连接历史.csv", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_CONNECTION_HISTORY" : "下表中是过往的连接历史,可以点击列头来进行排序。如需搜索特定的记录,输入一个过滤字符串并点击“搜索”。列表中将只显示符合过滤条件的记录。", + + "INFO_CONNECTION_DURATION_UNKNOWN" : "--", + "INFO_NO_HISTORY" : "无符合条件的记录", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "连接名", + "TABLE_HEADER_SESSION_DURATION" : "持续时间", + "TABLE_HEADER_SESSION_LOGS" : "日志", + "TABLE_HEADER_SESSION_REMOTEHOST" : "远程主机", + "TABLE_HEADER_SESSION_STARTDATE" : "起始时间", + "TABLE_HEADER_SESSION_USERNAME" : "用户名", + + "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION" + + }, + + "SETTINGS_CONNECTIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_IMPORT" : "@:APP.ACTION_IMPORT", + "ACTION_NEW_CONNECTION" : "新建连接", + "ACTION_NEW_CONNECTION_GROUP" : "新建连接组", + "ACTION_NEW_SHARING_PROFILE" : "新建共享设定", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "HELP_CONNECTIONS" : "点击下列连接,以管理该连接。基于您的权限,可以新建和删除连接,或修改连接的属性(如协议、主机名、端口等)。", + + "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT", + + "SECTION_HEADER_CONNECTIONS" : "连接" + + }, + + "SETTINGS_PREFERENCES" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_SAVE" : "@:APP.ACTION_SAVE", + "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "ERROR_PASSWORD_BLANK" : "@:APP.ERROR_PASSWORD_BLANK", + "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH", + + "FIELD_HEADER_LANGUAGE" : "界面语言:", + "FIELD_HEADER_PASSWORD" : "密码:", + "FIELD_HEADER_PASSWORD_OLD" : "当前密码:", + "FIELD_HEADER_PASSWORD_NEW" : "新密码:", + "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "确认新密码:", + "FIELD_HEADER_TIMEZONE" : "时区:", + "FIELD_HEADER_USERNAME" : "用户名:", + + "HELP_DEFAULT_INPUT_METHOD" : "默认输入法决定了 Guacamole 如何接收键盘事件。当使用移动设备或使用 IME 输入时,有可能需要更改设置。本设置可在 Guacamole 菜单内被单个连接的设定覆盖。", + "HELP_DEFAULT_MOUSE_MODE" : "默认鼠标模拟方式决定了新连接内的远程鼠标如何响应屏幕触控。本设置可在 Guacamole 菜单内被单个连接的设定覆盖。", + "HELP_INPUT_METHOD_NONE" : "@:CLIENT.HELP_INPUT_METHOD_NONE", + "HELP_INPUT_METHOD_OSK" : "@:CLIENT.HELP_INPUT_METHOD_OSK", + "HELP_INPUT_METHOD_TEXT" : "@:CLIENT.HELP_INPUT_METHOD_TEXT", + "HELP_LOCALE" : "以下选项与用户的语言环境有关,并将影响界面各部分的显示方式。", + "HELP_MOUSE_MODE_ABSOLUTE" : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE", + "HELP_MOUSE_MODE_RELATIVE" : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE", + "HELP_UPDATE_PASSWORD" : "如需改变密码,请在下面输入您的当前密码与希望使用的新密码,并点击“更新密码” 。密码的改动会立即生效。", + + "INFO_PASSWORD_CHANGED" : "密码已更改。", + "INFO_PREFERENCE_ATTRIBUTES_CHANGED" : "用户设定已保存。", + + "NAME_INPUT_METHOD_NONE" : "@:CLIENT.NAME_INPUT_METHOD_NONE", + "NAME_INPUT_METHOD_OSK" : "@:CLIENT.NAME_INPUT_METHOD_OSK", + "NAME_INPUT_METHOD_TEXT" : "@:CLIENT.NAME_INPUT_METHOD_TEXT", + + "SECTION_HEADER_DEFAULT_INPUT_METHOD" : "缺省输入法", + "SECTION_HEADER_DEFAULT_MOUSE_MODE" : "缺省鼠标模拟方式", + "SECTION_HEADER_UPDATE_PASSWORD" : "更改密码" + + }, + + "SETTINGS_USERS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER" : "新用户", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USERS" : "点击下面的用户以管理该用户。基于您的权限,可以新增和删除用户,也可以更改他们的密码。", + + "SECTION_HEADER_USERS" : "用户", + + "TABLE_HEADER_FULL_NAME" : "全名", + "TABLE_HEADER_LAST_ACTIVE" : "最近活动", + "TABLE_HEADER_ORGANIZATION" : "组织", + "TABLE_HEADER_USERNAME" : "用户名" + + }, + + "SETTINGS_USER_GROUPS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_NEW_USER_GROUP" : "新建用户组", + + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_USER_GROUPS" : "单击或触摸下面的组以管理该组。 根据您的访问级别,可以添加和删除组,还可以更改其成员用户和用户组。", + + "SECTION_HEADER_USER_GROUPS" : "用户组", + + "TABLE_HEADER_USER_GROUP_NAME" : "用户组名称" + + }, + + "SETTINGS_SESSIONS" : { + + "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE", + "ACTION_CANCEL" : "@:APP.ACTION_CANCEL", + "ACTION_DELETE" : "终止会话", + + "DIALOG_HEADER_CONFIRM_DELETE" : "终止会话", + "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR", + + "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER", + + "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE", + + "HELP_SESSIONS" : "该页面将填充当前活动的连接。 列出的连接和终止连接的能力取决于您的访问级别。如需终止一个或多个会话,勾选目标会话并点击“终止会话”。终止会话会立即断开对应用户的连接。", + + "INFO_NO_SESSIONS" : "无活动会话", + + "SECTION_HEADER_SESSIONS" : "活动会话", + + "TABLE_HEADER_SESSION_CONNECTION_NAME" : "连接名", + "TABLE_HEADER_SESSION_REMOTEHOST" : "远程主机", + "TABLE_HEADER_SESSION_STARTDATE" : "开始时间", + "TABLE_HEADER_SESSION_USERNAME" : "用户名", + + "TEXT_CONFIRM_DELETE" : "确定要终止所选定的会话?对应的用户会被立即断开连接。" + + }, + + "USER_ATTRIBUTES" : { + + "FIELD_HEADER_GUAC_EMAIL_ADDRESS" : "电邮地址:", + "FIELD_HEADER_GUAC_FULL_NAME" : "全名:", + "FIELD_HEADER_GUAC_ORGANIZATION" : "组织:", + "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "职位:" + + }, + + "USER_MENU" : { + + "ACTION_LOGOUT" : "@:APP.ACTION_LOGOUT", + "ACTION_MANAGE_CONNECTIONS" : "@:APP.ACTION_MANAGE_CONNECTIONS", + "ACTION_MANAGE_PREFERENCES" : "@:APP.ACTION_MANAGE_PREFERENCES", + "ACTION_MANAGE_SESSIONS" : "@:APP.ACTION_MANAGE_SESSIONS", + "ACTION_MANAGE_SETTINGS" : "@:APP.ACTION_MANAGE_SETTINGS", + "ACTION_MANAGE_USERS" : "@:APP.ACTION_MANAGE_USERS", + "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS", + "ACTION_NAVIGATE_HOME" : "@:APP.ACTION_NAVIGATE_HOME", + "ACTION_VIEW_HISTORY" : "@:APP.ACTION_VIEW_HISTORY" + + } + +} \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json new file mode 100644 index 0000000000..e4e0762dbc --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.spec.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.spec.json new file mode 100644 index 0000000000..a9c0752ffe --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/guacamole/src/main/guacamole-frontend/tsconfig.json b/guacamole/src/main/guacamole-frontend/tsconfig.json new file mode 100644 index 0000000000..f02d27c63f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/tsconfig.json @@ -0,0 +1,39 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "allowSyntheticDefaultImports": true, + "paths": { + "guacamole-frontend-lib": [ + "dist/guacamole-frontend-lib" + ] + }, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} From f58e79b2ef72a83909415743b17d6e10c2aa7872 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Tue, 20 Jun 2023 11:31:16 +0200 Subject: [PATCH 03/80] GUACAMOLE-1085: Update Angular to v16.1 --- .../main/guacamole-frontend/package-lock.json | 36860 ++++++++-------- .../src/main/guacamole-frontend/package.json | 90 +- 2 files changed, 19059 insertions(+), 17891 deletions(-) diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index e047ef8e63..10c35e8213 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -1,17970 +1,19138 @@ { - "name": "frontend", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "frontend", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^16.0.5", - "@angular/common": "^16.0.5", - "@angular/compiler": "^16.0.5", - "@angular/core": "^16.0.5", - "@angular/forms": "^16.0.5", - "@angular/platform-browser": "^16.0.5", - "@angular/platform-browser-dynamic": "^16.0.5", - "@angular/router": "^16.0.5", - "@ngneat/transloco": "^4.2.2", - "@ngneat/transloco-messageformat": "^4.1.0", - "@simonwep/pickr": "^1.8.2", - "angular-expressions": "^1.1.9", - "file-saver": "^2.0.5", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.0.5", - "@angular/cli": "~16.0.5", - "@angular/compiler-cli": "^16.0.5", - "@types/file-saver": "^2.0.5", - "@types/jasmine": "~4.3.0", - "@types/lodash": "^4.14.194", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "ng-packagr": "^16.0.0", - "typescript": "~5.0.2" - } - }, - "../ngx-guacamole/dist/ngx-guacamole": { - "version": "0.0.1", - "extraneous": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^15.2.0", - "@angular/core": "^15.2.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1600.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "16.0.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1600.5", - "@angular-devkit/build-webpack": "0.1600.5", - "@angular-devkit/core": "16.0.5", - "@babel/core": "7.21.4", - "@babel/generator": "7.21.4", - "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/helper-split-export-declaration": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.20.7", - "@babel/plugin-transform-runtime": "7.21.4", - "@babel/preset-env": "7.21.4", - "@babel/runtime": "7.21.0", - "@babel/template": "7.20.7", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.0.5", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.5", - "cacache": "17.0.6", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.16", - "css-loader": "6.7.3", - "esbuild-wasm": "0.17.18", - "glob": "8.1.0", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.5", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.23", - "postcss-loader": "7.2.4", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.62.1", - "sass-loader": "13.2.2", - "semver": "7.4.0", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.1", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.0", - "vite": "4.3.9", - "webpack": "5.80.0", - "webpack-dev-middleware": "6.0.2", - "webpack-dev-server": "4.13.2", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.17.18" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "@angular/localize": "^16.0.0", - "@angular/platform-server": "^16.0.0", - "@angular/service-worker": "^16.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^16.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.1" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1600.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1600.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "16.0.5", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/animations": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.0.5" - } - }, - "node_modules/@angular/cli": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1600.5", - "@angular-devkit/core": "16.0.5", - "@angular-devkit/schematics": "16.0.5", - "@schematics/angular": "16.0.5", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.0.0", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.1.3", - "resolve": "1.22.2", - "semver": "7.4.0", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@angular/common": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.0.5", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.0.5" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler": "16.0.5", - "typescript": ">=4.9.3 <5.1" - } - }, - "node_modules/@angular/core": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.0.5", - "@angular/core": "16.0.5", - "@angular/platform-browser": "16.0.5", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.0.5", - "@angular/common": "16.0.5", - "@angular/core": "16.0.5" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.0.5", - "@angular/compiler": "16.0.5", - "@angular/core": "16.0.5", - "@angular/platform-browser": "16.0.5" - } - }, - "node_modules/@angular/router": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.0.5", - "@angular/core": "16.0.5", - "@angular/platform-browser": "16.0.5", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/generator": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "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": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.21.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@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.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@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.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@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.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@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.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^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.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@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.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "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.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-simple-access": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.21.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^16.1.1", + "@angular/common": "^16.1.1", + "@angular/compiler": "^16.1.1", + "@angular/core": "^16.1.1", + "@angular/forms": "^16.1.1", + "@angular/platform-browser": "^16.1.1", + "@angular/platform-browser-dynamic": "^16.1.1", + "@angular/router": "^16.1.1", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.1", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } + }, + "../ngx-guacamole/dist/ngx-guacamole": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^15.2.0", + "@angular/core": "^15.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "@angular/localize": "^16.1.0", + "@angular/platform-server": "^16.1.0", + "@angular/service-worker": "^16.1.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.1.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "karma": { + "optional": true }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "ng-packagr": { + "optional": true }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "protractor": { + "optional": true }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.21.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.20.7", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.20.7", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.0", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.20.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.4", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.18", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@messageformat/core": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "node_modules/@messageformat/date-skeleton": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/@messageformat/number-skeleton": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@messageformat/parser": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "moo": "^0.5.1" - } - }, - "node_modules/@messageformat/runtime": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "make-plural": "^7.0.0" - } - }, - "node_modules/@ngneat/transloco": { - "version": "4.2.2", - "license": "MIT", - "dependencies": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-messageformat": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "@ngneat/transloco": ">=4.2.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-utils": { - "version": "3.0.5", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "typescript": ">=4.9.3 <5.1", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@schematics/angular": { - "version": "16.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "16.0.5", - "@angular-devkit/schematics": "16.0.5", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@simonwep/pickr": { - "version": "1.8.2", - "license": "MIT", - "dependencies": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/file-saver": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.194", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.16.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abab": { - "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/angular-expressions": { - "version": "1.1.9", - "license": "Unlicense" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "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/base64id": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, - "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", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "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.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "17.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.2.2", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.0", - "minipass": "^5.0.0", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001481", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.8.0", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "10.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/compressible": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js": { - "version": "3.30.2", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.30.1", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.1.3", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=3" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/critters": { - "version": "0.0.16", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^4.2.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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/critters/node_modules/chalk": { - "version": "4.1.2", - "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/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/cross-spawn/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "6.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "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.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cuint": { - "version": "0.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/custom-event": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/date-format": { - "version": "4.0.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/di": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "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/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "4.3.1", - "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/domutils": { - "version": "2.8.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/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.371", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "2.2.0", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.17.18", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.18", - "@esbuild/android-arm64": "0.17.18", - "@esbuild/android-x64": "0.17.18", - "@esbuild/darwin-arm64": "0.17.18", - "@esbuild/darwin-x64": "0.17.18", - "@esbuild/freebsd-arm64": "0.17.18", - "@esbuild/freebsd-x64": "0.17.18", - "@esbuild/linux-arm": "0.17.18", - "@esbuild/linux-arm64": "0.17.18", - "@esbuild/linux-ia32": "0.17.18", - "@esbuild/linux-loong64": "0.17.18", - "@esbuild/linux-mips64el": "0.17.18", - "@esbuild/linux-ppc64": "0.17.18", - "@esbuild/linux-riscv64": "0.17.18", - "@esbuild/linux-s390x": "0.17.18", - "@esbuild/linux-x64": "0.17.18", - "@esbuild/netbsd-x64": "0.17.18", - "@esbuild/openbsd-x64": "0.17.18", - "@esbuild/sunos-x64": "0.17.18", - "@esbuild/win32-arm64": "0.17.18", - "@esbuild/win32-ia32": "0.17.18", - "@esbuild/win32-x64": "0.17.18" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.17.18", - "dev": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "dev": true, - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/gauge": { - "version": "4.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "dev": true, - "license": "BSD", - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.5", - "dev": true, - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/injection-js": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/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/inquirer/node_modules/chalk": { - "version": "4.1.2", - "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/inquirer/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/inquirer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-module": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "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-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.0", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/jstz": { - "version": "2.1.1", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/karma": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/less": { - "version": "4.1.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "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/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "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", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "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/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "2.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "16.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-fetch-happen/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "9.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/make-plural": { - "version": "7.3.0", - "license": "Unicode-DFS-2016" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.1", - "dev": true, - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-fetch/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moo": { - "version": "0.5.2", - "license": "BSD-3-Clause" - }, - "node_modules/mrmime": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanopop": { - "version": "2.3.0", - "license": "MIT" - }, - "node_modules/needle": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "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/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ng-packagr": { - "version": "16.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "bin": { - "ng-packagr": "cli/main.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "optionalDependencies": { - "esbuild": "^0.17.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "tslib": "^2.3.0", - "typescript": ">=4.9.3 <5.1" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/ng-packagr/node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-forge": { - "version": "1.3.1", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.10", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "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/ora/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "15.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream/node_modules/entities": { - "version": "4.5.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser/node_modules/entities": { - "version": "4.5.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-scurry": { - "version": "1.7.0", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^9.0.0", - "minipass": "^5.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.23", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "7.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "cosmiconfig-typescript-loader": "^4.3.0", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "ts-node": ">=10", - "typescript": ">=4", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-url": { - "version": "10.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-package-json": { - "version": "6.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.2", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.0", - "minipass": "^5.0.0", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/replace-in-file": { - "version": "6.3.5", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/replace-in-file/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/replace-in-file/node_modules/chalk": { - "version": "4.1.2", - "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/replace-in-file/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/replace-in-file/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/replace-in-file/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/replace-in-file/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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/restore-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.21.5", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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/safe-identifier": { - "version": "0.4.2", - "license": "ISC" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.62.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/send": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "1.4.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/sigstore/node_modules/make-fetch-happen": { - "version": "11.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/minipass-fetch": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "dev": true, - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "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/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.14", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/terser": { - "version": "5.17.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "1.0.4", - "make-fetch-happen": "^11.1.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "11.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/minipass-fetch": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.0.4", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "4.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webpack": { - "version": "5.80.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "4.13.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "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.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "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/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "license": "MIT", - "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/wrap-ansi-cjs/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-cjs/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-cjs/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "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", - "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", - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.11.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/zone.js": { - "version": "0.13.0", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/architect": { - "version": "0.1600.5", - "dev": true, - "requires": { - "@angular-devkit/core": "16.0.5", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/build-angular": { - "version": "16.0.5", - "dev": true, - "requires": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1600.5", - "@angular-devkit/build-webpack": "0.1600.5", - "@angular-devkit/core": "16.0.5", - "@babel/core": "7.21.4", - "@babel/generator": "7.21.4", - "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/helper-split-export-declaration": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.20.7", - "@babel/plugin-transform-runtime": "7.21.4", - "@babel/preset-env": "7.21.4", - "@babel/runtime": "7.21.0", - "@babel/template": "7.20.7", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.0.5", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.5", - "cacache": "17.0.6", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.16", - "css-loader": "6.7.3", - "esbuild": "0.17.18", - "esbuild-wasm": "0.17.18", - "glob": "8.1.0", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.5", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.23", - "postcss-loader": "7.2.4", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.62.1", - "sass-loader": "13.2.2", - "semver": "7.4.0", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.1", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.0", - "vite": "4.3.9", - "webpack": "5.80.0", - "webpack-dev-middleware": "6.0.2", - "webpack-dev-server": "4.13.2", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.1.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.21.4", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.4.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1600.5", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1600.5", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/core": { - "version": "16.0.5", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, - "@angular-devkit/schematics": { - "version": "16.0.5", - "dev": true, - "requires": { - "@angular-devkit/core": "16.0.5", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - } - }, - "@angular/animations": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cli": { - "version": "16.0.5", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1600.5", - "@angular-devkit/core": "16.0.5", - "@angular-devkit/schematics": "16.0.5", - "@schematics/angular": "16.0.5", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.0.0", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.1.3", - "resolve": "1.22.2", - "semver": "7.4.0", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.4.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "@angular/common": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "16.0.5", - "dev": true, - "requires": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "16.0.5", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "dev": true - }, - "@babel/code-frame": { - "version": "7.22.5", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "dev": true - }, - "@babel/core": { - "version": "7.21.8", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.21.4", - "dev": true, - "requires": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/types": "^7.21.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.21.8", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.21.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.21.8", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/types": "^7.21.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.21.4", - "dev": true, - "requires": { - "@babel/types": "^7.21.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.21.5", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/types": "^7.21.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "dev": true, - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/highlight": { - "version": "7.22.5", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.21.5" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.21.0", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.21.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-simple-access": "^7.21.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.21.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.21.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.21.4", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.21.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.21.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.21.4", - "dev": true, - "requires": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.20.7", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.20.7", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.0", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.20.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.4", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "dev": true - }, - "@babel/runtime": { - "version": "7.21.0", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.20.7", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/types": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true - }, - "@esbuild/win32-x64": { - "version": "0.17.18", - "dev": true, - "optional": true - }, - "@gar/promisify": { - "version": "1.1.3", - "dev": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true - } - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "dev": true - }, - "@messageformat/core": { - "version": "3.1.0", - "requires": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "@messageformat/date-skeleton": { - "version": "1.0.1" - }, - "@messageformat/number-skeleton": { - "version": "1.2.0" - }, - "@messageformat/parser": { - "version": "5.0.0", - "requires": { - "moo": "^0.5.1" - } - }, - "@messageformat/runtime": { - "version": "3.0.1", - "requires": { - "make-plural": "^7.0.0" - } - }, - "@ngneat/transloco": { - "version": "4.2.2", - "requires": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-messageformat": { - "version": "4.1.0", - "requires": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-utils": { - "version": "3.0.5", - "requires": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "@ngtools/webpack": { - "version": "16.0.5", - "dev": true, - "requires": {} - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.0.4", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "dev": true - }, - "which": { - "version": "3.0.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "dev": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "dev": true - } - } - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "dev": true, - "requires": { - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/run-script": { - "version": "6.0.1", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "optional": true - }, - "@rollup/plugin-json": { - "version": "6.0.0", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1" - } - }, - "@rollup/plugin-node-resolve": { - "version": "15.0.2", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@schematics/angular": { - "version": "16.0.5", - "dev": true, - "requires": { - "@angular-devkit/core": "16.0.5", - "@angular-devkit/schematics": "16.0.5", - "jsonc-parser": "3.2.0" - } - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "dev": true - }, - "@simonwep/pickr": { - "version": "1.8.2", - "requires": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true - }, - "@tootallnate/once": { - "version": "2.0.0", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "peer": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "peer": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "peer": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "dev": true - }, - "@tufjs/models": { - "version": "1.0.4", - "dev": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.0", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@types/body-parser": { - "version": "1.19.2", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.0", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/cookie": { - "version": "0.4.1", - "dev": true - }, - "@types/cors": { - "version": "2.8.13", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.37.0", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "dev": true - }, - "@types/express": { - "version": "4.17.17", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.35", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/file-saver": { - "version": "2.0.5", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.11", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "4.3.1", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/lodash": { - "version": "4.14.194", - "dev": true - }, - "@types/mime": { - "version": "1.3.2", - "dev": true - }, - "@types/node": { - "version": "18.16.0", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "dev": true - }, - "@types/resolve": { - "version": "1.20.2", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "dev": true - }, - "@types/send": { - "version": "0.17.1", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.1", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.1", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/ws": { - "version": "8.5.5", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "requires": {} - }, - "@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true - }, - "abab": { - "version": "2.0.6", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.2", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "dev": true, - "peer": true - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.12.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "angular-expressions": { - "version": "1.1.9" - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "4.1.3", - "dev": true, - "peer": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "2.1.2", - "dev": true - }, - "autoprefixer": { - "version": "10.4.14", - "dev": true, - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "babel-loader": { - "version": "9.1.2", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "balanced-match": { - "version": "1.0.2" - }, - "base64-js": { - "version": "1.5.1" - }, - "base64id": { - "version": "2.0.0", - "dev": true - }, - "batch": { - "version": "0.6.1", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "bl": { - "version": "4.1.0", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.20.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.5", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "buffer": { - "version": "5.7.1", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtin-modules": { - "version": "3.3.0", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "dev": true - }, - "cacache": { - "version": "17.0.6", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.2.2", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.0", - "minipass": "^5.0.0", - "path-scurry": "^1.7.0" - } - }, - "lru-cache": { - "version": "7.18.3", - "dev": true - }, - "minimatch": { - "version": "9.0.0", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0" - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001481", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "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.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.8.0" - }, - "cli-width": { - "version": "3.0.0", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4" - }, - "clone-deep": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "color-support": { - "version": "1.1.3", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "dev": true - }, - "commander": { - "version": "10.0.1", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "dev": true - }, - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1" - }, - "connect": { - "version": "3.7.0", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "dev": true - }, - "copy-anything": { - "version": "2.0.6", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - } - } - }, - "core-js": { - "version": "3.30.2" - }, - "core-js-compat": { - "version": "3.30.1", - "dev": true, - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-util-is": { - "version": "1.0.3", - "dev": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "8.1.3", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1" - }, - "js-yaml": { - "version": "4.1.0", - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "cosmiconfig-typescript-loader": { - "version": "4.3.0", - "dev": true, - "requires": {} - }, - "create-require": { - "version": "1.1.1", - "dev": true, - "peer": true - }, - "critters": { - "version": "0.0.16", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^4.2.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "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" - } - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "css-loader": { - "version": "6.7.3", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "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.2.0", - "semver": "^7.3.8" - } - }, - "css-select": { - "version": "4.3.0", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "dev": true - }, - "cuint": { - "version": "0.2.2", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "dev": true - }, - "date-format": { - "version": "4.0.14", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deepmerge": { - "version": "4.3.1", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.4", - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "dev": true - }, - "depd": { - "version": "2.0.0", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "dev": true - }, - "di": { - "version": "0.0.1", - "dev": true - }, - "diff": { - "version": "4.0.2", - "dev": true, - "peer": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "dev": true - }, - "dns-packet": { - "version": "5.6.0", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-serialize": { - "version": "2.2.1", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "1.4.1", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.371", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0" - }, - "emojis-list": { - "version": "3.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "engine.io": { - "version": "6.4.2", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - } - }, - "engine.io-parser": { - "version": "5.0.6", - "dev": true - }, - "enhanced-resolve": { - "version": "5.13.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "ent": { - "version": "2.2.0", - "dev": true - }, - "entities": { - "version": "2.2.0", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "dev": true - }, - "errno": { - "version": "0.1.8", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "1.2.1", - "dev": true - }, - "esbuild": { - "version": "0.17.18", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.18", - "@esbuild/android-arm64": "0.17.18", - "@esbuild/android-x64": "0.17.18", - "@esbuild/darwin-arm64": "0.17.18", - "@esbuild/darwin-x64": "0.17.18", - "@esbuild/freebsd-arm64": "0.17.18", - "@esbuild/freebsd-x64": "0.17.18", - "@esbuild/linux-arm": "0.17.18", - "@esbuild/linux-arm64": "0.17.18", - "@esbuild/linux-ia32": "0.17.18", - "@esbuild/linux-loong64": "0.17.18", - "@esbuild/linux-mips64el": "0.17.18", - "@esbuild/linux-ppc64": "0.17.18", - "@esbuild/linux-riscv64": "0.17.18", - "@esbuild/linux-s390x": "0.17.18", - "@esbuild/linux-x64": "0.17.18", - "@esbuild/netbsd-x64": "0.17.18", - "@esbuild/openbsd-x64": "0.17.18", - "@esbuild/sunos-x64": "0.17.18", - "@esbuild/win32-arm64": "0.17.18", - "@esbuild/win32-ia32": "0.17.18", - "@esbuild/win32-x64": "0.17.18" - } - }, - "esbuild-wasm": { - "version": "0.17.18", - "dev": true - }, - "escalade": { - "version": "3.1.1" - }, - "escape-html": { - "version": "1.0.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "dev": true - }, - "events": { - "version": "3.3.0", - "dev": true - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.18.2", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "cookie": { - "version": "0.5.0", - "dev": true - }, - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "finalhandler": { - "version": "1.2.0", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "statuses": { - "version": "2.0.1", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-saver": { - "version": "2.0.5" - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2" - }, - "flatted": { - "version": "3.2.7", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "dev": true - }, - "foreground-child": { - "version": "3.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.1", - "dev": true - } - } - }, - "forwarded": { - "version": "0.2.0", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "3.0.2", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0" - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5" - }, - "get-intrinsic": { - "version": "1.2.0", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "glob": { - "version": "7.2.3", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "dev": true - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "13.1.4", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0" - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.3", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "dev": true - }, - "hosted-git-info": { - "version": "6.1.1", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.5", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.1", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.8", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1" - }, - "ignore": { - "version": "5.2.4", - "dev": true - }, - "ignore-walk": { - "version": "6.0.3", - "dev": true, - "requires": { - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.0", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "image-size": { - "version": "0.5.5", - "dev": true, - "optional": true - }, - "immutable": { - "version": "4.3.0", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0" - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "4.0.0", - "dev": true - }, - "injection-js": { - "version": "2.4.0", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "inquirer": { - "version": "8.2.4", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "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" - } - } - } - }, - "ip": { - "version": "2.0.0", - "dev": true - }, - "ipaddr.js": { - "version": "2.1.0", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.1", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-core-module": { - "version": "2.12.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0" - }, - "is-lambda": { - "version": "1.0.1", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0" - }, - "is-what": { - "version": "3.14.1", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.10", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.2.0", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jasmine-core": { - "version": "4.5.0", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "json5": { - "version": "2.2.3", - "dev": true - }, - "jsonc-parser": { - "version": "3.2.0", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "dev": true - }, - "jstz": { - "version": "2.1.1" - }, - "karma": { - "version": "6.4.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "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.9", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "3.1.1", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-coverage": { - "version": "2.2.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - } - }, - "karma-jasmine": { - "version": "5.1.0", - "dev": true, - "requires": { - "jasmine-core": "^4.1.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "klona": { - "version": "2.0.6", - "dev": true - }, - "launch-editor": { - "version": "2.6.0", - "dev": true, - "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "less": { - "version": "4.1.3", - "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", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "dev": true, - "optional": true - } - } - }, - "less-loader": { - "version": "11.1.0", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "loader-runner": { - "version": "4.3.0", - "dev": true - }, - "loader-utils": { - "version": "3.2.1", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash.debounce": { - "version": "4.0.8", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1" - }, - "log-symbols": { - "version": "4.1.0", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log4js": { - "version": "6.9.1", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - } - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.30.0", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "dev": true, - "peer": true - }, - "make-fetch-happen": { - "version": "10.2.1", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "dependencies": { - "@npmcli/fs": { - "version": "2.1.2", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "cacache": { - "version": "16.1.3", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "glob": { - "version": "8.1.0", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "lru-cache": { - "version": "7.18.3", - "dev": true - }, - "minimatch": { - "version": "5.1.6", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true - }, - "ssri": { - "version": "9.0.1", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "unique-filename": { - "version": "2.0.1", - "dev": true, - "requires": { - "unique-slug": "^3.0.0" - } - }, - "unique-slug": { - "version": "3.0.0", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "make-plural": { - "version": "7.3.0" - }, - "media-typer": { - "version": "0.3.0", - "dev": true - }, - "memfs": { - "version": "3.5.1", - "dev": true, - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "methods": { - "version": "1.1.2", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0" - }, - "mini-css-extract-plugin": { - "version": "2.7.5", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "dev": true - }, - "minipass": { - "version": "5.0.0", - "dev": true - }, - "minipass-collect": { - "version": "1.0.2", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "minipass-fetch": { - "version": "2.1.2", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "minipass-flush": { - "version": "1.0.5", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "minizlib": { - "version": "2.1.2", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moo": { - "version": "0.5.2" - }, - "mrmime": { - "version": "1.0.1", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "multicast-dns": { - "version": "7.2.5", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "mute-stream": { - "version": "0.0.8", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "dev": true - }, - "nanopop": { - "version": "2.3.0" - }, - "needle": { - "version": "3.2.0", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "negotiator": { - "version": "0.6.3", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "dev": true - }, - "ng-packagr": { - "version": "16.0.0", - "dev": true, - "requires": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild": "^0.17.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "dev": true - } - } - }, - "node-forge": { - "version": "1.3.1", - "dev": true - }, - "node-gyp": { - "version": "9.3.1", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-releases": { - "version": "2.0.10", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "dev": true - }, - "npm-bundled": { - "version": "3.0.0", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.1", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "dev": true - }, - "npm-package-arg": { - "version": "10.1.0", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "dev": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "dev": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "dev": true, - "requires": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "dev": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minipass-fetch": { - "version": "3.0.3", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "dev": true - }, - "obuf": { - "version": "1.1.2", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "dev": true - }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.4.1", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "dev": true - } - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "pacote": { - "version": "15.1.3", - "dev": true, - "requires": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - } - }, - "pako": { - "version": "1.0.11", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "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" - } - }, - "parse-node-version": { - "version": "1.0.1", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "dev": true - }, - "parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "requires": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "dependencies": { - "entities": { - "version": "4.5.0", - "dev": true - }, - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "requires": { - "parse5": "^7.0.0" - }, - "dependencies": { - "entities": { - "version": "4.5.0", - "dev": true - }, - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parseurl": { - "version": "1.3.3", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1" - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-scurry": { - "version": "1.7.0", - "dev": true, - "requires": { - "lru-cache": "^9.0.0", - "minipass": "^5.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.1", - "dev": true - } - } - }, - "path-to-regexp": { - "version": "0.1.7", - "dev": true - }, - "path-type": { - "version": "4.0.0" - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "pify": { - "version": "4.0.1", - "dev": true, - "optional": true - }, - "piscina": { - "version": "3.2.0", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "postcss": { - "version": "8.4.23", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-loader": { - "version": "7.2.4", - "dev": true, - "requires": { - "cosmiconfig": "^8.1.3", - "cosmiconfig-typescript-loader": "^4.3.0", - "klona": "^2.0.6", - "semver": "^7.3.8" - } - }, - "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-selector-parser": { - "version": "6.0.11", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-url": { - "version": "10.1.3", - "dev": true, - "requires": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "dev": true - }, - "minimatch": { - "version": "3.0.8", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "dev": true - }, - "proc-log": { - "version": "3.0.0", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "dev": true - } - } - }, - "prr": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "punycode": { - "version": "2.3.0", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "dev": true - }, - "qs": { - "version": "6.11.0", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true - }, - "raw-body": { - "version": "2.5.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-package-json": { - "version": "6.0.3", - "dev": true, - "requires": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.2.2", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.0", - "minipass": "^5.0.0", - "path-scurry": "^1.7.0" - } - }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "dev": true - }, - "minimatch": { - "version": "9.0.0", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.2", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "dev": true - }, - "regexpu-core": { - "version": "5.3.2", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true - } - } - }, - "replace-in-file": { - "version": "6.3.5", - "requires": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "require-directory": { - "version": "2.1.1" - }, - "require-from-string": { - "version": "2.0.2", - "dev": true + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/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 + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/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 + }, + "node_modules/@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.1", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1" + } + }, + "node_modules/@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.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.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@messageformat/core": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "node_modules/@messageformat/date-skeleton": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@messageformat/number-skeleton": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/@messageformat/parser": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "moo": "^0.5.1" + } + }, + "node_modules/@messageformat/runtime": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "make-plural": "^7.0.0" + } + }, + "node_modules/@ngneat/transloco": { + "version": "4.2.2", + "license": "MIT", + "dependencies": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-messageformat": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "@ngneat/transloco": ">=4.2.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.194", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abab": { + "version": "2.0.6", + "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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/angular-expressions": { + "version": "1.1.9", + "license": "Unlicense" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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 + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "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/base64id": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "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", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "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.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.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, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.8.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "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, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js": { + "version": "3.30.2", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "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, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "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 + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/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/inquirer/node_modules/chalk": { + "version": "4.1.2", + "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/inquirer/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/inquirer/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "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-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jstz": { + "version": "2.1.1", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/karma": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/less": { + "version": "4.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "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/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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/license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "requires-port": { - "version": "1.0.0", - "dev": true + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "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/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-plural": { + "version": "7.3.0", + "license": "Unicode-DFS-2016" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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 + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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 + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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 + }, + "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, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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 + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "license": "BSD-3-Clause" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanopop": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/needle": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "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/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "dependencies": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.17.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "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 + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "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/ora/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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 + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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 + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "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, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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 + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/replace-in-file": { + "version": "6.3.5", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/replace-in-file/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "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/replace-in-file/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/replace-in-file/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/replace-in-file/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/replace-in-file/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.21.5", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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/safe-identifier": { + "version": "0.4.2", + "license": "ISC" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true }, - "resolve": { - "version": "1.22.2", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } + "sass": { + "optional": true }, - "resolve-from": { - "version": "5.0.0", - "dev": true + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/tar/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 + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "source-map": { - "version": "0.6.1", - "dev": true - } - } + "esbuild": { + "optional": true }, - "restore-cursor": { - "version": "3.1.0", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "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 + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true }, - "retry": { - "version": "0.12.0", - "dev": true + "less": { + "optional": true }, - "reusify": { - "version": "1.0.4", - "dev": true + "sass": { + "optional": true }, - "rfdc": { - "version": "1.3.0", - "dev": true + "stylus": { + "optional": true }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "sugarss": { + "optional": true }, - "rollup": { - "version": "3.21.5", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "run-async": { - "version": "2.4.1", - "dev": true + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "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/wrap-ansi-cjs": { + "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "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", + "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", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/zone.js": { + "version": "0.13.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "requires": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild": "0.17.19", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "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 + } + } }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } + "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" + } }, - "rxjs": { - "version": "7.8.1", - "requires": { - "tslib": "^2.1.0" - } + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "safe-buffer": { - "version": "5.2.1" + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + } + }, + "@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "dependencies": { + "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" + } }, - "safe-identifier": { - "version": "0.4.2" + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "safer-buffer": { - "version": "2.1.2", - "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 + } + } + }, + "@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "requires": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + } + }, + "@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.5", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "dev": true + }, + "@babel/core": { + "version": "7.21.8", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "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 + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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" + } + }, + "@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" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true }, - "sass": { - "version": "1.62.1", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true }, - "sass-loader": { - "version": "13.2.2", - "dev": true, - "requires": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - } + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, - "sax": { - "version": "1.2.4", - "dev": true, - "optional": true + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } }, - "schema-utils": { - "version": "4.0.1", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } }, - "select-hose": { - "version": "2.0.0", - "dev": true + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@messageformat/core": { + "version": "3.1.0", + "requires": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "@messageformat/date-skeleton": { + "version": "1.0.1" + }, + "@messageformat/number-skeleton": { + "version": "1.2.0" + }, + "@messageformat/parser": { + "version": "5.0.0", + "requires": { + "moo": "^0.5.1" + } + }, + "@messageformat/runtime": { + "version": "3.0.1", + "requires": { + "make-plural": "^7.0.0" + } + }, + "@ngneat/transloco": { + "version": "4.2.2", + "requires": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-messageformat": { + "version": "4.1.0", + "requires": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-utils": { + "version": "3.0.5", + "requires": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true }, - "selfsigned": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-forge": "^1" - } + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true + }, + "@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "@simonwep/pickr": { + "version": "1.8.2", + "requires": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "dev": true + }, + "@types/cors": { + "version": "2.8.13", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.37.0", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/file-saver": { + "version": "2.0.5", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "4.3.1", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/lodash": { + "version": "4.14.194", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "18.16.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true + }, + "abab": { + "version": "2.0.6", + "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.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.2", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "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", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "angular-expressions": { + "version": "1.1.9" + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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 + }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "babel-loader": { + "version": "9.1.2", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "dependencies": { "semver": { - "version": "7.3.8", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "send": { - "version": "0.18.0", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "dev": true - }, - "ms": { - "version": "2.1.3", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "dev": true - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "dev": true + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "base64id": { + "version": "2.0.0", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bl": { + "version": "4.1.0", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "body-parser": { + "version": "1.20.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "setprototypeof": { - "version": "1.2.0", - "dev": true + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer": { + "version": "5.7.1", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "shallow-clone": { - "version": "3.0.1", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true }, - "shebang-regex": { - "version": "3.0.0", - "dev": true + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "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.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.3", + "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", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.8.0" + }, + "cli-width": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4" + }, + "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", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "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" + } + }, + "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", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true }, - "shell-quote": { - "version": "1.8.1", - "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" + } }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "signal-exit": { - "version": "3.0.7" + "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" + }, + "connect": { + "version": "3.7.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "sigstore": { - "version": "1.4.0", - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "dev": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minipass-fetch": { - "version": "3.0.3", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - } - } + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "core-js": { + "version": "3.30.2" + }, + "core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "8.1.3", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1" }, - "slash": { - "version": "4.0.0", - "dev": true + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.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" + } }, - "smart-buffer": { - "version": "4.2.0", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "socket.io": { - "version": "4.6.1", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.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" + } }, - "socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "requires": { - "ws": "~8.11.0" - } + "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 }, - "socket.io-parser": { - "version": "4.2.3", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } + "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 }, - "sockjs": { - "version": "0.3.24", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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 + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "dev": true + }, + "date-format": { + "version": "4.0.14", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "di": { + "version": "0.0.1", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serialize": { + "version": "2.2.1", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0" + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "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": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "engine.io": { + "version": "6.4.2", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + } + }, + "engine.io-parser": { + "version": "5.0.6", + "dev": true + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "ent": { + "version": "2.2.0", + "dev": true + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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": "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 + }, + "errno": { + "version": "0.1.8", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "1.2.1", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true }, - "socks": { - "version": "2.7.1", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } }, - "socks-proxy-agent": { - "version": "7.0.0", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true }, - "source-map": { - "version": "0.7.4", - "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" + } }, - "source-map-js": { - "version": "1.0.2", - "dev": true + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } }, - "source-map-loader": { - "version": "4.0.1", - "dev": true, - "requires": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } }, - "spdx-correct": { - "version": "3.2.0", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-saver": { + "version": "2.0.5" + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "spdx-exceptions": { - "version": "2.3.0", - "dev": true + "ms": { + "version": "2.0.0", + "dev": true }, - "spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } + "on-finished": { + "version": "2.3.0", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2" + }, + "flatted": { + "version": "3.2.7", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "dev": true + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.2.0", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "13.1.4", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "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 + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0" + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "spdx-license-ids": { - "version": "3.0.13", - "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 }, - "spdy": { - "version": "4.0.2", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } + "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" + } + } + } + }, + "html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.2.4", + "dev": true + }, + "ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "spdy-transport": { - "version": "3.0.0", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "image-size": { + "version": "0.5.5", + "dev": true, + "optional": true + }, + "immutable": { + "version": "4.3.0", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0" + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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 + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true + }, + "injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } + }, + "inquirer": { + "version": "8.2.4", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "sprintf-js": { - "version": "1.0.3", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "ssri": { - "version": "10.0.4", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "statuses": { - "version": "1.5.0", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "streamroller": { - "version": "3.1.5", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-core-module": { + "version": "2.12.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0" + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "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-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0" + }, + "is-what": { + "version": "3.14.1", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "string-width": { - "version": "4.2.3", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jasmine-core": { + "version": "4.5.0", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "json5": { + "version": "2.2.3", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "jstz": { + "version": "2.1.1" + }, + "karma": { + "version": "6.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "strip-ansi": { - "version": "6.0.1", - "requires": { - "ansi-regex": "^5.0.1" - } + "source-map": { + "version": "0.6.1", + "dev": true }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true + "yargs": { + "version": "16.2.0", + "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" + } }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } + "yargs-parser": { + "version": "20.2.9", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "requires": { + "which": "^1.2.1" + } + }, + "karma-coverage": { + "version": "2.2.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "5.1.0", + "dev": true, + "requires": { + "jasmine-core": "^4.1.0" + } + }, + "karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "requires": {} + }, + "karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "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.6", + "dev": true + }, + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "less": { + "version": "4.1.3", + "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", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true + "mime": { + "version": "1.6.0", + "dev": true, + "optional": true }, - "symbol-observable": { - "version": "4.0.0", - "dev": true + "semver": { + "version": "5.7.1", + "dev": true, + "optional": true }, - "tapable": { - "version": "2.2.1", - "dev": true + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "11.1.0", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1" + }, + "log-symbols": { + "version": "4.1.0", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "tar": { - "version": "6.1.14", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "terser": { - "version": "5.17.1", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "dev": true - } - } + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } + "color-name": { + "version": "1.1.4" }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } + "has-flag": { + "version": "4.0.0" }, - "text-table": { - "version": "0.2.0", - "dev": true + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log4js": { + "version": "6.9.1", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + } + }, + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.0", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "make-plural": { + "version": "7.3.0" + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, + "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 + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "through": { - "version": "2.3.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 + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "thunky": { - "version": "1.1.0", - "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 + } + } + }, + "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", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "to-fast-properties": { - "version": "2.0.0", - "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 + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "toidentifier": { - "version": "1.0.1", - "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 + } + } + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moo": { + "version": "0.5.2" + }, + "mrmime": { + "version": "1.0.1", + "dev": true + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "dev": true + }, + "nanopop": { + "version": "2.3.0" + }, + "needle": { + "version": "3.2.0", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } }, - "tree-kill": { - "version": "1.2.2", - "dev": true + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "requires": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild": "^0.17.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + } + } + }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "dev": true + }, + "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.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "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", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "ts-node": { - "version": "10.9.1", - "dev": true, - "peer": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "tslib": { - "version": "2.5.0" + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "tuf-js": { - "version": "1.1.5", - "dev": true, - "requires": { - "@tufjs/models": "1.0.4", - "make-fetch-happen": "^11.1.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "dev": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "minipass-fetch": { - "version": "3.0.3", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - } - } + "color-name": { + "version": "1.1.4" }, - "type-fest": { - "version": "0.21.3", - "dev": true + "has-flag": { + "version": "4.0.0" }, - "type-is": { - "version": "1.6.18", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.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" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "requires": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "requires": { + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.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 + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0" + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "4.0.1", + "dev": true, + "optional": true + }, + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "requires": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "requires": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true }, - "typed-assert": { - "version": "1.0.9", - "dev": true + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "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" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "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 + } + } + }, + "prr": { + "version": "1.0.1", + "dev": true, + "optional": true + }, + "punycode": { + "version": "2.3.0", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "dev": true + }, + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "typescript": { - "version": "5.0.4", - "dev": true + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } }, - "ua-parser-js": { - "version": "0.7.35", - "dev": true + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.2", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "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": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "dev": true + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "replace-in-file": { + "version": "6.3.5", + "requires": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true + "color-name": { + "version": "1.1.4" }, - "unique-filename": { - "version": "3.0.0", - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } + "has-flag": { + "version": "4.0.0" }, - "unique-slug": { - "version": "4.0.0", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } }, - "universalify": { - "version": "0.1.2", - "dev": true + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.21.5", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-async": { + "version": "2.4.1", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-identifier": { + "version": "0.4.2" + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "requires": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "dev": true, + "optional": true + }, + "schema-utils": { + "version": "4.0.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "unpipe": { - "version": "1.0.0", - "dev": true + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } }, - "update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "util-deprecate": { - "version": "1.0.2" + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "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" + } }, - "utils-merge": { - "version": "1.0.1", - "dev": true + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true }, - "uuid": { - "version": "8.3.2", - "dev": true + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "peer": true + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "validate-npm-package-name": { - "version": "5.0.0", - "dev": true, - "requires": { - "builtins": "^5.0.0" + "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.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "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": "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 + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "slash": { + "version": "4.0.0", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socket.io": { + "version": "4.6.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "requires": { + "ws": "~8.11.0" + } + }, + "socket.io-parser": { + "version": "4.2.3", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "source-map-loader": { + "version": "4.0.1", + "dev": true, + "requires": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "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", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "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", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + }, + "streamroller": { + "version": "3.1.5", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "symbol-observable": { + "version": "4.0.0", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } } + } }, - "vary": { - "version": "1.1.2", - "dev": true + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, - "vite": { - "version": "4.3.9", - "dev": true, - "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "void-elements": { - "version": "2.0.1", - "dev": true + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} }, - "watchpack": { - "version": "2.4.0", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } + "json-schema-traverse": { + "version": "0.4.1", + "dev": true }, - "wbuf": { - "version": "1.7.3", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "dev": true + }, + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-assert": { + "version": "1.0.9", + "dev": true + }, + "typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.35", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1", + "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==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "vite": { + "version": "4.3.9", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "void-elements": { + "version": "2.0.1", + "dev": true + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "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" + } + }, + "wcwidth": { + "version": "1.0.1", + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "wcwidth": { - "version": "1.0.1", - "requires": { - "defaults": "^1.0.3" - } + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} }, - "webpack": { - "version": "5.80.0", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } + "json-schema-traverse": { + "version": "0.4.1", + "dev": true }, + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { "webpack-dev-middleware": { - "version": "6.0.2", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "webpack-dev-server": { - "version": "4.13.2", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "dependencies": { - "webpack-dev-middleware": { - "version": "5.3.3", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "ws": { - "version": "8.13.0", - "dev": true, - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } - }, - "websocket-driver": { - "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", - "dev": true - }, - "which": { - "version": "1.3.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.1", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "dev": true, - "requires": { - "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" + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } }, "ws": { - "version": "8.11.0", - "dev": true, - "requires": {} - }, - "xxhashjs": { - "version": "0.2.2", - "dev": true, - "requires": { - "cuint": "^0.2.2" - } - }, - "y18n": { - "version": "5.0.8" - }, - "yallist": { - "version": "3.1.1", - "dev": true + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + } + } + }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true + }, + "webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "requires": { + "typed-assert": "^1.0.8" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "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 + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "yargs": { - "version": "17.7.2", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "yargs-parser": { - "version": "21.1.1" + "color-name": { + "version": "1.1.4" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@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" + }, + "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" + } }, - "yn": { - "version": "3.1.1", - "dev": true, - "peer": true + "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" + } }, - "zone.js": { - "version": "0.13.0", - "requires": { - "tslib": "^2.3.0" - } + "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 } + } + }, + "wrappy": { + "version": "1.0.2" + }, + "ws": { + "version": "8.11.0", + "dev": true, + "requires": {} + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, + "y18n": { + "version": "5.0.8" + }, + "yallist": { + "version": "3.1.1", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1" + }, + "zone.js": { + "version": "0.13.0", + "requires": { + "tslib": "^2.3.0" + } } + } } diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index 241d7c63ac..ef79803050 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -1,47 +1,47 @@ { - "name": "frontend", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "test": "ng test" - }, - "private": true, - "dependencies": { - "@angular/animations": "^16.0.5", - "@angular/common": "^16.0.5", - "@angular/compiler": "^16.0.5", - "@angular/core": "^16.0.5", - "@angular/forms": "^16.0.5", - "@angular/platform-browser": "^16.0.5", - "@angular/platform-browser-dynamic": "^16.0.5", - "@angular/router": "^16.0.5", - "@ngneat/transloco": "^4.2.2", - "@ngneat/transloco-messageformat": "^4.1.0", - "@simonwep/pickr": "^1.8.2", - "angular-expressions": "^1.1.9", - "file-saver": "^2.0.5", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.0.5", - "@angular/cli": "~16.0.5", - "@angular/compiler-cli": "^16.0.5", - "@types/file-saver": "^2.0.5", - "@types/jasmine": "~4.3.0", - "@types/lodash": "^4.14.194", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "ng-packagr": "^16.0.0", - "typescript": "~5.0.2" - } + "name": "frontend", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^16.1.1", + "@angular/common": "^16.1.1", + "@angular/compiler": "^16.1.1", + "@angular/core": "^16.1.1", + "@angular/forms": "^16.1.1", + "@angular/platform-browser": "^16.1.1", + "@angular/platform-browser-dynamic": "^16.1.1", + "@angular/router": "^16.1.1", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.1", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } } From 912407c1cc80e0f87996eb64281543a684afb82e Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Tue, 20 Jun 2023 11:58:41 +0200 Subject: [PATCH 04/80] GUACAMOLE-1085: Add Angular library guacamole-fronted-lib --- .../main/guacamole-frontend-lib/.editorconfig | 16 + .../main/guacamole-frontend-lib/.gitignore | 8 + .../src/main/guacamole-frontend-lib/README.md | 27 + .../main/guacamole-frontend-lib/angular.json | 44 + .../guacamole-frontend-lib/package-lock.json | 11719 ++++++++++++++++ .../main/guacamole-frontend-lib/package.json | 39 + .../projects/guacamole-frontend-lib/README.md | 24 + .../guacamole-frontend-lib/karma.conf.js | 64 + .../guacamole-frontend-lib/ng-package.json | 19 + .../guacamole-frontend-lib/package.json | 12 + .../src/assets/guacamole-common-js.min.js | 165 + .../src/assets/layouts/de-de-qwertz.json | 449 + .../src/assets/layouts/en-us-qwerty.json | 399 + .../src/assets/layouts/es-es-qwerty.json | 455 + .../src/assets/layouts/fr-fr-azerty.json | 446 + .../src/assets/layouts/it-it-qwerty.json | 452 + .../src/assets/layouts/nl-nl-qwerty.json | 464 + .../src/assets/layouts/ru-ru-qwerty.json | 546 + .../src/lib/client/client.module.ts | 38 + .../client/components/viewport.component.html | 21 + .../client/components/viewport.component.ts | 116 + .../services/guac-audio.service.spec.ts | 39 + .../lib/client/services/guac-audio.service.ts | 41 + .../services/guac-image.service.spec.ts | 39 + .../lib/client/services/guac-image.service.ts | 140 + .../services/guac-video.service.spec.ts | 36 + .../lib/client/services/guac-video.service.ts | 41 + .../directives/guac-click.directive.ts | 123 + .../directives/guac-focus.directive.ts | 65 + .../directives/guac-resize.directive.ts | 113 + .../directives/guac-scroll.directive.ts | 71 + .../directives/guac-upload.directive.ts | 101 + .../src/lib/element/element.module.ts | 52 + .../src/lib/element/styles/resize-sensor.css | 30 + .../src/lib/element/types/Marker.ts | 43 + .../src/lib/element/types/ScrollState.ts | 51 + .../services/guac-event.service.spec.ts | 51 + .../lib/events/services/guac-event.service.ts | 73 + .../src/lib/events/types/GuacEvent.ts | 36 + .../lib/events/types/GuacEventArguments.ts | 32 + .../lib/osk/components/osk/osk.component.html | 20 + .../osk/components/osk/osk.component.spec.ts | 95 + .../lib/osk/components/osk/osk.component.ts | 130 + .../src/lib/osk/osk.module.ts | 43 + .../src/lib/osk/styles/osk.css | 228 + .../directives/guac-touch-drag.directive.ts | 176 + .../directives/guac-touch-pinch.directive.ts | 200 + .../src/lib/touch/touch.module.ts | 42 + .../src/lib/types/Guacamole.ts | 3683 +++++ .../guacamole-frontend-lib/src/public-api.ts | 54 + .../src/test-utils/click-helper.ts | 50 + .../src/test-utils/test-scheduler.ts | 30 + .../guacamole-frontend-lib/tsconfig.lib.json | 14 + .../tsconfig.lib.prod.json | 10 + .../guacamole-frontend-lib/tsconfig.spec.json | 15 + .../main/guacamole-frontend-lib/tsconfig.json | 38 + 56 files changed, 21528 insertions(+) create mode 100644 guacamole/src/main/guacamole-frontend-lib/.editorconfig create mode 100644 guacamole/src/main/guacamole-frontend-lib/.gitignore create mode 100644 guacamole/src/main/guacamole-frontend-lib/README.md create mode 100644 guacamole/src/main/guacamole-frontend-lib/angular.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/package-lock.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/package.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/README.md create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/karma.conf.js create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/ng-package.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/de-de-qwertz.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/en-us-qwerty.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/es-es-qwerty.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/fr-fr-azerty.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/it-it-qwerty.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/nl-nl-qwerty.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/ru-ru-qwerty.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/client.module.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.html create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-focus.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-scroll.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-upload.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/element.module.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/styles/resize-sensor.css create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/Marker.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/ScrollState.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEvent.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEventArguments.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/osk.module.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/styles/osk.css create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-drag.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-pinch.directive.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/touch.module.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/types/Guacamole.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/public-api.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/click-helper.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.prod.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.spec.json create mode 100644 guacamole/src/main/guacamole-frontend-lib/tsconfig.json diff --git a/guacamole/src/main/guacamole-frontend-lib/.editorconfig b/guacamole/src/main/guacamole-frontend-lib/.editorconfig new file mode 100644 index 0000000000..0792692308 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/guacamole/src/main/guacamole-frontend-lib/.gitignore b/guacamole/src/main/guacamole-frontend-lib/.gitignore new file mode 100644 index 0000000000..056c0d3f86 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/.gitignore @@ -0,0 +1,8 @@ +# Compiled output +dist/ + +# Node +node_modules/ + +# Miscellaneous +.angular/ diff --git a/guacamole/src/main/guacamole-frontend-lib/README.md b/guacamole/src/main/guacamole-frontend-lib/README.md new file mode 100644 index 0000000000..0701115037 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/README.md @@ -0,0 +1,27 @@ +# GuacamoleFrontendLib + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/guacamole/src/main/guacamole-frontend-lib/angular.json b/guacamole/src/main/guacamole-frontend-lib/angular.json new file mode 100644 index 0000000000..7f186cad83 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/angular.json @@ -0,0 +1,44 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "guacamole-frontend-lib": { + "projectType": "library", + "root": "projects/guacamole-frontend-lib", + "sourceRoot": "projects/guacamole-frontend-lib/src", + "prefix": "guac", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/guacamole-frontend-lib/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/guacamole-frontend-lib/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/guacamole-frontend-lib/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/guacamole-frontend-lib/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "scripts": [ + "projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js" + ], + "karmaConfig": "projects/guacamole-frontend-lib/karma.conf.js" + } + } + } + } + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/package-lock.json b/guacamole/src/main/guacamole-frontend-lib/package-lock.json new file mode 100644 index 0000000000..d58d8b214d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/package-lock.json @@ -0,0 +1,11719 @@ +{ + "name": "guacamole-frontend-lib", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "guacamole-frontend-lib", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^16.1.0", + "@angular/common": "^16.1.0", + "@angular/compiler": "^16.1.0", + "@angular/core": "^16.1.0", + "@angular/forms": "^16.1.0", + "@angular/platform-browser": "^16.1.0", + "@angular/platform-browser-dynamic": "^16.1.0", + "@angular/router": "^16.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.0", + "@types/jasmine": "~4.3.0", + "jasmine-core": "~4.6.0", + "karma": "~6.4.0", + "karma-coverage": "~2.2.0", + "karma-firefox-launcher": "~2.1.2", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "@angular/localize": "^16.1.0", + "@angular/platform-server": "^16.1.0", + "@angular/service-worker": "^16.1.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.1.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.1", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1" + } + }, + "node_modules/@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/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/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "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/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.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.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.4.tgz", + "integrity": "sha512-DsJbnxCdjmhRP7dXwjD6JcPc+z7V/4mG3VA1cEFec/+R343TaNPnZ9eJzMkjR4T1BYkjkDIUsPDybkDC0qLrvA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", + "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "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 + }, + "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 + }, + "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 + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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 + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.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, + "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, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "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, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "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 + }, + "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, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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 + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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, + "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==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", + "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "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 + }, + "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, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "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, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "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": [ + { + "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/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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 + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/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/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/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "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, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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 + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "dependencies": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + } + }, + "node_modules/karma-firefox-launcher/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/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "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, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/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/karma/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/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/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==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/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, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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 + }, + "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, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "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/make-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/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "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 + }, + "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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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 + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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 + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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 + }, + "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, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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 + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "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 + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "dependencies": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.17.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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, + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "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 + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "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, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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 + }, + "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/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/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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 + }, + "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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/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 + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=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/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/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "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/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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 + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "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, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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 + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "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 + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/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/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, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "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, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "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, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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 + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.2.tgz", + "integrity": "sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/tar/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 + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/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==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/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 + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "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 + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "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, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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, + "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": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/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 + }, + "node_modules/webpack/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==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "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/wrap-ansi-cjs": { + "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-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, + "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", + "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/wrap-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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/zone.js": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", + "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/package.json b/guacamole/src/main/guacamole-frontend-lib/package.json new file mode 100644 index 0000000000..a1b95af0b0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/package.json @@ -0,0 +1,39 @@ +{ + "name": "guacamole-frontend-lib", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^16.1.0", + "@angular/common": "^16.1.0", + "@angular/compiler": "^16.1.0", + "@angular/core": "^16.1.0", + "@angular/forms": "^16.1.0", + "@angular/platform-browser": "^16.1.0", + "@angular/platform-browser-dynamic": "^16.1.0", + "@angular/router": "^16.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.0", + "@types/jasmine": "~4.3.0", + "jasmine-core": "~4.6.0", + "karma": "~6.4.0", + "karma-firefox-launcher": "~2.1.2", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/README.md b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/README.md new file mode 100644 index 0000000000..1b101c92ca --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/README.md @@ -0,0 +1,24 @@ +# GuacamoleFrontendLib + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0. + +## Code scaffolding + +Run `ng generate component component-name --project guacamole-frontend-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project guacamole-frontend-lib`. +> Note: Don't forget to add `--project guacamole-frontend-lib` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build guacamole-frontend-lib` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build guacamole-frontend-lib`, go to the dist folder `cd dist/guacamole-frontend-lib` and run `npm publish`. + +## Running unit tests + +Run `ng test guacamole-frontend-lib` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/karma.conf.js b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/karma.conf.js new file mode 100644 index 0000000000..d2ff6aa682 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/karma.conf.js @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-firefox-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, '../../coverage/guacamole-frontend-lib'), + subdir: '.', + reporters: [ + {type: 'html'}, + {type: 'text-summary'} + ] + }, + reporters: ['progress', 'kjhtml'], + + // Run the tests once and exit + singleRun: true, + + // Disable automatic test running on changed files + autoWatch: false, + + // Use a headless firefox browser to run the tests + browsers: ['FirefoxHeadless'], + customLaunchers: { + 'FirefoxHeadless': { + base: 'Firefox', + flags: [ + '--headless' + ] + } + } + }); +}; diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/ng-package.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/ng-package.json new file mode 100644 index 0000000000..581c980503 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/ng-package.json @@ -0,0 +1,19 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/guacamole-frontend-lib", + "lib": { + "entryFile": "src/public-api.ts" + }, + "assets": [ + { + "glob": "**/*", + "input": "src/assets", + "output": "assets" + }, + { + "glob": "**/*.css", + "input": "src/lib", + "output": "assets/styles" + } + ] +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json new file mode 100644 index 0000000000..3689b01404 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json @@ -0,0 +1,12 @@ +{ + "name": "guacamole-frontend-lib", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + }, + "dependencies": { + "tslib": "^2.3.0" + }, + "sideEffects": false +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js new file mode 100644 index 0000000000..ca4ab4d26b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js @@ -0,0 +1,165 @@ +'use strict';var Guacamole=Guacamole||{};Guacamole.ArrayBufferReader=function(b){var a=this;b.onblob=function(b){b=window.atob(b);for(var c=new ArrayBuffer(b.length),d=new Uint8Array(c),f=0;f=a.length)return a[0];var b=0;a.forEach(function(a){b+=a.length});var c=0,d=new f(b);a.forEach(function(a){d.set(a,c);c+=a.length});return d};b.ondata=function(a){h.push(new f(new f(a)));if(a=p(h)){var b= + Number.MAX_VALUE,m=a.length,q=Math.floor(.02*d.rate);for(q=Math.max(d.channels*q,d.channels*(Math.floor(a.length/d.channels)-q));qu?r(u)*r(u/3):0;q+=w*u}d[x]=q*h;g+=c.channels}return d},w=function(a){q=e.createScriptProcessor(2048, + c.channels,c.channels);q.connect(e.destination);q.onaudioprocess=function(a){f.sendData(t(a.inputBuffer).buffer)};m=e.createMediaStreamSource(a);m.connect(q);"suspended"===e.state&&e.resume();g=a},u=function(){f.sendEnd();if(d.onerror)d.onerror()};f.onack=function(a){if(a.code!==Guacamole.Status.Code.SUCCESS||g){m&&m.disconnect();q&&q.disconnect();if(g)for(var b=g.getTracks(),c=0;c=b.size){if(a.oncomplete)a.oncomplete(b)}else{a:{var e=c;var k=c+d.blobLength,n=(b.slice||b.webkitSlice||b.mozSlice).bind(b),g=k-e;if(g!==k){var m=n(e,g);if(m.size===g){e=m;break a}}e=n(e,k)}c+=d.blobLength;f.readAsArrayBuffer(e)}};f.onload=function(){d.sendData(f.result);d.onack=function(e){if(a.onack)a.onack(e); + if(!e.isError()){if(a.onprogress)a.onprogress(b,c-d.blobLength);k()}}};f.onerror=function(){if(a.onerror)a.onerror(b,c,f.error)};k()};this.sendEnd=function(){d.sendEnd()};this.oncomplete=this.onprogress=this.onerror=this.onack=null};Guacamole=Guacamole||{}; +Guacamole.Client=function(b){function a(l){if(l!=e&&(e=l,c.onstatechange))c.onstatechange(e)}function d(){return e==Guacamole.Client.State.CONNECTED||e==Guacamole.Client.State.WAITING}var c=this,e=Guacamole.Client.State.IDLE,f=0,k=null,h=0,p={0:"butt",1:"round",2:"square"},n={0:"bevel",1:"miter",2:"round"},g=new Guacamole.Display,m={},q={},r=[],t=[],w=[],u=new Guacamole.IntegerPool,z=[];this.exportState=function(l){var a={currentState:e,currentTimestamp:f,layers:{}},b={},c;for(c in m)b[c]=m[c];g.flush(function(){for(var c in b){var x= + parseInt(c),d=b[c],e=d.toCanvas(),f={width:d.width,height:d.height};d.width&&d.height&&(f.url=e.toDataURL("image/png"));if(0a&&delete m[a]},distort:function(a){var b=parseInt(a[0]),l=parseFloat(a[1]),c=parseFloat(a[2]),d=parseFloat(a[3]),e=parseFloat(a[4]),f=parseFloat(a[5]);a=parseFloat(a[6]);0<=b&&(b=v(b),g.distort(b,l,c,d,e,f,a))},error:function(a){var b=a[0];a=parseInt(a[1]); + if(c.onerror)c.onerror(new Guacamole.Status(a,b));c.disconnect()},end:function(a){a=parseInt(a[0]);var b=t[a];if(b){if(b.onend)b.onend();delete t[a]}},file:function(a){var b=parseInt(a[0]),l=a[1];a=a[2];c.onfile?(b=t[b]=new Guacamole.InputStream(c,b),c.onfile(b,l,a)):c.sendAck(b,"File transfer unsupported",256)},filesystem:function(a){var b=parseInt(a[0]);a=a[1];c.onfilesystem&&(b=w[b]=new Guacamole.Object(c,b),c.onfilesystem(b,a))},identity:function(a){a=v(parseInt(a[0]));g.setTransform(a,1,0,0, + 1,0,0)},img:function(a){var b=parseInt(a[0]),l=parseInt(a[1]),d=v(parseInt(a[2])),e=a[3],f=parseInt(a[4]);a=parseInt(a[5]);b=t[b]=new Guacamole.InputStream(c,b);g.setChannelMask(d,l);g.drawStream(d,f,a,b,e)},jpeg:function(a){var b=parseInt(a[0]),c=v(parseInt(a[1])),l=parseInt(a[2]),d=parseInt(a[3]);a=a[4];g.setChannelMask(c,b);g.draw(c,l,d,"data:image/jpeg;base64,"+a)},lfill:function(a){var b=parseInt(a[0]),c=v(parseInt(a[1]));a=v(parseInt(a[2]));g.setChannelMask(c,b);g.fillLayer(c,a)},line:function(a){var b= + v(parseInt(a[0])),c=parseInt(a[1]);a=parseInt(a[2]);g.lineTo(b,c,a)},lstroke:function(a){var b=parseInt(a[0]),c=v(parseInt(a[1]));a=v(parseInt(a[2]));g.setChannelMask(c,b);g.strokeLayer(c,a)},mouse:function(a){var b=parseInt(a[0]);a=parseInt(a[1]);g.showCursor(!0);g.moveCursor(b,a)},move:function(a){var b=parseInt(a[0]),c=parseInt(a[1]),d=parseInt(a[2]),l=parseInt(a[3]);a=parseInt(a[4]);0=a||127<=a&&159>=a?65280|a:0<=a&&255>=a?a:256<=a&&1114111>=a?16777216|a:null}function c(){var a=E();if(!a)return!1;do{var b=a;a=E()}while(null!==a);a:{for(var c in e.pressed)if(!z[c]){a=!1;break a}a= + !0}a&&e.reset();return b.defaultPrevented}var e=this,f="_GUAC_KEYBOARD_HANDLED_BY_"+Guacamole.Keyboard._nextID++;this.onkeyup=this.onkeydown=null;var k=!1,h=!1,p=!1;navigator&&navigator.platform&&(navigator.platform.match(/ipad|iphone|ipod/i)?k=!0:navigator.platform.match(/^mac/i)&&(p=h=!0));var n=function(a){var b=this;this.keyCode=a?a.which||a.keyCode:0;this.keyIdentifier=a&&a.keyIdentifier;this.key=a&&a.key;var c=a?"location"in a?a.location:"keyLocation"in a?a.keyLocation:0:0;this.location=c;this.modifiers= + a?Guacamole.Keyboard.ModifierState.fromKeyboardEvent(a):new Guacamole.Keyboard.ModifierState;this.timestamp=(new Date).getTime();this.defaultPrevented=!1;this.keysym=null;this.reliable=!1;this.getAge=function(){return(new Date).getTime()-b.timestamp}},g=function(b){n.call(this,b);this.keysym=a(this.key,this.location)||B(t[this.keyCode],this.location);this.keyupReliable=!k;if(b=this.keysym)b=this.keysym,b=!(0<=b&&255>=b||16777216===(b&4294901760));b&&(this.reliable=!0);if(b=!this.keysym){b=this.keyCode; + var c=this.keyIdentifier;if(c){var d=c.indexOf("U+");-1===d?b=!0:(c=parseInt(c.substring(d+2),16),b=b!==c||65<=b&&90>=b||48<=b&&57>=b?!0:!1)}else b=!1}b&&(this.keysym=a(this.keyIdentifier,this.location,this.modifiers.shift));this.modifiers.meta&&65511!==this.keysym&&65512!==this.keysym?this.keyupReliable=!1:65509===this.keysym&&p&&(this.keyupReliable=!1);b=!this.modifiers.ctrl&&!h;if(!this.modifiers.alt&&this.modifiers.ctrl||b&&this.modifiers.alt||this.modifiers.meta||this.modifiers.hyper)this.reliable= + !0;y[this.keyCode]=this.keysym};g.prototype=new n;var m=function(a){n.call(this,a);this.keysym=d(this.keyCode);this.reliable=!0};m.prototype=new n;var q=function(b){n.call(this,b);this.keysym=B(t[this.keyCode],this.location)||a(this.key,this.location);e.pressed[this.keysym]||(this.keysym=y[this.keyCode]||this.keysym);this.reliable=!0};q.prototype=new n;var r=[],t={8:[65288],9:[65289],12:[65291,65291,65291,65461],13:[65293],16:[65505,65505,65506],17:[65507,65507,65508],18:[65513,65513,65027],19:[65299], + 20:[65509],27:[65307],32:[32],33:[65365,65365,65365,65465],34:[65366,65366,65366,65459],35:[65367,65367,65367,65457],36:[65360,65360,65360,65463],37:[65361,65361,65361,65460],38:[65362,65362,65362,65464],39:[65363,65363,65363,65462],40:[65364,65364,65364,65458],45:[65379,65379,65379,65456],46:[65535,65535,65535,65454],91:[65511],92:[65512],93:[65383],96:[65456],97:[65457],98:[65458],99:[65459],100:[65460],101:[65461],102:[65462],103:[65463],104:[65464],105:[65465],106:[65450],107:[65451],109:[65453], + 110:[65454],111:[65455],112:[65470],113:[65471],114:[65472],115:[65473],116:[65474],117:[65475],118:[65476],119:[65477],120:[65478],121:[65479],122:[65480],123:[65481],144:[65407],145:[65300],225:[65027]},w={Again:[65382],AllCandidates:[65341],Alphanumeric:[65328],Alt:[65513,65513,65027],Attn:[64782],AltGraph:[65027],ArrowDown:[65364],ArrowLeft:[65361],ArrowRight:[65363],ArrowUp:[65362],Backspace:[65288],CapsLock:[65509],Cancel:[65385],Clear:[65291],Convert:[65313],Copy:[64789],Crsel:[64796],CrSel:[64796], + CodeInput:[65335],Compose:[65312],Control:[65507,65507,65508],ContextMenu:[65383],Delete:[65535],Down:[65364],End:[65367],Enter:[65293],EraseEof:[64774],Escape:[65307],Execute:[65378],Exsel:[64797],ExSel:[64797],F1:[65470],F2:[65471],F3:[65472],F4:[65473],F5:[65474],F6:[65475],F7:[65476],F8:[65477],F9:[65478],F10:[65479],F11:[65480],F12:[65481],F13:[65482],F14:[65483],F15:[65484],F16:[65485],F17:[65486],F18:[65487],F19:[65488],F20:[65489],F21:[65490],F22:[65491],F23:[65492],F24:[65493],Find:[65384], + GroupFirst:[65036],GroupLast:[65038],GroupNext:[65032],GroupPrevious:[65034],FullWidth:null,HalfWidth:null,HangulMode:[65329],Hankaku:[65321],HanjaMode:[65332],Help:[65386],Hiragana:[65317],HiraganaKatakana:[65319],Home:[65360],Hyper:[65517,65517,65518],Insert:[65379],JapaneseHiragana:[65317],JapaneseKatakana:[65318],JapaneseRomaji:[65316],JunjaMode:[65336],KanaMode:[65325],KanjiMode:[65313],Katakana:[65318],Left:[65361],Meta:[65511,65511,65512],ModeChange:[65406],NumLock:[65407],PageDown:[65366], + PageUp:[65365],Pause:[65299],Play:[64790],PreviousCandidate:[65342],PrintScreen:[65377],Redo:[65382],Right:[65363],RomanCharacters:null,Scroll:[65300],Select:[65376],Separator:[65452],Shift:[65505,65505,65506],SingleCandidate:[65340],Super:[65515,65515,65516],Tab:[65289],UIKeyInputDownArrow:[65364],UIKeyInputEscape:[65307],UIKeyInputLeftArrow:[65361],UIKeyInputRightArrow:[65363],UIKeyInputUpArrow:[65362],Up:[65362],Undo:[65381],Win:[65511,65511,65512],Zenkaku:[65320],ZenkakuHankaku:[65322]},u={65027:!0, + 65505:!0,65506:!0,65507:!0,65508:!0,65509:!0,65511:!0,65512:!0,65513:!0,65514:!0,65515:!0,65516:!0};this.modifiers=new Guacamole.Keyboard.ModifierState;this.pressed={};var z={},v={},y={},C=null,A=null,B=function(a,b){return a?a[b]||a[0]:null};this.press=function(a){if(null!==a){if(!e.pressed[a]&&(e.pressed[a]=!0,e.onkeydown)){var b=e.onkeydown(a);v[a]=b;window.clearTimeout(C);window.clearInterval(A);u[a]||(C=window.setTimeout(function(){A=window.setInterval(function(){e.onkeyup(a);e.onkeydown(a)}, + 50)},500));return b}return v[a]||!1}};this.release=function(a){if(e.pressed[a]&&(delete e.pressed[a],delete z[a],window.clearTimeout(C),window.clearInterval(A),null!==a&&e.onkeyup))e.onkeyup(a)};this.type=function(a){for(var b=0;b=b||97<=b&&122>=b)&&(255>=b||16777216===(b&4278190080))&&(e.release(65507),e.release(65508),e.release(65513),e.release(65514));var d=!e.press(b);y[a.keyCode]=b;a.keyupReliable||e.release(b);for(b=0;bc.width?a:c.width,b>c.height?b:c.height)}var c=this,e=document.createElement("canvas"),f=e.getContext("2d");f.save();var k=!0,h=!0,p=0,n={1:"destination-in",2:"destination-out",4:"source-in",6:"source-atop",8:"source-out",9:"destination-atop",10:"xor",11:"destination-over",12:"copy",14:"source-over",15:"lighter"},g=function(a,b){a=a||0;b=b||0;var d=64*Math.ceil(a/64),g=64*Math.ceil(b/64);if(e.width!==d||e.height!==g){var m=null; + k||0===e.width||0===e.height||(m=document.createElement("canvas"),m.width=Math.min(c.width,a),m.height=Math.min(c.height,b),m.getContext("2d").drawImage(e,0,0,m.width,m.height,0,0,m.width,m.height));var h=f.globalCompositeOperation;e.width=d;e.height=g;m&&f.drawImage(m,0,0,m.width,m.height,0,0,m.width,m.height);f.globalCompositeOperation=h;p=0;f.save()}else c.reset();c.width=a;c.height=b};this.autosize=!1;this.width=b;this.height=a;this.getCanvas=function(){return e};this.toCanvas=function(){var a= + document.createElement("canvas");a.width=c.width;a.height=c.height;a.getContext("2d").drawImage(c.getCanvas(),0,0);return a};this.resize=function(a,b){a===c.width&&b===c.height||g(a,b)};this.drawImage=function(a,b,e){c.autosize&&d(a,b,e.width,e.height);f.drawImage(e,a,b);k=!1};this.transfer=function(a,b,e,g,h,p,n,v){var m=a.getCanvas();if(!(b>=m.width||e>=m.height)&&(b+g>m.width&&(g=m.width-b),e+h>m.height&&(h=m.height-e),0!==g&&0!==h)){c.autosize&&d(p,n,g,h);a=a.getCanvas().getContext("2d").getImageData(b, + e,g,h);b=f.getImageData(p,n,g,h);for(e=0;e=m.width||e>=m.height||(b+g>m.width&&(g=m.width-b),e+h>m.height&&(h=m.height-e),0!==g&&0!==h&&(c.autosize&&d(p,n,g,h),a=a.getCanvas().getContext("2d").getImageData(b, + e,g,h),f.putImageData(a,p,n),k=!1))};this.copy=function(a,b,e,g,h,p,n){a=a.getCanvas();b>=a.width||e>=a.height||(b+g>a.width&&(g=a.width-b),e+h>a.height&&(h=a.height-e),0!==g&&0!==h&&(c.autosize&&d(p,n,g,h),f.drawImage(a,b,e,g,h,p,n,g,h),k=!1))};this.moveTo=function(a,b){h&&(f.beginPath(),h=!1);c.autosize&&d(a,b,0,0);f.moveTo(a,b)};this.lineTo=function(a,b){h&&(f.beginPath(),h=!1);c.autosize&&d(a,b,0,0);f.lineTo(a,b)};this.arc=function(a,b,e,g,k,p){h&&(f.beginPath(),h=!1);c.autosize&&d(a,b,0,0);f.arc(a, + b,e,g,k,p)};this.curveTo=function(a,b,e,g,k,p){h&&(f.beginPath(),h=!1);c.autosize&&d(k,p,0,0);f.bezierCurveTo(a,b,e,g,k,p)};this.close=function(){f.closePath();h=!0};this.rect=function(a,b,e,g){h&&(f.beginPath(),h=!1);c.autosize&&d(a,b,e,g);f.rect(a,b,e,g)};this.clip=function(){f.clip();h=!0};this.strokeColor=function(a,b,c,d,e,g,p){f.lineCap=a;f.lineJoin=b;f.lineWidth=c;f.strokeStyle="rgba("+d+","+e+","+g+","+p/255+")";f.stroke();k=!1;h=!0};this.fillColor=function(a,b,c,d){f.fillStyle="rgba("+a+ + ","+b+","+c+","+d/255+")";f.fill();k=!1;h=!0};this.strokeLayer=function(a,b,c,d){f.lineCap=a;f.lineJoin=b;f.lineWidth=c;f.strokeStyle=f.createPattern(d.getCanvas(),"repeat");f.stroke();k=!1;h=!0};this.fillLayer=function(a){f.fillStyle=f.createPattern(a.getCanvas(),"repeat");f.fill();k=!1;h=!0};this.push=function(){f.save();p++};this.pop=function(){0=c.scrollThreshold){do c.click(Guacamole.Mouse.State.Buttons.DOWN),k-=c.scrollThreshold;while(k>=c.scrollThreshold);k= + 0}Guacamole.Event.DOMEvent.cancelEvent(a)}Guacamole.Mouse.Event.Target.call(this);var c=this;this.touchMouseThreshold=3;this.scrollThreshold=53;this.PIXELS_PER_LINE=18;this.PIXELS_PER_PAGE=16*this.PIXELS_PER_LINE;var e=[Guacamole.Mouse.State.Buttons.LEFT,Guacamole.Mouse.State.Buttons.MIDDLE,Guacamole.Mouse.State.Buttons.RIGHT],f=0,k=0;b.addEventListener("contextmenu",function(a){Guacamole.Event.DOMEvent.cancelEvent(a)},!1);b.addEventListener("mousemove",function(a){f?(Guacamole.Event.DOMEvent.cancelEvent(a), + f--):c.move(Guacamole.Position.fromClientPosition(b,a.clientX,a.clientY),a)},!1);b.addEventListener("mousedown",function(a){if(f)Guacamole.Event.DOMEvent.cancelEvent(a);else{var b=e[a.button];b&&c.press(b,a)}},!1);b.addEventListener("mouseup",function(a){if(f)Guacamole.Event.DOMEvent.cancelEvent(a);else{var b=e[a.button];b&&c.release(b,a)}},!1);b.addEventListener("mouseout",function(a){a||(a=window.event);for(var d=a.relatedTarget||a.toElement;d;){if(d===b)return;d=d.parentNode}c.reset(a);c.out(a)}, + !1);b.addEventListener("selectstart",function(a){Guacamole.Event.DOMEvent.cancelEvent(a)},!1);b.addEventListener("touchmove",a,!1);b.addEventListener("touchstart",a,!1);b.addEventListener("touchend",a,!1);b.addEventListener("DOMMouseScroll",d,!1);b.addEventListener("mousewheel",d,!1);b.addEventListener("wheel",d,!1);var h=function(){var a=document.createElement("div");if(!("cursor"in a.style))return!1;try{a.style.cursor="url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEX///+nxBvIAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg\x3d\x3d) 0 0, auto"}catch(n){return!1}return/\burl\([^()]*\)\s+0\s+0\b/.test(a.style.cursor|| + "")}();this.setCursor=function(a,c,d){return h?(a=a.toDataURL("image/png"),b.style.cursor="url("+a+") "+c+" "+d+", auto",!0):!1}};Guacamole.Mouse.State=function(b){var a=function(a,b,e,f,k,h,p){return{x:a,y:b,left:e,middle:f,right:k,up:h,down:p}};b=1=a.scrollThreshold&&(a.click(0=e.clickMoveThreshold}function d(a){a=a.touches[0];f=!0;k=a.clientX;h=a.clientY}function c(){window.clearTimeout(p);window.clearTimeout(n);f=!1}Guacamole.Mouse.Event.Target.call(this);var e=this,f=!1,k=null,h=null,p=null,n=null;this.scrollThreshold=20*(window.devicePixelRatio||1);this.clickTimingThreshold=250;this.clickMoveThreshold=16*(window.devicePixelRatio|| + 1);this.longPressThreshold=500;b.addEventListener("touchend",function(d){if(f)if(0!==d.touches.length||1!==d.changedTouches.length)c();else if(window.clearTimeout(n),e.release(Guacamole.Mouse.State.Buttons.LEFT,d),!a(d)&&(d.preventDefault(),!e.currentState.left)){var g=d.changedTouches[0];e.move(Guacamole.Position.fromClientPosition(b,g.clientX,g.clientY));e.press(Guacamole.Mouse.State.Buttons.LEFT,d);p=window.setTimeout(function(){e.release(Guacamole.Mouse.State.Buttons.LEFT,d);c()},e.clickTimingThreshold)}}, + !1);b.addEventListener("touchstart",function(a){1!==a.touches.length?c():(a.preventDefault(),d(a),window.clearTimeout(p),n=window.setTimeout(function(){var d=a.touches[0];e.move(Guacamole.Position.fromClientPosition(b,d.clientX,d.clientY));e.click(Guacamole.Mouse.State.Buttons.RIGHT,a);c()},e.longPressThreshold))},!1);b.addEventListener("touchmove",function(d){if(f)if(a(d)&&window.clearTimeout(n),1!==d.touches.length)c();else if(e.currentState.left){d.preventDefault();var g=d.touches[0];e.move(Guacamole.Position.fromClientPosition(b, + g.clientX,g.clientY),d)}},!1)};Guacamole=Guacamole=Guacamole||{};Guacamole.Object=function(b,a){var d=this,c={};this.index=a;this.onbody=function(a,b,d){var e=c[d];if(e){var f=e.shift();0===e.length&&delete c[d];d=f}else d=null;d&&d(a,b)};this.onundefine=null;this.requestInputStream=function(a,f){if(f){var e=c[a];e||(e=[],c[a]=e);e.push(f)}b.requestObjectInputStream(d.index,a)};this.createOutputStream=function(a,c){return b.createObjectOutputStream(d.index,a,c)}};Guacamole.Object.ROOT_STREAM="/"; +Guacamole.Object.STREAM_INDEX_MIMETYPE="application/vnd.glyptodon.guacamole.stream-index+json";Guacamole=Guacamole||{}; +Guacamole.OnScreenKeyboard=function(b){var a=this,d={},c={},e=[],f=function(a,b){a.classList?a.classList.add(b):a.className+=" "+b},k=function(a,b){a.classList?a.classList.remove(b):a.className=a.className.replace(/([^ ]+)[ ]*/g,function(a,c){return c===b?"":a})},h=0,p=function(a,b,c,d){this.width=b;this.height=c;this.scale=function(e){a.style.width=b*e+"px";a.style.height=c*e+"px";d&&(a.style.lineHeight=c*e+"px",a.style.fontSize=e+"px")}},n=function(b){b=a.keys[b];if(!b)return null;for(var c=b.length- + 1;0<=c;c--){var e=b[c];a:{var f=e.requires;for(var g=0;g=a?a:256<=a&&1114111>=a?16777216|a:null):a=null);this.keysym=a;this.modifier=b.modifier;this.requires=b.requires||[]};Guacamole=Guacamole||{};Guacamole.OutputStream=function(b,a){var d=this;this.index=a;this.onack=null;this.sendBlob=function(a){b.sendBlob(d.index,a)};this.sendEnd=function(){b.endStream(d.index)}}; +Guacamole=Guacamole||{}; +Guacamole.Parser=function(){var b=this,a="",d=[],c=-1,e=0,f=0;this.receive=function(k,h){h?a=k:(4096=e&&(a=a.substring(e),c-=e,e=0),a=a.length?a+k:k);for(;c=e){k=Guacamole.Parser.codePointCount(a,e,c);if(k=b.size)d&&d();else{var c=b.slice(f,f+262144);f+=c.size;g.readAsText(c)}}};g.onload=c; + c()}},u=function(a){a=a.length;for(var b=a+3;10<=a;)b++,a=Math.floor(a/10);return b};k.connect();k.getDisplay().showCursor(!1);var z=function(b,d){q+=u(b);for(var f=0;fa?F(a,e-1,d):d>f&&el)a.onseek(B(c[h].timestamp),h-l,b-l);f.aborted||(hd.code||255=b){var c=0;var d=1}else if(2047>=b)c=192,d=2;else if(65535>=b)c=224,d=3;else if(2097151>=b)c=240,d=4;else{a(65533);return}var e=d;if(k+e>=f.length){var h=new Uint8Array(2*(k+e));h.set(f);f=h}k+=e;e=k-1;for(h=1;h>=6;f[e]=c|b}function d(b){for(var c=0;ca.readyState)){try{var f=a.status}catch(F){f=200}d||200!==f||(d=p());if(3===a.readyState||4===a.readyState)if(B(),1===r&&(3!==a.readyState||c?4===a.readyState&&c&&clearInterval(c):c=setInterval(b,30)),0===a.status)n.disconnect();else if(200!==a.status)k(a);else{try{var h=a.responseText}catch(F){return}try{g.receive(h,!0)}catch(F){e(new Guacamole.Status(Guacamole.Status.Code.SERVER_ERROR, + F.message))}}}}var c=null,d=null,f=0,g=new Guacamole.Parser;g.oninstruction=function I(b,e){if(b===Guacamole.Tunnel.INTERNAL_DATA_OPCODE&&0===e.length)g=new Guacamole.Parser,g.oninstruction=I,c&&clearInterval(c),a.onreadystatechange=null,a.abort(),d&&h(d);else if(b!==Guacamole.Tunnel.INTERNAL_DATA_OPCODE&&n.oninstruction)n.oninstruction(b,e)};a.onreadystatechange=1===r?function(){3===a.readyState&&(f++,2<=f&&(r=0,a.onreadystatechange=b));b()}:b;b()}function p(){var a=new XMLHttpRequest;a.open("GET", + m+n.uuid+":"+l++);a.setRequestHeader("Guacamole-Tunnel-Token",A);a.withCredentials=u;c(a,C);a.send(null);return a}var n=this,g=b+"?connect",m=b+"?read:",q=b+"?write:",r=1,t=!1,w="",u=!!a,z=null,v=null,y=null,C=d||{},A=null,B=function(){window.clearTimeout(z);window.clearTimeout(v);n.state===Guacamole.Tunnel.State.UNSTABLE&&n.setState(Guacamole.Tunnel.State.OPEN);z=window.setTimeout(function(){e(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_TIMEOUT,"Server timeout."))},n.receiveTimeout);v=window.setTimeout(function(){n.setState(Guacamole.Tunnel.State.UNSTABLE)}, + n.unstableThreshold)};this.sendMessage=function(){n.isConnected()&&arguments.length&&(w+=Guacamole.Parser.toInstruction(arguments),t||f())};var l=0;this.connect=function(a){B();n.setState(Guacamole.Tunnel.State.CONNECTING);var b=new XMLHttpRequest;b.onreadystatechange=function(){4===b.readyState&&(200!==b.status?k(b):(B(),n.setUUID(b.responseText),(A=b.getResponseHeader("Guacamole-Tunnel-Token"))?(n.setState(Guacamole.Tunnel.State.OPEN),y=setInterval(function(){n.sendMessage("nop")},500),h(p())): + e(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_NOT_FOUND))))};b.open("POST",g,!0);b.withCredentials=u;c(b,C);b.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset\x3dUTF-8");b.send(a)};this.disconnect=function(){e(new Guacamole.Status(Guacamole.Status.Code.SUCCESS,"Manually closed."))}};Guacamole.HTTPTunnel.prototype=new Guacamole.Tunnel; +Guacamole.WebSocketTunnel=function(b){function a(a){window.clearTimeout(f);window.clearTimeout(k);window.clearTimeout(h);if(d.state!==Guacamole.Tunnel.State.CLOSED){if(a.code!==Guacamole.Status.Code.SUCCESS&&d.onerror)d.onerror(a);d.setState(Guacamole.Tunnel.State.CLOSED);e.close()}}var d=this,c=null,e=null,f=null,k=null,h=null,p={"http:":"ws:","https:":"wss:"},n=0;if("ws:"!==b.substring(0,3)&&"wss:"!==b.substring(0,4))if(p=p[window.location.protocol],"/"===b.substring(0,1))b=p+"//"+window.location.host+ + b;else{var g=window.location.pathname.lastIndexOf("/");g=window.location.pathname.substring(0,g+1);b=p+"//"+window.location.host+g+b}var m=function(){var a=(new Date).getTime();d.sendMessage(Guacamole.Tunnel.INTERNAL_DATA_OPCODE,"ping",a);n=a},q=function(){window.clearTimeout(f);window.clearTimeout(k);window.clearTimeout(h);d.state===Guacamole.Tunnel.State.UNSTABLE&&d.setState(Guacamole.Tunnel.State.OPEN);f=window.setTimeout(function(){a(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_TIMEOUT, + "Server timeout."))},d.receiveTimeout);k=window.setTimeout(function(){d.setState(Guacamole.Tunnel.State.UNSTABLE)},d.unstableThreshold);var b=(new Date).getTime();b=Math.max(n+500-b,0);0", "requires" : [ "shift" ] }, + { "title" : "|", "requires" : [ "alt-gr" ] } + ], + "," : [ + { "title" : ",", "requires" : [ ] }, + { "title" : ";", "requires" : [ "shift" ] } + ], + "." : [ + { "title" : ".", "requires" : [ ] }, + { "title" : ":", "requires" : [ "shift" ] } + ], + "-" : [ + { "title" : "-", "requires" : [ ] }, + { "title" : "_", "requires" : [ "shift" ] } + ], + + "q" : [ + { "title" : "q", "requires" : [ ] }, + { "title" : "Q", "requires" : [ "caps" ] }, + { "title" : "Q", "requires" : [ "shift" ] }, + { "title" : "q", "requires" : [ "caps", "shift" ] }, + { "title" : "@", "requires" : [ "alt-gr" ] } + ], + "w" : [ + { "title" : "w", "requires" : [ ] }, + { "title" : "W", "requires" : [ "caps" ] }, + { "title" : "W", "requires" : [ "shift" ] }, + { "title" : "w", "requires" : [ "caps", "shift" ] } + ], + "e" : [ + { "title" : "e", "requires" : [ ] }, + { "title" : "E", "requires" : [ "caps" ] }, + { "title" : "E", "requires" : [ "shift" ] }, + { "title" : "e", "requires" : [ "caps", "shift" ] }, + { "title" : "€", "requires" : [ "alt-gr" ] } + ], + "r" : [ + { "title" : "r", "requires" : [ ] }, + { "title" : "R", "requires" : [ "caps" ] }, + { "title" : "R", "requires" : [ "shift" ] }, + { "title" : "r", "requires" : [ "caps", "shift" ] } + ], + "t" : [ + { "title" : "t", "requires" : [ ] }, + { "title" : "T", "requires" : [ "caps" ] }, + { "title" : "T", "requires" : [ "shift" ] }, + { "title" : "t", "requires" : [ "caps", "shift" ] } + ], + "z" : [ + { "title" : "z", "requires" : [ ] }, + { "title" : "Z", "requires" : [ "caps" ] }, + { "title" : "Z", "requires" : [ "shift" ] }, + { "title" : "z", "requires" : [ "caps", "shift" ] } + ], + "u" : [ + { "title" : "u", "requires" : [ ] }, + { "title" : "U", "requires" : [ "caps" ] }, + { "title" : "U", "requires" : [ "shift" ] }, + { "title" : "u", "requires" : [ "caps", "shift" ] } + ], + "i" : [ + { "title" : "i", "requires" : [ ] }, + { "title" : "I", "requires" : [ "caps" ] }, + { "title" : "I", "requires" : [ "shift" ] }, + { "title" : "i", "requires" : [ "caps", "shift" ] } + ], + "o" : [ + { "title" : "o", "requires" : [ ] }, + { "title" : "O", "requires" : [ "caps" ] }, + { "title" : "O", "requires" : [ "shift" ] }, + { "title" : "o", "requires" : [ "caps", "shift" ] } + ], + "p" : [ + { "title" : "p", "requires" : [ ] }, + { "title" : "P", "requires" : [ "caps" ] }, + { "title" : "P", "requires" : [ "shift" ] }, + { "title" : "p", "requires" : [ "caps", "shift" ] } + ], + "ü" : [ + { "title" : "ü", "requires" : [ ] }, + { "title" : "Ü", "requires" : [ "caps" ] }, + { "title" : "Ü", "requires" : [ "shift" ] }, + { "title" : "ü", "requires" : [ "caps", "shift" ] } + ], + "a" : [ + { "title" : "a", "requires" : [ ] }, + { "title" : "A", "requires" : [ "caps" ] }, + { "title" : "A", "requires" : [ "shift" ] }, + { "title" : "a", "requires" : [ "caps", "shift" ] } + ], + "s" : [ + { "title" : "s", "requires" : [ ] }, + { "title" : "S", "requires" : [ "caps" ] }, + { "title" : "S", "requires" : [ "shift" ] }, + { "title" : "s", "requires" : [ "caps", "shift" ] } + ], + "d" : [ + { "title" : "d", "requires" : [ ] }, + { "title" : "D", "requires" : [ "caps" ] }, + { "title" : "D", "requires" : [ "shift" ] }, + { "title" : "d", "requires" : [ "caps", "shift" ] } + ], + "f" : [ + { "title" : "f", "requires" : [ ] }, + { "title" : "F", "requires" : [ "caps" ] }, + { "title" : "F", "requires" : [ "shift" ] }, + { "title" : "f", "requires" : [ "caps", "shift" ] } + ], + "g" : [ + { "title" : "g", "requires" : [ ] }, + { "title" : "G", "requires" : [ "caps" ] }, + { "title" : "G", "requires" : [ "shift" ] }, + { "title" : "g", "requires" : [ "caps", "shift" ] } + ], + "h" : [ + { "title" : "h", "requires" : [ ] }, + { "title" : "H", "requires" : [ "caps" ] }, + { "title" : "H", "requires" : [ "shift" ] }, + { "title" : "h", "requires" : [ "caps", "shift" ] } + ], + "j" : [ + { "title" : "j", "requires" : [ ] }, + { "title" : "J", "requires" : [ "caps" ] }, + { "title" : "J", "requires" : [ "shift" ] }, + { "title" : "j", "requires" : [ "caps", "shift" ] } + ], + "k" : [ + { "title" : "k", "requires" : [ ] }, + { "title" : "K", "requires" : [ "caps" ] }, + { "title" : "K", "requires" : [ "shift" ] }, + { "title" : "k", "requires" : [ "caps", "shift" ] } + ], + "l" : [ + { "title" : "l", "requires" : [ ] }, + { "title" : "L", "requires" : [ "caps" ] }, + { "title" : "L", "requires" : [ "shift" ] }, + { "title" : "l", "requires" : [ "caps", "shift" ] } + ], + "ö" : [ + { "title" : "ö", "requires" : [ ] }, + { "title" : "Ö", "requires" : [ "caps" ] }, + { "title" : "Ö", "requires" : [ "shift" ] }, + { "title" : "ö", "requires" : [ "caps", "shift" ] } + ], + "ä" : [ + { "title" : "ä", "requires" : [ ] }, + { "title" : "Ä", "requires" : [ "caps" ] }, + { "title" : "Ä", "requires" : [ "shift" ] }, + { "title" : "ä", "requires" : [ "caps", "shift" ] } + ], + "y" : [ + { "title" : "y", "requires" : [ ] }, + { "title" : "Y", "requires" : [ "caps" ] }, + { "title" : "Y", "requires" : [ "shift" ] }, + { "title" : "y", "requires" : [ "caps", "shift" ] } + ], + "x" : [ + { "title" : "x", "requires" : [ ] }, + { "title" : "X", "requires" : [ "caps" ] }, + { "title" : "X", "requires" : [ "shift" ] }, + { "title" : "x", "requires" : [ "caps", "shift" ] } + ], + "c" : [ + { "title" : "c", "requires" : [ ] }, + { "title" : "C", "requires" : [ "caps" ] }, + { "title" : "C", "requires" : [ "shift" ] }, + { "title" : "c", "requires" : [ "caps", "shift" ] } + ], + "v" : [ + { "title" : "v", "requires" : [ ] }, + { "title" : "V", "requires" : [ "caps" ] }, + { "title" : "V", "requires" : [ "shift" ] }, + { "title" : "v", "requires" : [ "caps", "shift" ] } + ], + "b" : [ + { "title" : "b", "requires" : [ ] }, + { "title" : "B", "requires" : [ "caps" ] }, + { "title" : "B", "requires" : [ "shift" ] }, + { "title" : "b", "requires" : [ "caps", "shift" ] } + ], + "n" : [ + { "title" : "n", "requires" : [ ] }, + { "title" : "N", "requires" : [ "caps" ] }, + { "title" : "N", "requires" : [ "shift" ] }, + { "title" : "n", "requires" : [ "caps", "shift" ] } + ], + "m" : [ + { "title" : "m", "requires" : [ ] }, + { "title" : "M", "requires" : [ "caps" ] }, + { "title" : "M", "requires" : [ "shift" ] }, + { "title" : "m", "requires" : [ "caps", "shift" ] }, + { "title" : "µ", "requires" : [ "alt-gr" ] } + ] + + }, + + "layout" : [ + + [ "Esc", 0.7, "F1", "F2", "F3", "F4", + 0.7, "F5", "F6", "F7", "F8", + 0.7, "F9", "F10", "F11", "F12" ], + + [ 0.1 ], + + { + "main" : { + "alpha" : [ + + [ "^", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", "´", "Back" ], + [ "Tab", "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", "+", 1, 0.6 ], + [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä", "#", "Enter" ], + [ "LShift", "<", "y", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], + [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] + + ], + + "movement" : [ + [ "Ins", "Home", "PgUp" ], + [ "Del", "End", "PgDn" ], + [ 1 ], + [ "Up" ], + [ "Left", "Down", "Right" ] + ] + } + } + + ], + + "keyWidths" : { + + "Back" : 2, + "Tab" : 1.5, + "\\" : 1.5, + "Caps" : 1.75, + "Enter" : 1.25, + "LShift" : 2, + "RShift" : 2.1, + + "LCtrl" : 1.6, + "Meta" : 1.6, + "LAlt" : 1.6, + "Space" : 6.1, + "AltGr" : 1.6, + "Menu" : 1.6, + "RCtrl" : 1.6, + + "Ins" : 1.6, + "Home" : 1.6, + "PgUp" : 1.6, + "Del" : 1.6, + "End" : 1.6, + "PgDn" : 1.6 + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/en-us-qwerty.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/en-us-qwerty.json new file mode 100644 index 0000000000..fa9a6fe680 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/en-us-qwerty.json @@ -0,0 +1,399 @@ +{ + + "language" : "en_US", + "type" : "qwerty", + "width" : 22, + + "keys" : { + + "Back" : 65288, + "Tab" : 65289, + "Enter" : 65293, + "Esc" : 65307, + "Home" : 65360, + "PgUp" : 65365, + "PgDn" : 65366, + "End" : 65367, + "Ins" : 65379, + "F1" : 65470, + "F2" : 65471, + "F3" : 65472, + "F4" : 65473, + "F5" : 65474, + "F6" : 65475, + "F7" : 65476, + "F8" : 65477, + "F9" : 65478, + "F10" : 65479, + "F11" : 65480, + "F12" : 65481, + "Del" : 65535, + + "Space" : " ", + + "Left" : [{ + "title" : "←", + "keysym" : 65361 + }], + "Up" : [{ + "title" : "↑", + "keysym" : 65362 + }], + "Right" : [{ + "title" : "→", + "keysym" : 65363 + }], + "Down" : [{ + "title" : "↓", + "keysym" : 65364 + }], + + "Menu" : [{ + "title" : "Menu", + "keysym" : 65383 + }], + "LShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65505 + }], + "RShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65506 + }], + "LCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65507 + }], + "RCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65508 + }], + "Caps" : [{ + "title" : "Caps", + "modifier" : "caps", + "keysym" : 65509 + }], + "LAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65513 + }], + "RAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65514 + }], + "Meta" : [{ + "title" : "Meta", + "modifier" : "meta", + "keysym" : 65511 + }], + + "`" : [ + { "title" : "`", "requires" : [ ] }, + { "title" : "~", "requires" : [ "shift" ] } + ], + "1" : [ + { "title" : "1", "requires" : [ ] }, + { "title" : "!", "requires" : [ "shift" ] } + ], + "2" : [ + { "title" : "2", "requires" : [ ] }, + { "title" : "@", "requires" : [ "shift" ] } + ], + "3" : [ + { "title" : "3", "requires" : [ ] }, + { "title" : "#", "requires" : [ "shift" ] } + ], + "4" : [ + { "title" : "4", "requires" : [ ] }, + { "title" : "$", "requires" : [ "shift" ] } + ], + "5" : [ + { "title" : "5", "requires" : [ ] }, + { "title" : "%", "requires" : [ "shift" ] } + ], + "6" : [ + { "title" : "6", "requires" : [ ] }, + { "title" : "^", "requires" : [ "shift" ] } + ], + "7" : [ + { "title" : "7", "requires" : [ ] }, + { "title" : "&", "requires" : [ "shift" ] } + ], + "8" : [ + { "title" : "8", "requires" : [ ] }, + { "title" : "*", "requires" : [ "shift" ] } + ], + "9" : [ + { "title" : "9", "requires" : [ ] }, + { "title" : "(", "requires" : [ "shift" ] } + ], + "0" : [ + { "title" : "0", "requires" : [ ] }, + { "title" : ")", "requires" : [ "shift" ] } + ], + "-" : [ + { "title" : "-", "requires" : [ ] }, + { "title" : "_", "requires" : [ "shift" ] } + ], + "=" : [ + { "title" : "=", "requires" : [ ] }, + { "title" : "+", "requires" : [ "shift" ] } + ], + "," : [ + { "title" : ",", "requires" : [ ] }, + { "title" : "<", "requires" : [ "shift" ] } + ], + "." : [ + { "title" : ".", "requires" : [ ] }, + { "title" : ">", "requires" : [ "shift" ] } + ], + "/" : [ + { "title" : "/", "requires" : [ ] }, + { "title" : "?", "requires" : [ "shift" ] } + ], + "[" : [ + { "title" : "[", "requires" : [ ] }, + { "title" : "{", "requires" : [ "shift" ] } + ], + "]" : [ + { "title" : "]", "requires" : [ ] }, + { "title" : "}", "requires" : [ "shift" ] } + ], + "\\" : [ + { "title" : "\\", "requires" : [ ] }, + { "title" : "|", "requires" : [ "shift" ] } + ], + ";" : [ + { "title" : ";", "requires" : [ ] }, + { "title" : ":", "requires" : [ "shift" ] } + ], + "'" : [ + { "title" : "'", "requires" : [ ] }, + { "title" : "\"", "requires" : [ "shift" ] } + ], + + "q" : [ + { "title" : "q", "requires" : [ ] }, + { "title" : "Q", "requires" : [ "caps" ] }, + { "title" : "Q", "requires" : [ "shift" ] }, + { "title" : "q", "requires" : [ "caps", "shift" ] } + ], + "w" : [ + { "title" : "w", "requires" : [ ] }, + { "title" : "W", "requires" : [ "caps" ] }, + { "title" : "W", "requires" : [ "shift" ] }, + { "title" : "w", "requires" : [ "caps", "shift" ] } + ], + "e" : [ + { "title" : "e", "requires" : [ ] }, + { "title" : "E", "requires" : [ "caps" ] }, + { "title" : "E", "requires" : [ "shift" ] }, + { "title" : "e", "requires" : [ "caps", "shift" ] } + ], + "r" : [ + { "title" : "r", "requires" : [ ] }, + { "title" : "R", "requires" : [ "caps" ] }, + { "title" : "R", "requires" : [ "shift" ] }, + { "title" : "r", "requires" : [ "caps", "shift" ] } + ], + "t" : [ + { "title" : "t", "requires" : [ ] }, + { "title" : "T", "requires" : [ "caps" ] }, + { "title" : "T", "requires" : [ "shift" ] }, + { "title" : "t", "requires" : [ "caps", "shift" ] } + ], + "y" : [ + { "title" : "y", "requires" : [ ] }, + { "title" : "Y", "requires" : [ "caps" ] }, + { "title" : "Y", "requires" : [ "shift" ] }, + { "title" : "y", "requires" : [ "caps", "shift" ] } + ], + "u" : [ + { "title" : "u", "requires" : [ ] }, + { "title" : "U", "requires" : [ "caps" ] }, + { "title" : "U", "requires" : [ "shift" ] }, + { "title" : "u", "requires" : [ "caps", "shift" ] } + ], + "i" : [ + { "title" : "i", "requires" : [ ] }, + { "title" : "I", "requires" : [ "caps" ] }, + { "title" : "I", "requires" : [ "shift" ] }, + { "title" : "i", "requires" : [ "caps", "shift" ] } + ], + "o" : [ + { "title" : "o", "requires" : [ ] }, + { "title" : "O", "requires" : [ "caps" ] }, + { "title" : "O", "requires" : [ "shift" ] }, + { "title" : "o", "requires" : [ "caps", "shift" ] } + ], + "p" : [ + { "title" : "p", "requires" : [ ] }, + { "title" : "P", "requires" : [ "caps" ] }, + { "title" : "P", "requires" : [ "shift" ] }, + { "title" : "p", "requires" : [ "caps", "shift" ] } + ], + "a" : [ + { "title" : "a", "requires" : [ ] }, + { "title" : "A", "requires" : [ "caps" ] }, + { "title" : "A", "requires" : [ "shift" ] }, + { "title" : "a", "requires" : [ "caps", "shift" ] } + ], + "s" : [ + { "title" : "s", "requires" : [ ] }, + { "title" : "S", "requires" : [ "caps" ] }, + { "title" : "S", "requires" : [ "shift" ] }, + { "title" : "s", "requires" : [ "caps", "shift" ] } + ], + "d" : [ + { "title" : "d", "requires" : [ ] }, + { "title" : "D", "requires" : [ "caps" ] }, + { "title" : "D", "requires" : [ "shift" ] }, + { "title" : "d", "requires" : [ "caps", "shift" ] } + ], + "f" : [ + { "title" : "f", "requires" : [ ] }, + { "title" : "F", "requires" : [ "caps" ] }, + { "title" : "F", "requires" : [ "shift" ] }, + { "title" : "f", "requires" : [ "caps", "shift" ] } + ], + "g" : [ + { "title" : "g", "requires" : [ ] }, + { "title" : "G", "requires" : [ "caps" ] }, + { "title" : "G", "requires" : [ "shift" ] }, + { "title" : "g", "requires" : [ "caps", "shift" ] } + ], + "h" : [ + { "title" : "h", "requires" : [ ] }, + { "title" : "H", "requires" : [ "caps" ] }, + { "title" : "H", "requires" : [ "shift" ] }, + { "title" : "h", "requires" : [ "caps", "shift" ] } + ], + "j" : [ + { "title" : "j", "requires" : [ ] }, + { "title" : "J", "requires" : [ "caps" ] }, + { "title" : "J", "requires" : [ "shift" ] }, + { "title" : "j", "requires" : [ "caps", "shift" ] } + ], + "k" : [ + { "title" : "k", "requires" : [ ] }, + { "title" : "K", "requires" : [ "caps" ] }, + { "title" : "K", "requires" : [ "shift" ] }, + { "title" : "k", "requires" : [ "caps", "shift" ] } + ], + "l" : [ + { "title" : "l", "requires" : [ ] }, + { "title" : "L", "requires" : [ "caps" ] }, + { "title" : "L", "requires" : [ "shift" ] }, + { "title" : "l", "requires" : [ "caps", "shift" ] } + ], + "z" : [ + { "title" : "z", "requires" : [ ] }, + { "title" : "Z", "requires" : [ "caps" ] }, + { "title" : "Z", "requires" : [ "shift" ] }, + { "title" : "z", "requires" : [ "caps", "shift" ] } + ], + "x" : [ + { "title" : "x", "requires" : [ ] }, + { "title" : "X", "requires" : [ "caps" ] }, + { "title" : "X", "requires" : [ "shift" ] }, + { "title" : "x", "requires" : [ "caps", "shift" ] } + ], + "c" : [ + { "title" : "c", "requires" : [ ] }, + { "title" : "C", "requires" : [ "caps" ] }, + { "title" : "C", "requires" : [ "shift" ] }, + { "title" : "c", "requires" : [ "caps", "shift" ] } + ], + "v" : [ + { "title" : "v", "requires" : [ ] }, + { "title" : "V", "requires" : [ "caps" ] }, + { "title" : "V", "requires" : [ "shift" ] }, + { "title" : "v", "requires" : [ "caps", "shift" ] } + ], + "b" : [ + { "title" : "b", "requires" : [ ] }, + { "title" : "B", "requires" : [ "caps" ] }, + { "title" : "B", "requires" : [ "shift" ] }, + { "title" : "b", "requires" : [ "caps", "shift" ] } + ], + "n" : [ + { "title" : "n", "requires" : [ ] }, + { "title" : "N", "requires" : [ "caps" ] }, + { "title" : "N", "requires" : [ "shift" ] }, + { "title" : "n", "requires" : [ "caps", "shift" ] } + ], + "m" : [ + { "title" : "m", "requires" : [ ] }, + { "title" : "M", "requires" : [ "caps" ] }, + { "title" : "M", "requires" : [ "shift" ] }, + { "title" : "m", "requires" : [ "caps", "shift" ] } + ] + + }, + + "layout" : [ + + [ "Esc", 0.7, "F1", "F2", "F3", "F4", + 0.7, "F5", "F6", "F7", "F8", + 0.7, "F9", "F10", "F11", "F12" ], + + [ 0.1 ], + + { + "main" : { + "alpha" : [ + + [ "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "Back" ], + [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\" ], + [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "Enter" ], + [ "LShift", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "RShift" ], + [ "LCtrl", "Meta", "LAlt", "Space", "RAlt", "Menu", "RCtrl" ] + + ], + + "movement" : [ + [ "Ins", "Home", "PgUp" ], + [ "Del", "End", "PgDn" ], + [ 1 ], + [ "Up" ], + [ "Left", "Down", "Right" ] + ] + } + } + + ], + + "keyWidths" : { + + "Back" : 2, + "Tab" : 1.5, + "\\" : 1.5, + "Caps" : 1.85, + "Enter" : 2.25, + "LShift" : 2.1, + "RShift" : 3.1, + + "LCtrl" : 1.6, + "Meta" : 1.6, + "LAlt" : 1.6, + "Space" : 6.1, + "RAlt" : 1.6, + "Menu" : 1.6, + "RCtrl" : 1.6, + + "Ins" : 1.6, + "Home" : 1.6, + "PgUp" : 1.6, + "Del" : 1.6, + "End" : 1.6, + "PgDn" : 1.6 + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/es-es-qwerty.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/es-es-qwerty.json new file mode 100644 index 0000000000..d851eb1d64 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/es-es-qwerty.json @@ -0,0 +1,455 @@ +{ + + "language" : "es_ES", + "type" : "qwerty", + "width" : 23, + + "keys" : { + + "Esc" : 65307, + "F1" : 65470, + "F2" : 65471, + "F3" : 65472, + "F4" : 65473, + "F5" : 65474, + "F6" : 65475, + "F7" : 65476, + "F8" : 65477, + "F9" : 65478, + "F10" : 65479, + "F11" : 65480, + "F12" : 65481, + + "Space" : " ", + + "Back" : [{ + "title" : "⟵", + "keysym" : 65288 + }], + "Tab" : [{ + "title" : "Tab ↹", + "keysym" : 65289 + }], + "Enter" : [{ + "title" : "↵", + "keysym" : 65293 + }], + "Home" : [{ + "title" : "Inicio", + "keysym" : 65360 + }], + "PgUp" : [{ + "title" : "RePág ↑", + "keysym" : 65365 + }], + "PgDn" : [{ + "title" : "AvPág ↓", + "keysym" : 65366 + }], + "End" : [{ + "title" : "Fin", + "keysym" : 65367 + }], + "Ins" : [{ + "title" : "Ins", + "keysym" : 65379 + }], + "Del" : [{ + "title" : "Supr", + "keysym" : 65535 + }], + + "Left" : [{ + "title" : "←", + "keysym" : 65361 + }], + "Up" : [{ + "title" : "↑", + "keysym" : 65362 + }], + "Right" : [{ + "title" : "→", + "keysym" : 65363 + }], + "Down" : [{ + "title" : "↓", + "keysym" : 65364 + }], + + "Menu" : [{ + "title" : "Menu", + "keysym" : 65383 + }], + "LShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65505 + }], + "RShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65506 + }], + "LCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65507 + }], + "RCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65508 + }], + "Caps" : [{ + "title" : "Caps", + "modifier" : "caps", + "keysym" : 65509 + }], + "LAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65513 + }], + "AltGr" : [{ + "title" : "AltGr", + "modifier" : "alt-gr", + "keysym" : 65027 + }], + "Meta" : [{ + "title" : "Meta", + "modifier" : "meta", + "keysym" : 65511 + }], + + "º" : [ + { "title" : "º", "requires" : [ ] }, + { "title" : "ª", "requires" : [ "shift" ] }, + { "title" : "\\", "requires" : [ "alt-gr" ] } + ], + "1" : [ + { "title" : "1", "requires" : [ ] }, + { "title" : "!", "requires" : [ "shift" ] }, + { "title" : "|", "requires" : [ "alt-gr" ] } + ], + "2" : [ + { "title" : "2", "requires" : [ ] }, + { "title" : "\"", "requires" : [ "shift" ] }, + { "title" : "@", "requires" : [ "alt-gr" ] } + ], + "3" : [ + { "title" : "3", "requires" : [ ] }, + { "title" : ".", "requires" : [ "shift" ] }, + { "title" : "#", "requires" : [ "alt-gr" ] } + ], + "4" : [ + { "title" : "4", "requires" : [ ] }, + { "title" : "$", "requires" : [ "shift" ] }, + { "title" : "~", "requires" : [ "alt-gr" ] } + ], + "5" : [ + { "title" : "5", "requires" : [ ] }, + { "title" : "%", "requires" : [ "shift" ] }, + { "title" : "€", "requires" : [ "alt-gr" ] } + ], + "6" : [ + { "title" : "6", "requires" : [ ] }, + { "title" : "&", "requires" : [ "shift" ] }, + { "title" : "¬", "requires" : [ "alt-gr" ] } + ], + "7" : [ + { "title" : "7", "requires" : [ ] }, + { "title" : "/", "requires" : [ "shift" ] } + ], + "8" : [ + { "title" : "8", "requires" : [ ] }, + { "title" : "(", "requires" : [ "shift" ] } + ], + "9" : [ + { "title" : "9", "requires" : [ ] }, + { "title" : ")", "requires" : [ "shift" ] } + ], + "0" : [ + { "title" : "0", "requires" : [ ] }, + { "title" : "=", "requires" : [ "shift" ] } + ], + "'" : [ + { "title" : "'", "requires" : [ ] }, + { "title" : "?", "requires" : [ "shift" ] } + ], + "¡" : [ + { "title" : "¡", "requires" : [ ] }, + { "title" : "¿", "requires" : [ "shift" ] } + ], + + "q" : [ + { "title" : "q", "requires" : [ ] }, + { "title" : "Q", "requires" : [ "caps" ] }, + { "title" : "Q", "requires" : [ "shift" ] }, + { "title" : "q", "requires" : [ "caps", "shift" ] } + ], + "w" : [ + { "title" : "w", "requires" : [ ] }, + { "title" : "W", "requires" : [ "caps" ] }, + { "title" : "W", "requires" : [ "shift" ] }, + { "title" : "w", "requires" : [ "caps", "shift" ] } + ], + "e" : [ + { "title" : "e", "requires" : [ ] }, + { "title" : "E", "requires" : [ "caps" ] }, + { "title" : "E", "requires" : [ "shift" ] }, + { "title" : "e", "requires" : [ "caps", "shift" ] }, + { "title" : "€", "requires" : [ "alt-gr" ] } + ], + "r" : [ + { "title" : "r", "requires" : [ ] }, + { "title" : "R", "requires" : [ "caps" ] }, + { "title" : "R", "requires" : [ "shift" ] }, + { "title" : "r", "requires" : [ "caps", "shift" ] } + ], + "t" : [ + { "title" : "t", "requires" : [ ] }, + { "title" : "T", "requires" : [ "caps" ] }, + { "title" : "T", "requires" : [ "shift" ] }, + { "title" : "t", "requires" : [ "caps", "shift" ] } + ], + "y" : [ + { "title" : "y", "requires" : [ ] }, + { "title" : "Y", "requires" : [ "caps" ] }, + { "title" : "Y", "requires" : [ "shift" ] }, + { "title" : "y", "requires" : [ "caps", "shift" ] } + ], + "u" : [ + { "title" : "u", "requires" : [ ] }, + { "title" : "U", "requires" : [ "caps" ] }, + { "title" : "U", "requires" : [ "shift" ] }, + { "title" : "u", "requires" : [ "caps", "shift" ] } + ], + "i" : [ + { "title" : "i", "requires" : [ ] }, + { "title" : "I", "requires" : [ "caps" ] }, + { "title" : "I", "requires" : [ "shift" ] }, + { "title" : "i", "requires" : [ "caps", "shift" ] } + ], + "o" : [ + { "title" : "o", "requires" : [ ] }, + { "title" : "O", "requires" : [ "caps" ] }, + { "title" : "O", "requires" : [ "shift" ] }, + { "title" : "o", "requires" : [ "caps", "shift" ] } + ], + "p" : [ + { "title" : "p", "requires" : [ ] }, + { "title" : "P", "requires" : [ "caps" ] }, + { "title" : "P", "requires" : [ "shift" ] }, + { "title" : "p", "requires" : [ "caps", "shift" ] } + ], + "`" : [ + { "title" : "`", "requires" : [ ] }, + { "title" : "`", "requires" : [ "caps" ] }, + { "title" : "^", "requires" : [ "shift" ] }, + { "title" : "^", "requires" : [ "caps", "shift" ] }, + { "title" : "[", "requires" : [ "alt-gr" ] } + ], + "+" : [ + { "title" : "+", "requires" : [ ] }, + { "title" : "+", "requires" : [ "caps" ] }, + { "title" : "*", "requires" : [ "shift" ] }, + { "title" : "*", "requires" : [ "caps", "shift" ] }, + { "title" : "]", "requires" : [ "alt-gr" ] } + ], + "a" : [ + { "title" : "a", "requires" : [ ] }, + { "title" : "A", "requires" : [ "caps" ] }, + { "title" : "A", "requires" : [ "shift" ] }, + { "title" : "a", "requires" : [ "caps", "shift" ] } + ], + "s" : [ + { "title" : "s", "requires" : [ ] }, + { "title" : "S", "requires" : [ "caps" ] }, + { "title" : "S", "requires" : [ "shift" ] }, + { "title" : "s", "requires" : [ "caps", "shift" ] } + ], + "d" : [ + { "title" : "d", "requires" : [ ] }, + { "title" : "D", "requires" : [ "caps" ] }, + { "title" : "D", "requires" : [ "shift" ] }, + { "title" : "d", "requires" : [ "caps", "shift" ] } + ], + "f" : [ + { "title" : "f", "requires" : [ ] }, + { "title" : "F", "requires" : [ "caps" ] }, + { "title" : "F", "requires" : [ "shift" ] }, + { "title" : "f", "requires" : [ "caps", "shift" ] } + ], + "g" : [ + { "title" : "g", "requires" : [ ] }, + { "title" : "G", "requires" : [ "caps" ] }, + { "title" : "G", "requires" : [ "shift" ] }, + { "title" : "g", "requires" : [ "caps", "shift" ] } + ], + "h" : [ + { "title" : "h", "requires" : [ ] }, + { "title" : "H", "requires" : [ "caps" ] }, + { "title" : "H", "requires" : [ "shift" ] }, + { "title" : "h", "requires" : [ "caps", "shift" ] } + ], + "j" : [ + { "title" : "j", "requires" : [ ] }, + { "title" : "J", "requires" : [ "caps" ] }, + { "title" : "J", "requires" : [ "shift" ] }, + { "title" : "j", "requires" : [ "caps", "shift" ] } + ], + "k" : [ + { "title" : "k", "requires" : [ ] }, + { "title" : "K", "requires" : [ "caps" ] }, + { "title" : "K", "requires" : [ "shift" ] }, + { "title" : "k", "requires" : [ "caps", "shift" ] } + ], + "l" : [ + { "title" : "l", "requires" : [ ] }, + { "title" : "L", "requires" : [ "caps" ] }, + { "title" : "L", "requires" : [ "shift" ] }, + { "title" : "l", "requires" : [ "caps", "shift" ] } + ], + "ñ" : [ + { "title" : "ñ", "requires" : [ ] }, + { "title" : "Ñ", "requires" : [ "caps" ] }, + { "title" : "Ñ", "requires" : [ "shift" ] }, + { "title" : "ñ", "requires" : [ "caps", "shift" ] } + ], + "´" : [ + { "title" : "´", "requires" : [ ], "keysym" : 65105 }, + { "title" : "´", "requires" : [ "caps" ] }, + { "title" : "¨", "requires" : [ "shift" ] }, + { "title" : "¨", "requires" : [ "caps", "shift" ] }, + { "title" : "{", "requires" : [ "alt-gr" ] } + ], + "ç" : [ + { "title" : "ç", "requires" : [ ] }, + { "title" : "Ç", "requires" : [ "caps" ] }, + { "title" : "Ç", "requires" : [ "shift" ] }, + { "title" : "ç", "requires" : [ "caps", "shift" ] }, + { "title" : "}", "requires" : [ "alt-gr" ] } + ], + "<" : [ + { "title" : "<", "requires" : [ ] }, + { "title" : "<", "requires" : [ "caps" ] }, + { "title" : ">", "requires" : [ "shift" ] }, + { "title" : ">", "requires" : [ "caps", "shift" ] } + ], + + "z" : [ + { "title" : "z", "requires" : [ ] }, + { "title" : "Z", "requires" : [ "caps" ] }, + { "title" : "Z", "requires" : [ "shift" ] }, + { "title" : "z", "requires" : [ "caps", "shift" ] } + ], + "x" : [ + { "title" : "x", "requires" : [ ] }, + { "title" : "X", "requires" : [ "caps" ] }, + { "title" : "X", "requires" : [ "shift" ] }, + { "title" : "x", "requires" : [ "caps", "shift" ] } + ], + "c" : [ + { "title" : "c", "requires" : [ ] }, + { "title" : "C", "requires" : [ "caps" ] }, + { "title" : "C", "requires" : [ "shift" ] }, + { "title" : "c", "requires" : [ "caps", "shift" ] } + ], + "v" : [ + { "title" : "v", "requires" : [ ] }, + { "title" : "V", "requires" : [ "caps" ] }, + { "title" : "V", "requires" : [ "shift" ] }, + { "title" : "v", "requires" : [ "caps", "shift" ] } + ], + "b" : [ + { "title" : "b", "requires" : [ ] }, + { "title" : "B", "requires" : [ "caps" ] }, + { "title" : "B", "requires" : [ "shift" ] }, + { "title" : "b", "requires" : [ "caps", "shift" ] } + ], + "n" : [ + { "title" : "n", "requires" : [ ] }, + { "title" : "N", "requires" : [ "caps" ] }, + { "title" : "N", "requires" : [ "shift" ] }, + { "title" : "n", "requires" : [ "caps", "shift" ] } + ], + "m" : [ + { "title" : "m", "requires" : [ ] }, + { "title" : "M", "requires" : [ "caps" ] }, + { "title" : "M", "requires" : [ "shift" ] }, + { "title" : "m", "requires" : [ "caps", "shift" ] } + ], + "," : [ + { "title" : ",", "requires" : [ ] }, + { "title" : ";", "requires" : [ "shift" ] } + ], + "." : [ + { "title" : ".", "requires" : [ ] }, + { "title" : ":", "requires" : [ "shift" ] } + ], + "-" : [ + { "title" : "-", "requires" : [ ] }, + { "title" : "_", "requires" : [ "shift" ] } + ] + }, + + "layout" : [ + + [ "Esc", 0.8, "F1", "F2", "F3", "F4", + 0.8, "F5", "F6", "F7", "F8", + 0.8, "F9", "F10", "F11", "F12" ], + + [ 0.1 ], + + { + "main" : { + "alpha" : [ + + [ "º", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "'", "¡", "Back" ], + [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "`", "+", 1, 0.6 ], + [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ñ", "´", "ç", "Enter" ], + [ "LShift", "<", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], + [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] + + ], + + "movement" : [ + [ "Ins", "Home", "PgUp" ], + [ "Del", "End", "PgDn" ], + [ 1 ], + [ "Up" ], + [ "Left", "Down", "Right" ] + ] + } + } + + ], + + "keyWidths" : { + + "Back" : 2.3, + "Tab" : 1.75, + "\\" : 1.25, + "Caps" : 1.75, + "Enter" : 1.5, + "LShift" : 2.2, + "RShift" : 2.2, + + "LCtrl" : 1.6, + "Meta" : 1.6, + "LAlt" : 1.6, + "Space" : 6.4, + "AltGr" : 1.6, + "Menu" : 1.6, + "RCtrl" : 1.6, + + "Ins" : 1.6, + "Home" : 1.6, + "PgUp" : 1.6, + "Del" : 1.6, + "End" : 1.6, + "PgDn" : 1.6 + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/fr-fr-azerty.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/fr-fr-azerty.json new file mode 100644 index 0000000000..bf3eaf3c90 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/fr-fr-azerty.json @@ -0,0 +1,446 @@ +{ + + "language" : "fr_FR", + "type" : "azerty", + "width" : 22, + + "keys" : { + + "F1" : 65470, + "F2" : 65471, + "F3" : 65472, + "F4" : 65473, + "F5" : 65474, + "F6" : 65475, + "F7" : 65476, + "F8" : 65477, + "F9" : 65478, + "F10" : 65479, + "F11" : 65480, + "F12" : 65481, + + "Space" : " ", + + "Esc" : [{ + "title" : "Echap", + "keysym" : 65307 + }], + "Back" : [{ + "title" : "⟵", + "keysym" : 65288 + }], + "Tab" : [{ + "title" : "↹", + "keysym" : 65289 + }], + "Enter" : [{ + "title" : "Entrée", + "keysym" : 65293 + }], + "Home" : [{ + "title" : "Origine", + "keysym" : 65360 + }], + "PgUp" : [{ + "title" : "Pg préc.", + "keysym" : 65365 + }], + "PgDn" : [{ + "title" : "Pg suiv.", + "keysym" : 65366 + }], + "End" : [{ + "title" : "Fin", + "keysym" : 65367 + }], + "Ins" : [{ + "title" : "Inser", + "keysym" : 65379 + }], + "Del" : [{ + "title" : "Suppr", + "keysym" : 65535 + }], + + "Left" : [{ + "title" : "←", + "keysym" : 65361 + }], + "Up" : [{ + "title" : "↑", + "keysym" : 65362 + }], + "Right" : [{ + "title" : "→", + "keysym" : 65363 + }], + "Down" : [{ + "title" : "↓", + "keysym" : 65364 + }], + + "Menu" : [{ + "title" : "Menu", + "keysym" : 65383 + }], + "LShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65505 + }], + "RShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65506 + }], + "LCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65507 + }], + "RCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65508 + }], + "Caps" : [{ + "title" : "Caps", + "modifier" : "caps", + "keysym" : 65509 + }], + "LAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65513 + }], + "AltGr" : [{ + "title" : "AltGr", + "modifier" : "alt-gr", + "keysym" : 65027 + }], + "Meta" : [{ + "title" : "Meta", + "modifier" : "meta", + "keysym" : 65511 + }], + + "²" : [ + { "title" : "²", "requires" : [ ] } + ], + "&" : [ + { "title" : "&", "requires" : [ ] }, + { "title" : "1", "requires" : [ "shift" ] } + ], + "é" : [ + { "title" : "é", "requires" : [ ] }, + { "title" : "2", "requires" : [ "shift" ] }, + { "title" : "~", "requires" : [ "alt-gr" ] } + ], + "\"" : [ + { "title" : "\"", "requires" : [ ] }, + { "title" : "3", "requires" : [ "shift" ] }, + { "title" : "#", "requires" : [ "alt-gr" ] } + ], + "'" : [ + { "title" : "'", "requires" : [ ] }, + { "title" : "4", "requires" : [ "shift" ] }, + { "title" : "{", "requires" : [ "alt-gr" ] } + ], + "(" : [ + { "title" : "(", "requires" : [ ] }, + { "title" : "5", "requires" : [ "shift" ] }, + { "title" : "[", "requires" : [ "alt-gr" ] } + ], + "-" : [ + { "title" : "-", "requires" : [ ] }, + { "title" : "6", "requires" : [ "shift" ] }, + { "title" : "|", "requires" : [ "alt-gr" ] } + ], + "è" : [ + { "title" : "è", "requires" : [ ] }, + { "title" : "7", "requires" : [ "shift" ] }, + { "title" : "`", "requires" : [ "alt-gr" ] } + ], + "_" : [ + { "title" : "_", "requires" : [ ] }, + { "title" : "8", "requires" : [ "shift" ] }, + { "title" : "\\", "requires" : [ "alt-gr" ] } + ], + "ç" : [ + { "title" : "ç", "requires" : [ ] }, + { "title" : "9", "requires" : [ "shift" ] }, + { "title" : "^", "requires" : [ "alt-gr" ] } + ], + "à" : [ + { "title" : "à", "requires" : [ ] }, + { "title" : "0", "requires" : [ "shift" ] }, + { "title" : "@", "requires" : [ "alt-gr" ] } + ], + ")" : [ + { "title" : ")", "requires" : [ ] }, + { "title" : "°", "requires" : [ "shift" ] }, + { "title" : "]", "requires" : [ "alt-gr" ] } + ], + "=" : [ + { "title" : "=", "requires" : [ ] }, + { "title" : "+", "requires" : [ "shift" ] }, + { "title" : "}", "requires" : [ "alt-gr" ] } + ], + "^" : [ + { "title" : "^", "requires" : [ ] }, + { "title" : "¨", "requires" : [ "shift" ] } + ], + "$" : [ + { "title" : "$", "requires" : [ ] }, + { "title" : "£", "requires" : [ "shift" ] }, + { "title" : "¤", "requires" : [ "alt-gr" ] } + ], + "ù" : [ + { "title" : "ù", "requires" : [ ] }, + { "title" : "%", "requires" : [ "shift" ] } + ], + "*" : [ + { "title" : "*", "requires" : [ ] }, + { "title" : "µ", "requires" : [ "shift" ] } + ], + "<" : [ + { "title" : "<", "requires" : [ ] }, + { "title" : ">", "requires" : [ "shift" ] } + ], + "," : [ + { "title" : ",", "requires" : [ ] }, + { "title" : "?", "requires" : [ "shift" ] } + ], + ";" : [ + { "title" : ";", "requires" : [ ] }, + { "title" : ".", "requires" : [ "shift" ] } + ], + ":" : [ + { "title" : ":", "requires" : [ ] }, + { "title" : "/", "requires" : [ "shift" ] } + ], + "!" : [ + { "title" : "!", "requires" : [ ] }, + { "title" : "§", "requires" : [ "shift" ] } + ], + + "a" : [ + { "title" : "a", "requires" : [ ] }, + { "title" : "A", "requires" : [ "caps" ] }, + { "title" : "A", "requires" : [ "shift" ] }, + { "title" : "a", "requires" : [ "caps", "shift" ] } + ], + "z" : [ + { "title" : "z", "requires" : [ ] }, + { "title" : "Z", "requires" : [ "caps" ] }, + { "title" : "Z", "requires" : [ "shift" ] }, + { "title" : "z", "requires" : [ "caps", "shift" ] } + ], + "e" : [ + { "title" : "e", "requires" : [ ] }, + { "title" : "E", "requires" : [ "caps" ] }, + { "title" : "E", "requires" : [ "shift" ] }, + { "title" : "e", "requires" : [ "caps", "shift" ] }, + { "title" : "€", "requires" : [ "alt-gr" ] } + ], + "r" : [ + { "title" : "r", "requires" : [ ] }, + { "title" : "R", "requires" : [ "caps" ] }, + { "title" : "R", "requires" : [ "shift" ] }, + { "title" : "r", "requires" : [ "caps", "shift" ] } + ], + "t" : [ + { "title" : "t", "requires" : [ ] }, + { "title" : "T", "requires" : [ "caps" ] }, + { "title" : "T", "requires" : [ "shift" ] }, + { "title" : "t", "requires" : [ "caps", "shift" ] } + ], + "y" : [ + { "title" : "y", "requires" : [ ] }, + { "title" : "Y", "requires" : [ "caps" ] }, + { "title" : "Y", "requires" : [ "shift" ] }, + { "title" : "y", "requires" : [ "caps", "shift" ] } + ], + "u" : [ + { "title" : "u", "requires" : [ ] }, + { "title" : "U", "requires" : [ "caps" ] }, + { "title" : "U", "requires" : [ "shift" ] }, + { "title" : "u", "requires" : [ "caps", "shift" ] } + ], + "i" : [ + { "title" : "i", "requires" : [ ] }, + { "title" : "I", "requires" : [ "caps" ] }, + { "title" : "I", "requires" : [ "shift" ] }, + { "title" : "i", "requires" : [ "caps", "shift" ] } + ], + "o" : [ + { "title" : "o", "requires" : [ ] }, + { "title" : "O", "requires" : [ "caps" ] }, + { "title" : "O", "requires" : [ "shift" ] }, + { "title" : "o", "requires" : [ "caps", "shift" ] } + ], + "p" : [ + { "title" : "p", "requires" : [ ] }, + { "title" : "P", "requires" : [ "caps" ] }, + { "title" : "P", "requires" : [ "shift" ] }, + { "title" : "p", "requires" : [ "caps", "shift" ] } + ], + "q" : [ + { "title" : "q", "requires" : [ ] }, + { "title" : "Q", "requires" : [ "caps" ] }, + { "title" : "Q", "requires" : [ "shift" ] }, + { "title" : "q", "requires" : [ "caps", "shift" ] } + ], + "s" : [ + { "title" : "s", "requires" : [ ] }, + { "title" : "S", "requires" : [ "caps" ] }, + { "title" : "S", "requires" : [ "shift" ] }, + { "title" : "s", "requires" : [ "caps", "shift" ] } + ], + "d" : [ + { "title" : "d", "requires" : [ ] }, + { "title" : "D", "requires" : [ "caps" ] }, + { "title" : "D", "requires" : [ "shift" ] }, + { "title" : "d", "requires" : [ "caps", "shift" ] } + ], + "f" : [ + { "title" : "f", "requires" : [ ] }, + { "title" : "F", "requires" : [ "caps" ] }, + { "title" : "F", "requires" : [ "shift" ] }, + { "title" : "f", "requires" : [ "caps", "shift" ] } + ], + "g" : [ + { "title" : "g", "requires" : [ ] }, + { "title" : "G", "requires" : [ "caps" ] }, + { "title" : "G", "requires" : [ "shift" ] }, + { "title" : "g", "requires" : [ "caps", "shift" ] } + ], + "h" : [ + { "title" : "h", "requires" : [ ] }, + { "title" : "H", "requires" : [ "caps" ] }, + { "title" : "H", "requires" : [ "shift" ] }, + { "title" : "h", "requires" : [ "caps", "shift" ] } + ], + "j" : [ + { "title" : "j", "requires" : [ ] }, + { "title" : "J", "requires" : [ "caps" ] }, + { "title" : "J", "requires" : [ "shift" ] }, + { "title" : "j", "requires" : [ "caps", "shift" ] } + ], + "k" : [ + { "title" : "k", "requires" : [ ] }, + { "title" : "K", "requires" : [ "caps" ] }, + { "title" : "K", "requires" : [ "shift" ] }, + { "title" : "k", "requires" : [ "caps", "shift" ] } + ], + "l" : [ + { "title" : "l", "requires" : [ ] }, + { "title" : "L", "requires" : [ "caps" ] }, + { "title" : "L", "requires" : [ "shift" ] }, + { "title" : "l", "requires" : [ "caps", "shift" ] } + ], + "m" : [ + { "title" : "m", "requires" : [ ] }, + { "title" : "M", "requires" : [ "caps" ] }, + { "title" : "M", "requires" : [ "shift" ] }, + { "title" : "m", "requires" : [ "caps", "shift" ] } + ], + "w" : [ + { "title" : "w", "requires" : [ ] }, + { "title" : "W", "requires" : [ "caps" ] }, + { "title" : "W", "requires" : [ "shift" ] }, + { "title" : "w", "requires" : [ "caps", "shift" ] } + ], + "x" : [ + { "title" : "x", "requires" : [ ] }, + { "title" : "X", "requires" : [ "caps" ] }, + { "title" : "X", "requires" : [ "shift" ] }, + { "title" : "x", "requires" : [ "caps", "shift" ] } + ], + "c" : [ + { "title" : "c", "requires" : [ ] }, + { "title" : "C", "requires" : [ "caps" ] }, + { "title" : "C", "requires" : [ "shift" ] }, + { "title" : "c", "requires" : [ "caps", "shift" ] } + ], + "v" : [ + { "title" : "v", "requires" : [ ] }, + { "title" : "V", "requires" : [ "caps" ] }, + { "title" : "V", "requires" : [ "shift" ] }, + { "title" : "v", "requires" : [ "caps", "shift" ] } + ], + "b" : [ + { "title" : "b", "requires" : [ ] }, + { "title" : "B", "requires" : [ "caps" ] }, + { "title" : "B", "requires" : [ "shift" ] }, + { "title" : "b", "requires" : [ "caps", "shift" ] } + ], + "n" : [ + { "title" : "n", "requires" : [ ] }, + { "title" : "N", "requires" : [ "caps" ] }, + { "title" : "N", "requires" : [ "shift" ] }, + { "title" : "n", "requires" : [ "caps", "shift" ] } + ] + + }, + + "layout" : [ + + [ "Esc", 0.5, "F1", "F2", "F3", "F4", + 0.7, "F5", "F6", "F7", "F8", + 0.7, "F9", "F10", "F11", "F12" ], + + [ 0.1 ], + + { + "main" : { + "alpha" : [ + + [ "²", "&", "é", "\"", "'", "(", "-", "è", "_", "ç", "à", ")", "=", "Back" ], + [ "Tab", "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "$", 1, 0.8 ], + [ "Caps", "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "ù", "*", "Enter" ], + [ "LShift", "<", "w", "x", "c", "v", "b", "n", ",", ";", ":", "!", "RShift" ], + [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] + + ], + + "movement" : [ + [ "Ins", "Home", "PgUp" ], + [ "Del", "End", "PgDn" ], + [ 1 ], + [ "Up" ], + [ "Left", "Down", "Right" ] + ] + } + } + + ], + + "keyWidths" : { + + "Esc" : 1.2, + "Back" : 2, + "Tab" : 1.3, + "Caps" : 1.3, + "Enter" : 1.7, + "LShift" : 2, + "RShift" : 2.1, + + "LCtrl" : 1.6, + "Meta" : 1.6, + "LAlt" : 1.6, + "Space" : 6.1, + "AltGr" : 1.6, + "Menu" : 1.6, + "RCtrl" : 1.6, + + "Ins" : 1.6, + "Home" : 1.6, + "PgUp" : 1.6, + "Del" : 1.6, + "End" : 1.6, + "PgDn" : 1.6 + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/it-it-qwerty.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/it-it-qwerty.json new file mode 100644 index 0000000000..4775e6fd6c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/it-it-qwerty.json @@ -0,0 +1,452 @@ +{ + + "language" : "it_IT", + "type" : "qwerty", + "width" : 23, + + "keys" : { + + "Esc" : 65307, + "F1" : 65470, + "F2" : 65471, + "F3" : 65472, + "F4" : 65473, + "F5" : 65474, + "F6" : 65475, + "F7" : 65476, + "F8" : 65477, + "F9" : 65478, + "F10" : 65479, + "F11" : 65480, + "F12" : 65481, + + "Space" : " ", + + "Back" : [{ + "title" : "⟵", + "keysym" : 65288 + }], + "Tab" : [{ + "title" : "Tab ↹", + "keysym" : 65289 + }], + "Enter" : [{ + "title" : "↵", + "keysym" : 65293 + }], + "Home" : [{ + "title" : "Home", + "keysym" : 65360 + }], + "PgUp" : [{ + "title" : "PgUp ↑", + "keysym" : 65365 + }], + "PgDn" : [{ + "title" : "PgDn ↓", + "keysym" : 65366 + }], + "End" : [{ + "title" : "End", + "keysym" : 65367 + }], + "Ins" : [{ + "title" : "Ins", + "keysym" : 65379 + }], + "Del" : [{ + "title" : "Del", + "keysym" : 65535 + }], + + "Left" : [{ + "title" : "←", + "keysym" : 65361 + }], + "Up" : [{ + "title" : "↑", + "keysym" : 65362 + }], + "Right" : [{ + "title" : "→", + "keysym" : 65363 + }], + "Down" : [{ + "title" : "↓", + "keysym" : 65364 + }], + + "Menu" : [{ + "title" : "Menu", + "keysym" : 65383 + }], + "LShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65505 + }], + "RShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65506 + }], + "LCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65507 + }], + "RCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65508 + }], + "Caps" : [{ + "title" : "Caps", + "modifier" : "caps", + "keysym" : 65509 + }], + "LAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65513 + }], + "AltGr" : [{ + "title" : "AltGr", + "modifier" : "alt-gr", + "keysym" : 65027 + }], + "Meta" : [{ + "title" : "Meta", + "modifier" : "meta", + "keysym" : 65511 + }], + + "\\" : [ + { "title" : "\\", "requires" : [ ] }, + { "title" : "|", "requires" : [ "shift" ] } + ], + "1" : [ + { "title" : "1", "requires" : [ ] }, + { "title" : "!", "requires" : [ "shift" ] } + ], + "2" : [ + { "title" : "2", "requires" : [ ] }, + { "title" : "\"", "requires" : [ "shift" ] } + ], + "3" : [ + { "title" : "3", "requires" : [ ] }, + { "title" : "£", "requires" : [ "shift" ] } + ], + "4" : [ + { "title" : "4", "requires" : [ ] }, + { "title" : "$", "requires" : [ "shift" ] } + ], + "5" : [ + { "title" : "5", "requires" : [ ] }, + { "title" : "%", "requires" : [ "shift" ] }, + { "title" : "€", "requires" : [ "alt-gr" ] } + ], + "6" : [ + { "title" : "6", "requires" : [ ] }, + { "title" : "&", "requires" : [ "shift" ] } + ], + "7" : [ + { "title" : "7", "requires" : [ ] }, + { "title" : "/", "requires" : [ "shift" ] } + ], + "8" : [ + { "title" : "8", "requires" : [ ] }, + { "title" : "(", "requires" : [ "shift" ] } + ], + "9" : [ + { "title" : "9", "requires" : [ ] }, + { "title" : ")", "requires" : [ "shift" ] } + ], + "0" : [ + { "title" : "0", "requires" : [ ] }, + { "title" : "=", "requires" : [ "shift" ] } + ], + "'" : [ + { "title" : "'", "requires" : [ ] }, + { "title" : "?", "requires" : [ "shift" ] }, + { "title" : "`", "requires" : [ "alt-gr", "shift" ] } + ], + "ì" : [ + { "title" : "ì", "requires" : [ ] }, + { "title" : "^", "requires" : [ "shift" ] }, + { "title" : "~", "requires" : [ "alt-gr", "shift" ] } + ], + + "q" : [ + { "title" : "q", "requires" : [ ] }, + { "title" : "Q", "requires" : [ "caps" ] }, + { "title" : "Q", "requires" : [ "shift" ] }, + { "title" : "q", "requires" : [ "caps", "shift" ] } + ], + "w" : [ + { "title" : "w", "requires" : [ ] }, + { "title" : "W", "requires" : [ "caps" ] }, + { "title" : "W", "requires" : [ "shift" ] }, + { "title" : "w", "requires" : [ "caps", "shift" ] } + ], + "e" : [ + { "title" : "e", "requires" : [ ] }, + { "title" : "E", "requires" : [ "caps" ] }, + { "title" : "E", "requires" : [ "shift" ] }, + { "title" : "e", "requires" : [ "caps", "shift" ] }, + { "title" : "€", "requires" : [ "alt-gr" ] } + ], + "r" : [ + { "title" : "r", "requires" : [ ] }, + { "title" : "R", "requires" : [ "caps" ] }, + { "title" : "R", "requires" : [ "shift" ] }, + { "title" : "r", "requires" : [ "caps", "shift" ] } + ], + "t" : [ + { "title" : "t", "requires" : [ ] }, + { "title" : "T", "requires" : [ "caps" ] }, + { "title" : "T", "requires" : [ "shift" ] }, + { "title" : "t", "requires" : [ "caps", "shift" ] } + ], + "y" : [ + { "title" : "y", "requires" : [ ] }, + { "title" : "Y", "requires" : [ "caps" ] }, + { "title" : "Y", "requires" : [ "shift" ] }, + { "title" : "y", "requires" : [ "caps", "shift" ] } + ], + "u" : [ + { "title" : "u", "requires" : [ ] }, + { "title" : "U", "requires" : [ "caps" ] }, + { "title" : "U", "requires" : [ "shift" ] }, + { "title" : "u", "requires" : [ "caps", "shift" ] } + ], + "i" : [ + { "title" : "i", "requires" : [ ] }, + { "title" : "I", "requires" : [ "caps" ] }, + { "title" : "I", "requires" : [ "shift" ] }, + { "title" : "i", "requires" : [ "caps", "shift" ] } + ], + "o" : [ + { "title" : "o", "requires" : [ ] }, + { "title" : "O", "requires" : [ "caps" ] }, + { "title" : "O", "requires" : [ "shift" ] }, + { "title" : "o", "requires" : [ "caps", "shift" ] } + ], + "p" : [ + { "title" : "p", "requires" : [ ] }, + { "title" : "P", "requires" : [ "caps" ] }, + { "title" : "P", "requires" : [ "shift" ] }, + { "title" : "p", "requires" : [ "caps", "shift" ] } + ], + "è" : [ + { "title" : "è", "requires" : [ ] }, + { "title" : "è", "requires" : [ "caps" ] }, + { "title" : "é", "requires" : [ "shift" ] }, + { "title" : "é", "requires" : [ "caps", "shift" ] }, + { "title" : "[", "requires" : [ "alt-gr" ] }, + { "title" : "{", "requires" : [ "alt-gr", "shift" ] } + ], + "+" : [ + { "title" : "+", "requires" : [ ] }, + { "title" : "+", "requires" : [ "caps" ] }, + { "title" : "*", "requires" : [ "shift" ] }, + { "title" : "*", "requires" : [ "caps", "shift" ] }, + { "title" : "]", "requires" : [ "alt-gr" ] }, + { "title" : "}", "requires" : [ "alt-gr", "shift" ] } + ], + "a" : [ + { "title" : "a", "requires" : [ ] }, + { "title" : "A", "requires" : [ "caps" ] }, + { "title" : "A", "requires" : [ "shift" ] }, + { "title" : "a", "requires" : [ "caps", "shift" ] } + ], + "s" : [ + { "title" : "s", "requires" : [ ] }, + { "title" : "S", "requires" : [ "caps" ] }, + { "title" : "S", "requires" : [ "shift" ] }, + { "title" : "s", "requires" : [ "caps", "shift" ] } + ], + "d" : [ + { "title" : "d", "requires" : [ ] }, + { "title" : "D", "requires" : [ "caps" ] }, + { "title" : "D", "requires" : [ "shift" ] }, + { "title" : "d", "requires" : [ "caps", "shift" ] } + ], + "f" : [ + { "title" : "f", "requires" : [ ] }, + { "title" : "F", "requires" : [ "caps" ] }, + { "title" : "F", "requires" : [ "shift" ] }, + { "title" : "f", "requires" : [ "caps", "shift" ] } + ], + "g" : [ + { "title" : "g", "requires" : [ ] }, + { "title" : "G", "requires" : [ "caps" ] }, + { "title" : "G", "requires" : [ "shift" ] }, + { "title" : "g", "requires" : [ "caps", "shift" ] } + ], + "h" : [ + { "title" : "h", "requires" : [ ] }, + { "title" : "H", "requires" : [ "caps" ] }, + { "title" : "H", "requires" : [ "shift" ] }, + { "title" : "h", "requires" : [ "caps", "shift" ] } + ], + "j" : [ + { "title" : "j", "requires" : [ ] }, + { "title" : "J", "requires" : [ "caps" ] }, + { "title" : "J", "requires" : [ "shift" ] }, + { "title" : "j", "requires" : [ "caps", "shift" ] } + ], + "k" : [ + { "title" : "k", "requires" : [ ] }, + { "title" : "K", "requires" : [ "caps" ] }, + { "title" : "K", "requires" : [ "shift" ] }, + { "title" : "k", "requires" : [ "caps", "shift" ] } + ], + "l" : [ + { "title" : "l", "requires" : [ ] }, + { "title" : "L", "requires" : [ "caps" ] }, + { "title" : "L", "requires" : [ "shift" ] }, + { "title" : "l", "requires" : [ "caps", "shift" ] } + ], + "ò" : [ + { "title" : "ò", "requires" : [ ] }, + { "title" : "ò", "requires" : [ "caps" ] }, + { "title" : "ç", "requires" : [ "shift" ] }, + { "title" : "ç", "requires" : [ "caps", "shift" ] }, + { "title" : "@", "requires" : [ "alt-gr" ] } + ], + "à" : [ + { "title" : "à", "requires" : [ ] }, + { "title" : "à", "requires" : [ "caps" ] }, + { "title" : "°", "requires" : [ "shift" ] }, + { "title" : "°", "requires" : [ "caps", "shift" ] }, + { "title" : "#", "requires" : [ "alt-gr" ] } + ], + "ù" : [ + { "title" : "ù", "requires" : [ ] }, + { "title" : "ù", "requires" : [ "caps" ] }, + { "title" : "§", "requires" : [ "shift" ] }, + { "title" : "§", "requires" : [ "caps", "shift" ] } + ], + + "<" : [ + { "title" : "<", "requires" : [ ] }, + { "title" : ">", "requires" : [ "shift" ] } + ], + "z" : [ + { "title" : "z", "requires" : [ ] }, + { "title" : "Z", "requires" : [ "caps" ] }, + { "title" : "Z", "requires" : [ "shift" ] }, + { "title" : "z", "requires" : [ "caps", "shift" ] } + ], + "x" : [ + { "title" : "x", "requires" : [ ] }, + { "title" : "X", "requires" : [ "caps" ] }, + { "title" : "X", "requires" : [ "shift" ] }, + { "title" : "x", "requires" : [ "caps", "shift" ] } + ], + "c" : [ + { "title" : "c", "requires" : [ ] }, + { "title" : "C", "requires" : [ "caps" ] }, + { "title" : "C", "requires" : [ "shift" ] }, + { "title" : "c", "requires" : [ "caps", "shift" ] } + ], + "v" : [ + { "title" : "v", "requires" : [ ] }, + { "title" : "V", "requires" : [ "caps" ] }, + { "title" : "V", "requires" : [ "shift" ] }, + { "title" : "v", "requires" : [ "caps", "shift" ] } + ], + "b" : [ + { "title" : "b", "requires" : [ ] }, + { "title" : "B", "requires" : [ "caps" ] }, + { "title" : "B", "requires" : [ "shift" ] }, + { "title" : "b", "requires" : [ "caps", "shift" ] } + ], + "n" : [ + { "title" : "n", "requires" : [ ] }, + { "title" : "N", "requires" : [ "caps" ] }, + { "title" : "N", "requires" : [ "shift" ] }, + { "title" : "n", "requires" : [ "caps", "shift" ] } + ], + "m" : [ + { "title" : "m", "requires" : [ ] }, + { "title" : "M", "requires" : [ "caps" ] }, + { "title" : "M", "requires" : [ "shift" ] }, + { "title" : "m", "requires" : [ "caps", "shift" ] }, + { "title" : "µ", "requires" : [ "alt-gr" ] } + ], + "," : [ + { "title" : ",", "requires" : [ ] }, + { "title" : ";", "requires" : [ "shift" ] } + ], + "." : [ + { "title" : ".", "requires" : [ ] }, + { "title" : ":", "requires" : [ "shift" ] } + ], + "-" : [ + { "title" : "-", "requires" : [ ] }, + { "title" : "_", "requires" : [ "shift" ] } + ] + }, + + "layout" : [ + + [ "Esc", 0.8, "F1", "F2", "F3", "F4", + 0.8, "F5", "F6", "F7", "F8", + 0.8, "F9", "F10", "F11", "F12" ], + + [ 0.1 ], + + { + "main" : { + "alpha" : [ + + [ "\\", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "'", "ì", "Back" ], + [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "è", "+", 1, 0.6 ], + [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ò", "à", "ù", "Enter" ], + [ "LShift", "<", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], + [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] + + ], + + "movement" : [ + [ "Ins", "Home", "PgUp" ], + [ "Del", "End", "PgDn" ], + [ 1 ], + [ "Up" ], + [ "Left", "Down", "Right" ] + ] + } + } + + ], + + "keyWidths" : { + + "Back" : 2, + "Tab" : 1.75, + "\\" : 1.25, + "Caps" : 1.75, + "Enter" : 1.5, + "LShift" : 2.2, + "RShift" : 2.2, + + "LCtrl" : 1.6, + "Meta" : 1.6, + "LAlt" : 1.6, + "Space" : 6.4, + "AltGr" : 1.6, + "Menu" : 1.6, + "RCtrl" : 1.6, + + "Ins" : 1.6, + "Home" : 1.6, + "PgUp" : 1.6, + "Del" : 1.6, + "End" : 1.6, + "PgDn" : 1.6 + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/nl-nl-qwerty.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/nl-nl-qwerty.json new file mode 100644 index 0000000000..f1e8744776 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/nl-nl-qwerty.json @@ -0,0 +1,464 @@ +{ + + "language" : "nl_NL", + "type" : "qwerty", + "width" : 23, + + "keys" : { + + "Esc" : 65307, + "F1" : 65470, + "F2" : 65471, + "F3" : 65472, + "F4" : 65473, + "F5" : 65474, + "F6" : 65475, + "F7" : 65476, + "F8" : 65477, + "F9" : 65478, + "F10" : 65479, + "F11" : 65480, + "F12" : 65481, + + "Space" : " ", + + "Back" : [{ + "title" : "⟵", + "keysym" : 65288 + }], + "Tab" : [{ + "title" : "Tab ↹", + "keysym" : 65289 + }], + "Enter" : [{ + "title" : "↵", + "keysym" : 65293 + }], + "Home" : [{ + "title" : "Home", + "keysym" : 65360 + }], + "PgUp" : [{ + "title" : "PgUp ↑", + "keysym" : 65365 + }], + "PgDn" : [{ + "title" : "PgDn ↓", + "keysym" : 65366 + }], + "End" : [{ + "title" : "End", + "keysym" : 65367 + }], + "Ins" : [{ + "title" : "Ins", + "keysym" : 65379 + }], + "Del" : [{ + "title" : "Del", + "keysym" : 65535 + }], + + "Left" : [{ + "title" : "←", + "keysym" : 65361 + }], + "Up" : [{ + "title" : "↑", + "keysym" : 65362 + }], + "Right" : [{ + "title" : "→", + "keysym" : 65363 + }], + "Down" : [{ + "title" : "↓", + "keysym" : 65364 + }], + + "Menu" : [{ + "title" : "Menu", + "keysym" : 65383 + }], + "LShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65505 + }], + "RShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65506 + }], + "LCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65507 + }], + "RCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65508 + }], + "Caps" : [{ + "title" : "Caps", + "modifier" : "caps", + "keysym" : 65509 + }], + "LAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65513 + }], + "AltGr" : [{ + "title" : "AltGr", + "modifier" : "alt-gr", + "keysym" : 65027 + }], + "Meta" : [{ + "title" : "Meta", + "modifier" : "meta", + "keysym" : 65511 + }], + + "@" : [ + { "title" : "@", "requires" : [ ] }, + { "title" : "§", "requires" : [ "shift" ] }, + { "title" : "¬", "requires" : [ "alt-gr" ] } + ], + "1" : [ + { "title" : "1", "requires" : [ ] }, + { "title" : "!", "requires" : [ "shift" ] }, + { "title" : "¹", "requires" : [ "alt-gr" ] } + ], + "2" : [ + { "title" : "2", "requires" : [ ] }, + { "title" : "\"", "requires" : [ "shift" ] }, + { "title" : "²", "requires" : [ "alt-gr" ] } + ], + "3" : [ + { "title" : "3", "requires" : [ ] }, + { "title" : "#", "requires" : [ "shift" ] }, + { "title" : "³", "requires" : [ "alt-gr" ] } + ], + "4" : [ + { "title" : "4", "requires" : [ ] }, + { "title" : "$", "requires" : [ "shift" ] }, + { "title" : "¼", "requires" : [ "alt-gr" ] } + ], + "5" : [ + { "title" : "5", "requires" : [ ] }, + { "title" : "%", "requires" : [ "shift" ] }, + { "title" : "½", "requires" : [ "alt-gr" ] } + ], + "6" : [ + { "title" : "6", "requires" : [ ] }, + { "title" : "&", "requires" : [ "shift" ] }, + { "title" : "¾", "requires" : [ "alt-gr" ] } + ], + "7" : [ + { "title" : "7", "requires" : [ ] }, + { "title" : "_", "requires" : [ "shift" ] }, + { "title" : "£", "requires" : [ "alt-gr" ] } + ], + "8" : [ + { "title" : "8", "requires" : [ ] }, + { "title" : "(", "requires" : [ "shift" ] }, + { "title" : "{", "requires" : [ "alt-gr" ] } + ], + "9" : [ + { "title" : "9", "requires" : [ ] }, + { "title" : ")", "requires" : [ "shift" ] }, + { "title" : "}", "requires" : [ "alt-gr" ] } + ], + "0" : [ + { "title" : "0", "requires" : [ ] }, + { "title" : "'", "requires" : [ "shift" ] } + ], + "/" : [ + { "title" : "/", "requires" : [ ] }, + { "title" : "?", "requires" : [ "shift" ] }, + { "title" : "\\", "requires" : [ "alt-gr" ] } + ], + "°" : [ + { "title" : "°", "requires" : [ ] }, + { "title" : "~", "requires" : [ "shift" ] }, + { "title" : "¸", "requires" : [ "alt-gr" ] } + ], + + "q" : [ + { "title" : "q", "requires" : [ ] }, + { "title" : "Q", "requires" : [ "caps" ] }, + { "title" : "Q", "requires" : [ "shift" ] }, + { "title" : "q", "requires" : [ "caps", "shift" ] } + ], + "w" : [ + { "title" : "w", "requires" : [ ] }, + { "title" : "W", "requires" : [ "caps" ] }, + { "title" : "W", "requires" : [ "shift" ] }, + { "title" : "w", "requires" : [ "caps", "shift" ] } + ], + "e" : [ + { "title" : "e", "requires" : [ ] }, + { "title" : "E", "requires" : [ "caps" ] }, + { "title" : "E", "requires" : [ "shift" ] }, + { "title" : "e", "requires" : [ "caps", "shift" ] }, + { "title" : "€", "requires" : [ "alt-gr" ] } + ], + "r" : [ + { "title" : "r", "requires" : [ ] }, + { "title" : "R", "requires" : [ "caps" ] }, + { "title" : "R", "requires" : [ "shift" ] }, + { "title" : "r", "requires" : [ "caps", "shift" ] }, + { "title" : "¶", "requires" : [ "alt-gr" ] } + ], + "t" : [ + { "title" : "t", "requires" : [ ] }, + { "title" : "T", "requires" : [ "caps" ] }, + { "title" : "T", "requires" : [ "shift" ] }, + { "title" : "t", "requires" : [ "caps", "shift" ] } + ], + "y" : [ + { "title" : "y", "requires" : [ ] }, + { "title" : "Y", "requires" : [ "caps" ] }, + { "title" : "Y", "requires" : [ "shift" ] }, + { "title" : "y", "requires" : [ "caps", "shift" ] } + ], + "u" : [ + { "title" : "u", "requires" : [ ] }, + { "title" : "U", "requires" : [ "caps" ] }, + { "title" : "U", "requires" : [ "shift" ] }, + { "title" : "u", "requires" : [ "caps", "shift" ] } + ], + "i" : [ + { "title" : "i", "requires" : [ ] }, + { "title" : "I", "requires" : [ "caps" ] }, + { "title" : "I", "requires" : [ "shift" ] }, + { "title" : "i", "requires" : [ "caps", "shift" ] } + ], + "o" : [ + { "title" : "o", "requires" : [ ] }, + { "title" : "O", "requires" : [ "caps" ] }, + { "title" : "O", "requires" : [ "shift" ] }, + { "title" : "o", "requires" : [ "caps", "shift" ] } + ], + "p" : [ + { "title" : "p", "requires" : [ ] }, + { "title" : "P", "requires" : [ "caps" ] }, + { "title" : "P", "requires" : [ "shift" ] }, + { "title" : "p", "requires" : [ "caps", "shift" ] } + ], + "¨" : [ + { "title" : "¨", "requires" : [ ] }, + { "title" : "¨", "requires" : [ "caps" ] }, + { "title" : "^", "requires" : [ "shift" ] }, + { "title" : "^", "requires" : [ "caps", "shift" ] } + ], + "*" : [ + { "title" : "*", "requires" : [ ] }, + { "title" : "*", "requires" : [ "caps" ] }, + { "title" : "|", "requires" : [ "shift" ] }, + { "title" : "|", "requires" : [ "caps", "shift" ] } + ], + "a" : [ + { "title" : "a", "requires" : [ ] }, + { "title" : "A", "requires" : [ "caps" ] }, + { "title" : "A", "requires" : [ "shift" ] }, + { "title" : "a", "requires" : [ "caps", "shift" ] } + ], + "s" : [ + { "title" : "s", "requires" : [ ] }, + { "title" : "S", "requires" : [ "caps" ] }, + { "title" : "S", "requires" : [ "shift" ] }, + { "title" : "s", "requires" : [ "caps", "shift" ] }, + { "title" : "ß", "requires" : [ "alt-gr" ] } + ], + "d" : [ + { "title" : "d", "requires" : [ ] }, + { "title" : "D", "requires" : [ "caps" ] }, + { "title" : "D", "requires" : [ "shift" ] }, + { "title" : "d", "requires" : [ "caps", "shift" ] } + ], + "f" : [ + { "title" : "f", "requires" : [ ] }, + { "title" : "F", "requires" : [ "caps" ] }, + { "title" : "F", "requires" : [ "shift" ] }, + { "title" : "f", "requires" : [ "caps", "shift" ] } + ], + "g" : [ + { "title" : "g", "requires" : [ ] }, + { "title" : "G", "requires" : [ "caps" ] }, + { "title" : "G", "requires" : [ "shift" ] }, + { "title" : "g", "requires" : [ "caps", "shift" ] } + ], + "h" : [ + { "title" : "h", "requires" : [ ] }, + { "title" : "H", "requires" : [ "caps" ] }, + { "title" : "H", "requires" : [ "shift" ] }, + { "title" : "h", "requires" : [ "caps", "shift" ] } + ], + "j" : [ + { "title" : "j", "requires" : [ ] }, + { "title" : "J", "requires" : [ "caps" ] }, + { "title" : "J", "requires" : [ "shift" ] }, + { "title" : "j", "requires" : [ "caps", "shift" ] } + ], + "k" : [ + { "title" : "k", "requires" : [ ] }, + { "title" : "K", "requires" : [ "caps" ] }, + { "title" : "K", "requires" : [ "shift" ] }, + { "title" : "k", "requires" : [ "caps", "shift" ] } + ], + "l" : [ + { "title" : "l", "requires" : [ ] }, + { "title" : "L", "requires" : [ "caps" ] }, + { "title" : "L", "requires" : [ "shift" ] }, + { "title" : "l", "requires" : [ "caps", "shift" ] } + ], + "+" : [ + { "title" : "+", "requires" : [ ] }, + { "title" : "+", "requires" : [ "caps" ] }, + { "title" : "±", "requires" : [ "shift" ] }, + { "title" : "±", "requires" : [ "caps", "shift" ] } + ], + "´" : [ + { "title" : "´", "requires" : [ ] }, + { "title" : "´", "requires" : [ "caps" ] }, + { "title" : "`", "requires" : [ "shift" ] }, + { "title" : "`", "requires" : [ "caps", "shift" ] } + ], + "<" : [ + { "title" : "<", "requires" : [ ] }, + { "title" : "<", "requires" : [ "caps" ] }, + { "title" : ">", "requires" : [ "shift" ] }, + { "title" : ">", "requires" : [ "caps", "shift" ] } + ], + + "]" : [ + { "title" : "]", "requires" : [ ] }, + { "title" : "]", "requires" : [ "caps" ] }, + { "title" : "[", "requires" : [ "shift" ] }, + { "title" : "[", "requires" : [ "caps", "shift" ] }, + { "title" : "¦", "requires" : [ "alt-gr" ] } + ], + "z" : [ + { "title" : "z", "requires" : [ ] }, + { "title" : "Z", "requires" : [ "caps" ] }, + { "title" : "Z", "requires" : [ "shift" ] }, + { "title" : "z", "requires" : [ "caps", "shift" ] }, + { "title" : "«", "requires" : [ "alt-gr" ] } + ], + "x" : [ + { "title" : "x", "requires" : [ ] }, + { "title" : "X", "requires" : [ "caps" ] }, + { "title" : "X", "requires" : [ "shift" ] }, + { "title" : "x", "requires" : [ "caps", "shift" ] }, + { "title" : "»", "requires" : [ "alt-gr" ] } + ], + "c" : [ + { "title" : "c", "requires" : [ ] }, + { "title" : "C", "requires" : [ "caps" ] }, + { "title" : "C", "requires" : [ "shift" ] }, + { "title" : "c", "requires" : [ "caps", "shift" ] }, + { "title" : "¢", "requires" : [ "alt-gr" ] } + ], + "v" : [ + { "title" : "v", "requires" : [ ] }, + { "title" : "V", "requires" : [ "caps" ] }, + { "title" : "V", "requires" : [ "shift" ] }, + { "title" : "v", "requires" : [ "caps", "shift" ] } + ], + "b" : [ + { "title" : "b", "requires" : [ ] }, + { "title" : "B", "requires" : [ "caps" ] }, + { "title" : "B", "requires" : [ "shift" ] }, + { "title" : "b", "requires" : [ "caps", "shift" ] } + ], + "n" : [ + { "title" : "n", "requires" : [ ] }, + { "title" : "N", "requires" : [ "caps" ] }, + { "title" : "N", "requires" : [ "shift" ] }, + { "title" : "n", "requires" : [ "caps", "shift" ] } + ], + "m" : [ + { "title" : "m", "requires" : [ ] }, + { "title" : "M", "requires" : [ "caps" ] }, + { "title" : "M", "requires" : [ "shift" ] }, + { "title" : "m", "requires" : [ "caps", "shift" ] }, + { "title" : "µ", "requires" : [ "alt-gr" ] } + ], + "," : [ + { "title" : ",", "requires" : [ ] }, + { "title" : ";", "requires" : [ "shift" ] } + ], + "." : [ + { "title" : ".", "requires" : [ ] }, + { "title" : ":", "requires" : [ "shift" ] }, + { "title" : "·", "requires" : [ "alt-gr" ] } + ], + "-" : [ + { "title" : "-", "requires" : [ ] }, + { "title" : "=", "requires" : [ "shift" ] } + ] + }, + + "layout" : [ + + [ "Esc", 0.8, "F1", "F2", "F3", "F4", + 0.8, "F5", "F6", "F7", "F8", + 0.8, "F9", "F10", "F11", "F12" ], + + [ 0.1 ], + + { + "main" : { + "alpha" : [ + + [ "@", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "/", "°", "Back" ], + [ "Tab", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "¨", "*", 1, 0.6 ], + [ "Caps", "a", "s", "d", "f", "g", "h", "j", "k", "l", "+", "´", "<", "Enter" ], + [ "LShift", "]", "z", "x", "c", "v", "b", "n", "m", ",", ".", "-", "RShift" ], + [ "LCtrl", "Meta", "LAlt", "Space", "AltGr", "Menu", "RCtrl" ] + + ], + + "movement" : [ + [ "Ins", "Home", "PgUp" ], + [ "Del", "End", "PgDn" ], + [ 1 ], + [ "Up" ], + [ "Left", "Down", "Right" ] + ] + } + } + + ], + + "keyWidths" : { + + "Back" : 2.3, + "Tab" : 1.75, + "\\" : 1.25, + "Caps" : 1.75, + "Enter" : 1.5, + "LShift" : 2.2, + "RShift" : 2.2, + + "LCtrl" : 1.6, + "Meta" : 1.6, + "LAlt" : 1.6, + "Space" : 6.4, + "AltGr" : 1.6, + "Menu" : 1.6, + "RCtrl" : 1.6, + + "Ins" : 1.6, + "Home" : 1.6, + "PgUp" : 1.6, + "Del" : 1.6, + "End" : 1.6, + "PgDn" : 1.6 + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/ru-ru-qwerty.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/ru-ru-qwerty.json new file mode 100644 index 0000000000..63fa1cfa4c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/layouts/ru-ru-qwerty.json @@ -0,0 +1,546 @@ +{ + + "language" : "ru_RU", + "type" : "qwerty", + "width" : 22, + + "keys" : { + + "Back" : 65288, + "Tab" : 65289, + "Enter" : 65293, + "Esc" : 65307, + "Home" : 65360, + "PgUp" : 65365, + "PgDn" : 65366, + "End" : 65367, + "Ins" : 65379, + "F1" : 65470, + "F2" : 65471, + "F3" : 65472, + "F4" : 65473, + "F5" : 65474, + "F6" : 65475, + "F7" : 65476, + "F8" : 65477, + "F9" : 65478, + "F10" : 65479, + "F11" : 65480, + "F12" : 65481, + "Del" : 65535, + + "Space" : " ", + + "Left" : [{ + "title" : "←", + "keysym" : 65361 + }], + "Up" : [{ + "title" : "↑", + "keysym" : 65362 + }], + "Right" : [{ + "title" : "→", + "keysym" : 65363 + }], + "Down" : [{ + "title" : "↓", + "keysym" : 65364 + }], + + "Menu" : [{ + "title" : "Menu", + "keysym" : 65383 + }], + "LShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65505 + }], + "RShift" : [{ + "title" : "Shift", + "modifier" : "shift", + "keysym" : 65506 + }], + "LCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65507 + }], + "RCtrl" : [{ + "title" : "Ctrl", + "modifier" : "control", + "keysym" : 65508 + }], + "Caps" : [{ + "title" : "Caps", + "modifier" : "caps", + "keysym" : 65509 + }], + "LAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65513 + }], + "RAlt" : [{ + "title" : "Alt", + "modifier" : "alt", + "keysym" : 65514 + }], + "Meta" : [{ + "title" : "Meta", + "modifier" : "meta", + "keysym" : 65511 + }], + "Latin" : [{ + "title" : "Latin", + "modifier" : "lat" + }], + + "`" : [ + { "title" : "`", "requires" : [ ] }, + { "title" : "~", "requires" : [ "shift" ] } + ], + "1" : [ + { "title" : "1", "requires" : [ ] }, + { "title" : "!", "requires" : [ "shift" ] } + ], + "2" : [ + { "title" : "2", "requires" : [ ] }, + { "title" : "@", "requires" : [ "shift" ] } + ], + "3" : [ + { "title" : "3", "requires" : [ ] }, + { "title" : "#", "requires" : [ "shift" ] } + ], + "4" : [ + { "title" : "4", "requires" : [ ] }, + { "title" : "$", "requires" : [ "shift" ] } + ], + "5" : [ + { "title" : "5", "requires" : [ ] }, + { "title" : "%", "requires" : [ "shift" ] } + ], + "6" : [ + { "title" : "6", "requires" : [ ] }, + { "title" : "^", "requires" : [ "shift" ] } + ], + "7" : [ + { "title" : "7", "requires" : [ ] }, + { "title" : "&", "requires" : [ "shift" ] } + ], + "8" : [ + { "title" : "8", "requires" : [ ] }, + { "title" : "*", "requires" : [ "shift" ] } + ], + "9" : [ + { "title" : "9", "requires" : [ ] }, + { "title" : "(", "requires" : [ "shift" ] } + ], + "0" : [ + { "title" : "0", "requires" : [ ] }, + { "title" : ")", "requires" : [ "shift" ] } + ], + "-" : [ + { "title" : "-", "requires" : [ ] }, + { "title" : "_", "requires" : [ "shift" ] } + ], + "=" : [ + { "title" : "=", "requires" : [ ] }, + { "title" : "+", "requires" : [ "shift" ] } + ], + "б" : [ + { "title" : "б", "requires" : [ ] }, + { "title" : "Б", "requires" : [ "caps" ] }, + { "title" : "Б", "requires" : [ "shift" ] }, + { "title" : "б", "requires" : [ "caps", "shift" ] }, + { "title" : ",", "requires" : [ "lat" ] }, + { "title" : "<", "requires" : [ "lat", "shift" ] } + ], + "ю" : [ + { "title" : "ю", "requires" : [ ] }, + { "title" : "Ю", "requires" : [ "caps" ] }, + { "title" : "Ю", "requires" : [ "shift" ] }, + { "title" : "ю", "requires" : [ "caps", "shift" ] }, + { "title" : ".", "requires" : [ "lat" ] }, + { "title" : ">", "requires" : [ "lat", "shift" ] } + ], + "/" : [ + { "title" : "/", "requires" : [ ] }, + { "title" : "?", "requires" : [ "shift" ] } + ], + "х" : [ + { "title" : "х", "requires" : [ ] }, + { "title" : "Х", "requires" : [ "caps" ] }, + { "title" : "Х", "requires" : [ "shift" ] }, + { "title" : "х", "requires" : [ "caps", "shift" ] }, + { "title" : "[", "requires" : [ "lat" ] }, + { "title" : "{", "requires" : [ "lat", "shift" ] } + ], + "ъ" : [ + { "title" : "ъ", "requires" : [ ] }, + { "title" : "Ъ", "requires" : [ "caps" ] }, + { "title" : "Ъ", "requires" : [ "shift" ] }, + { "title" : "ъ", "requires" : [ "caps", "shift" ] }, + { "title" : "]", "requires" : [ "lat" ] }, + { "title" : "}", "requires" : [ "lat", "shift" ] } + ], + "\\" : [ + { "title" : "\\", "requires" : [ ] }, + { "title" : "|", "requires" : [ "shift" ] } + ], + "ж" : [ + { "title" : "ж", "requires" : [ ] }, + { "title" : "Ж", "requires" : [ "caps" ] }, + { "title" : "Ж", "requires" : [ "shift" ] }, + { "title" : "ж", "requires" : [ "caps", "shift" ] }, + { "title" : ";", "requires" : [ "lat" ] }, + { "title" : ":", "requires" : [ "lat", "shift" ] } + ], + "э" : [ + { "title" : "э", "requires" : [ ] }, + { "title" : "Э", "requires" : [ "caps" ] }, + { "title" : "Э", "requires" : [ "shift" ] }, + { "title" : "э", "requires" : [ "caps", "shift" ] }, + { "title" : "'", "requires" : [ "lat" ] }, + { "title" : "\"", "requires" : [ "lat", "shift" ] } + ], + + "й" : [ + { "title" : "й", "requires" : [ ] }, + { "title" : "Й", "requires" : [ "caps" ] }, + { "title" : "Й", "requires" : [ "shift" ] }, + { "title" : "й", "requires" : [ "caps", "shift" ] }, + { "title" : "q", "requires" : [ "lat" ] }, + { "title" : "Q", "requires" : [ "lat", "caps" ] }, + { "title" : "Q", "requires" : [ "lat", "shift" ] }, + { "title" : "q", "requires" : [ "lat", "caps", "shift" ] } + ], + "ц" : [ + { "title" : "ц", "requires" : [ ] }, + { "title" : "Ц", "requires" : [ "caps" ] }, + { "title" : "Ц", "requires" : [ "shift" ] }, + { "title" : "ц", "requires" : [ "caps", "shift" ] }, + { "title" : "w", "requires" : [ "lat" ] }, + { "title" : "W", "requires" : [ "lat", "caps" ] }, + { "title" : "W", "requires" : [ "lat", "shift" ] }, + { "title" : "w", "requires" : [ "lat", "caps", "shift" ] } + ], + "у" : [ + { "title" : "у", "requires" : [ ] }, + { "title" : "У", "requires" : [ "caps" ] }, + { "title" : "У", "requires" : [ "shift" ] }, + { "title" : "у", "requires" : [ "caps", "shift" ] }, + { "title" : "e", "requires" : [ "lat" ] }, + { "title" : "E", "requires" : [ "lat", "caps" ] }, + { "title" : "E", "requires" : [ "lat", "shift" ] }, + { "title" : "e", "requires" : [ "lat", "caps", "shift" ] } + ], + "к" : [ + { "title" : "к", "requires" : [ ] }, + { "title" : "К", "requires" : [ "caps" ] }, + { "title" : "К", "requires" : [ "shift" ] }, + { "title" : "к", "requires" : [ "caps", "shift" ] }, + { "title" : "r", "requires" : [ "lat" ] }, + { "title" : "R", "requires" : [ "lat", "caps" ] }, + { "title" : "R", "requires" : [ "lat", "shift" ] }, + { "title" : "r", "requires" : [ "lat", "caps", "shift" ] } + ], + "е" : [ + { "title" : "е", "requires" : [ ] }, + { "title" : "Е", "requires" : [ "caps" ] }, + { "title" : "Е", "requires" : [ "shift" ] }, + { "title" : "е", "requires" : [ "caps", "shift" ] }, + { "title" : "t", "requires" : [ "lat" ] }, + { "title" : "T", "requires" : [ "lat", "caps" ] }, + { "title" : "T", "requires" : [ "lat", "shift" ] }, + { "title" : "t", "requires" : [ "lat", "caps", "shift" ] } + ], + "н" : [ + { "title" : "н", "requires" : [ ] }, + { "title" : "Н", "requires" : [ "caps" ] }, + { "title" : "Н", "requires" : [ "shift" ] }, + { "title" : "н", "requires" : [ "caps", "shift" ] }, + { "title" : "y", "requires" : [ "lat" ] }, + { "title" : "Y", "requires" : [ "lat", "caps" ] }, + { "title" : "Y", "requires" : [ "lat", "shift" ] }, + { "title" : "y", "requires" : [ "lat", "caps", "shift" ] } + ], + "г" : [ + { "title" : "г", "requires" : [ ] }, + { "title" : "Г", "requires" : [ "caps" ] }, + { "title" : "Г", "requires" : [ "shift" ] }, + { "title" : "г", "requires" : [ "caps", "shift" ] }, + { "title" : "u", "requires" : [ "lat" ] }, + { "title" : "U", "requires" : [ "lat", "caps" ] }, + { "title" : "U", "requires" : [ "lat", "shift" ] }, + { "title" : "u", "requires" : [ "lat", "caps", "shift" ] } + ], + "ш" : [ + { "title" : "ш", "requires" : [ ] }, + { "title" : "Ш", "requires" : [ "caps" ] }, + { "title" : "Ш", "requires" : [ "shift" ] }, + { "title" : "ш", "requires" : [ "caps", "shift" ] }, + { "title" : "i", "requires" : [ "lat" ] }, + { "title" : "I", "requires" : [ "lat", "caps" ] }, + { "title" : "I", "requires" : [ "lat", "shift" ] }, + { "title" : "i", "requires" : [ "lat", "caps", "shift" ] } + ], + "щ" : [ + { "title" : "щ", "requires" : [ ] }, + { "title" : "Щ", "requires" : [ "caps" ] }, + { "title" : "Щ", "requires" : [ "shift" ] }, + { "title" : "щ", "requires" : [ "caps", "shift" ] }, + { "title" : "o", "requires" : [ "lat" ] }, + { "title" : "O", "requires" : [ "lat", "caps" ] }, + { "title" : "O", "requires" : [ "lat", "shift" ] }, + { "title" : "o", "requires" : [ "lat", "caps", "shift" ] } + ], + "з" : [ + { "title" : "з", "requires" : [ ] }, + { "title" : "З", "requires" : [ "caps" ] }, + { "title" : "З", "requires" : [ "shift" ] }, + { "title" : "з", "requires" : [ "caps", "shift" ] }, + { "title" : "p", "requires" : [ "lat" ] }, + { "title" : "P", "requires" : [ "lat", "caps" ] }, + { "title" : "P", "requires" : [ "lat", "shift" ] }, + { "title" : "p", "requires" : [ "lat", "caps", "shift" ] } + ], + "ф" : [ + { "title" : "ф", "requires" : [ ] }, + { "title" : "Ф", "requires" : [ "caps" ] }, + { "title" : "Ф", "requires" : [ "shift" ] }, + { "title" : "ф", "requires" : [ "caps", "shift" ] }, + { "title" : "a", "requires" : [ "lat" ] }, + { "title" : "A", "requires" : [ "lat", "caps" ] }, + { "title" : "A", "requires" : [ "lat", "shift" ] }, + { "title" : "a", "requires" : [ "lat", "caps", "shift" ] } + ], + "ы" : [ + { "title" : "ы", "requires" : [ ] }, + { "title" : "Ы", "requires" : [ "caps" ] }, + { "title" : "Ы", "requires" : [ "shift" ] }, + { "title" : "ы", "requires" : [ "caps", "shift" ] }, + { "title" : "s", "requires" : [ "lat" ] }, + { "title" : "S", "requires" : [ "lat", "caps" ] }, + { "title" : "S", "requires" : [ "lat", "shift" ] }, + { "title" : "s", "requires" : [ "lat", "caps", "shift" ] } + ], + "в" : [ + { "title" : "в", "requires" : [ ] }, + { "title" : "В", "requires" : [ "caps" ] }, + { "title" : "В", "requires" : [ "shift" ] }, + { "title" : "в", "requires" : [ "caps", "shift" ] }, + { "title" : "d", "requires" : [ "lat" ] }, + { "title" : "D", "requires" : [ "lat", "caps" ] }, + { "title" : "D", "requires" : [ "lat", "shift" ] }, + { "title" : "d", "requires" : [ "lat", "caps", "shift" ] } + ], + "а" : [ + { "title" : "а", "requires" : [ ] }, + { "title" : "А", "requires" : [ "caps" ] }, + { "title" : "А", "requires" : [ "shift" ] }, + { "title" : "а", "requires" : [ "caps", "shift" ] }, + { "title" : "f", "requires" : [ "lat" ] }, + { "title" : "F", "requires" : [ "lat", "caps" ] }, + { "title" : "F", "requires" : [ "lat", "shift" ] }, + { "title" : "f", "requires" : [ "lat", "caps", "shift" ] } + ], + "п" : [ + { "title" : "п", "requires" : [ ] }, + { "title" : "П", "requires" : [ "caps" ] }, + { "title" : "П", "requires" : [ "shift" ] }, + { "title" : "п", "requires" : [ "caps", "shift" ] }, + { "title" : "g", "requires" : [ "lat" ] }, + { "title" : "G", "requires" : [ "lat", "caps" ] }, + { "title" : "G", "requires" : [ "lat", "shift" ] }, + { "title" : "g", "requires" : [ "lat", "caps", "shift" ] } + ], + "р" : [ + { "title" : "р", "requires" : [ ] }, + { "title" : "Р", "requires" : [ "caps" ] }, + { "title" : "Р", "requires" : [ "shift" ] }, + { "title" : "р", "requires" : [ "caps", "shift" ] }, + { "title" : "h", "requires" : [ "lat" ] }, + { "title" : "H", "requires" : [ "lat", "caps" ] }, + { "title" : "H", "requires" : [ "lat", "shift" ] }, + { "title" : "h", "requires" : [ "lat", "caps", "shift" ] } + ], + "о" : [ + { "title" : "о", "requires" : [ ] }, + { "title" : "О", "requires" : [ "caps" ] }, + { "title" : "О", "requires" : [ "shift" ] }, + { "title" : "о", "requires" : [ "caps", "shift" ] }, + { "title" : "j", "requires" : [ "lat" ] }, + { "title" : "J", "requires" : [ "lat", "caps" ] }, + { "title" : "J", "requires" : [ "lat", "shift" ] }, + { "title" : "j", "requires" : [ "lat", "caps", "shift" ] } + ], + "л" : [ + { "title" : "л", "requires" : [ ] }, + { "title" : "Л", "requires" : [ "caps" ] }, + { "title" : "Л", "requires" : [ "shift" ] }, + { "title" : "л", "requires" : [ "caps", "shift" ] }, + { "title" : "k", "requires" : [ "lat" ] }, + { "title" : "K", "requires" : [ "lat", "caps" ] }, + { "title" : "K", "requires" : [ "lat", "shift" ] }, + { "title" : "k", "requires" : [ "lat", "caps", "shift" ] } + ], + "д" : [ + { "title" : "д", "requires" : [ ] }, + { "title" : "Д", "requires" : [ "caps" ] }, + { "title" : "Д", "requires" : [ "shift" ] }, + { "title" : "д", "requires" : [ "caps", "shift" ] }, + { "title" : "l", "requires" : [ "lat" ] }, + { "title" : "L", "requires" : [ "lat", "caps" ] }, + { "title" : "L", "requires" : [ "lat", "shift" ] }, + { "title" : "l", "requires" : [ "lat", "caps", "shift" ] } + ], + "я" : [ + { "title" : "я", "requires" : [ ] }, + { "title" : "Я", "requires" : [ "caps" ] }, + { "title" : "Я", "requires" : [ "shift" ] }, + { "title" : "я", "requires" : [ "caps", "shift" ] }, + { "title" : "z", "requires" : [ "lat" ] }, + { "title" : "Z", "requires" : [ "lat", "caps" ] }, + { "title" : "Z", "requires" : [ "lat", "shift" ] }, + { "title" : "z", "requires" : [ "lat", "caps", "shift" ] } + ], + "ч" : [ + { "title" : "ч", "requires" : [ ] }, + { "title" : "Ч", "requires" : [ "caps" ] }, + { "title" : "Ч", "requires" : [ "shift" ] }, + { "title" : "ч", "requires" : [ "caps", "shift" ] }, + { "title" : "x", "requires" : [ "lat" ] }, + { "title" : "X", "requires" : [ "lat", "caps" ] }, + { "title" : "X", "requires" : [ "lat", "shift" ] }, + { "title" : "x", "requires" : [ "lat", "caps", "shift" ] } + ], + "с" : [ + { "title" : "с", "requires" : [ ] }, + { "title" : "С", "requires" : [ "caps" ] }, + { "title" : "С", "requires" : [ "shift" ] }, + { "title" : "с", "requires" : [ "caps", "shift" ] }, + { "title" : "c", "requires" : [ "lat" ] }, + { "title" : "C", "requires" : [ "lat", "caps" ] }, + { "title" : "C", "requires" : [ "lat", "shift" ] }, + { "title" : "c", "requires" : [ "lat", "caps", "shift" ] } + ], + "м" : [ + { "title" : "м", "requires" : [ ] }, + { "title" : "М", "requires" : [ "caps" ] }, + { "title" : "М", "requires" : [ "shift" ] }, + { "title" : "м", "requires" : [ "caps", "shift" ] }, + { "title" : "v", "requires" : [ "lat" ] }, + { "title" : "V", "requires" : [ "lat", "caps" ] }, + { "title" : "V", "requires" : [ "lat", "shift" ] }, + { "title" : "v", "requires" : [ "lat", "caps", "shift" ] } + ], + "и" : [ + { "title" : "и", "requires" : [ ] }, + { "title" : "И", "requires" : [ "caps" ] }, + { "title" : "И", "requires" : [ "shift" ] }, + { "title" : "и", "requires" : [ "caps", "shift" ] }, + { "title" : "b", "requires" : [ "lat" ] }, + { "title" : "B", "requires" : [ "lat", "caps" ] }, + { "title" : "B", "requires" : [ "lat", "shift" ] }, + { "title" : "b", "requires" : [ "lat", "caps", "shift" ] } + ], + "т" : [ + { "title" : "т", "requires" : [ ] }, + { "title" : "Т", "requires" : [ "caps" ] }, + { "title" : "Т", "requires" : [ "shift" ] }, + { "title" : "т", "requires" : [ "caps", "shift" ] }, + { "title" : "n", "requires" : [ "lat" ] }, + { "title" : "N", "requires" : [ "lat", "caps" ] }, + { "title" : "N", "requires" : [ "lat", "shift" ] }, + { "title" : "n", "requires" : [ "lat", "caps", "shift" ] } + ], + "ь" : [ + { "title" : "ь", "requires" : [ ] }, + { "title" : "Ь", "requires" : [ "caps" ] }, + { "title" : "Ь", "requires" : [ "shift" ] }, + { "title" : "ь", "requires" : [ "caps", "shift" ] }, + { "title" : "m", "requires" : [ "lat" ] }, + { "title" : "M", "requires" : [ "lat", "caps" ] }, + { "title" : "M", "requires" : [ "lat", "shift" ] }, + { "title" : "m", "requires" : [ "lat", "caps", "shift" ] } + ] + + }, + + "layout" : [ + + { + "top" : { + "function": [ + + [ "Esc", 0.7, "F1", "F2", "F3", "F4", + 0.7, "F5", "F6", "F7", "F8", + 0.7, "F9", "F10", "F11", "F12" ] + + ], + + "virtual": [ + + [ "Latin" ] + + ] + } + }, + + [ 0.1 ], + + { + "main" : { + "alpha" : [ + + [ "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "Back" ], + [ "Tab", "й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "\\" ], + [ "Caps", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "Enter" ], + [ "LShift", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю", "/", "RShift" ], + [ "LCtrl", "Meta", "LAlt", "Space", "RAlt", "Menu", "RCtrl" ] + + ], + + "movement" : [ + [ "Ins", "Home", "PgUp" ], + [ "Del", "End", "PgDn" ], + [ 1.1 ], + [ "Up" ], + [ "Left", "Down", "Right" ] + ] + } + } + + ], + + "keyWidths" : { + + "Back" : 2, + "Tab" : 1.5, + "\\" : 1.5, + "Caps" : 1.85, + "Enter" : 2.25, + "LShift" : 2.1, + "RShift" : 3.1, + + "LCtrl" : 1.6, + "Meta" : 1.6, + "LAlt" : 1.6, + "Space" : 6.1, + "RAlt" : 1.6, + "Menu" : 1.6, + "RCtrl" : 1.6, + + "Latin": 1.6, + "Ins" : 1.6, + "Home" : 1.6, + "PgUp" : 1.6, + "Del" : 1.6, + "End" : 1.6, + "PgDn" : 1.6 + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/client.module.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/client.module.ts new file mode 100644 index 0000000000..da499afa14 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/client.module.ts @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ViewportComponent } from './components/viewport.component'; + +/** + * The module for code used to connect to a connection or balancing group. + */ +@NgModule({ + declarations: [ + ViewportComponent + ], + imports: [ + CommonModule + ], + exports: [ + ViewportComponent + ] +}) +export class ClientLibModule {} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.html b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.html new file mode 100644 index 0000000000..8a7750a711 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.html @@ -0,0 +1,21 @@ + +

      + +
      diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.ts new file mode 100644 index 0000000000..b8b356b1aa --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.ts @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { AfterViewInit, Component, ElementRef, Inject, OnDestroy, ViewChild, ViewEncapsulation } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; + + +/** + * A component which provides a fullscreen environment for its content. + */ +@Component({ + selector: 'guac-viewport', + templateUrl: './viewport.component.html', + encapsulation: ViewEncapsulation.None +}) +export class ViewportComponent implements AfterViewInit, OnDestroy { + + private readonly window: Window; + + /** + * The wrapped fullscreen container element. + */ + @ViewChild('viewport') elementRef!: ElementRef; + + /** + * The fullscreen container element. + */ + element!: HTMLElement; + + /** + * The width of the browser viewport when fitVisibleArea() was last + * invoked, in pixels, or null if fitVisibleArea() has not yet been + * called. + */ + lastViewportWidth?: number = undefined; + + /** + * The height of the browser viewport when fitVisibleArea() was + * last invoked, in pixels, or null if fitVisibleArea() has not yet + * been called. + */ + lastViewportHeight?: number = undefined; + private pollArea?: number; + + constructor(@Inject(DOCUMENT) private document: Document,) { + this.window = this.document.defaultView as Window; + } + + ngAfterViewInit(): void { + this.element = this.elementRef.nativeElement; + + // Fit container within visible region when window scrolls + this.window.addEventListener('scroll', this.fitVisibleArea); + + // Poll every 10ms, in case scroll event does not fire + this.pollArea = this.window.setInterval(() => this.fitVisibleArea(), 10); + } + + ngOnDestroy(): void { + // Clean up on destruction + this.window.removeEventListener('scroll', this.fitVisibleArea); + this.window.clearInterval(this.pollArea); + } + + /** + * Resizes the container element inside the guacViewport such that + * it exactly fits within the visible area, even if the browser has + * been scrolled. + */ + fitVisibleArea(): void { + + // Calculate viewport dimensions (this is NOT necessarily the + // same as 100vw and 100vh, 100%, etc., particularly when the + // on-screen keyboard of a mobile device pops open) + const viewportWidth = this.window.innerWidth; + const viewportHeight = this.window.innerHeight; + + // Adjust element width to fit exactly within visible area + if (viewportWidth !== this.lastViewportWidth) { + this.element.style.width = viewportWidth + 'px'; + this.lastViewportWidth = viewportWidth; + } + + // Adjust this.element height to fit exactly within visible area + if (viewportHeight !== this.lastViewportHeight) { + this.element.style.height = viewportHeight + 'px'; + this.lastViewportHeight = viewportHeight; + } + + // Scroll this.element such that its upper-left corner is exactly + // within the viewport upper-left corner, if not already there + if (this.element.scrollLeft || this.element.scrollTop) { + this.window.scrollTo( + this.window.scrollX + this.element.scrollLeft, + this.window.scrollY + this.element.scrollTop + ); + } + + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.spec.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.spec.ts new file mode 100644 index 0000000000..c7ec733f0b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.spec.ts @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { GuacAudioService } from './guac-audio.service'; + +describe('GuacAudioService', () => { + let service: GuacAudioService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(GuacAudioService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should support at least one audio type', () => { + expect(service.supported).not.toBe([]); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.ts new file mode 100644 index 0000000000..75f4fe1bab --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.ts @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +/** + * A service for checking browser audio support. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacAudioService { + + /** + * Array of all supported audio mimetypes. + */ + supported: string[]; + + /** + * Object describing the UI's level of audio support. + */ + constructor() { + this.supported = Guacamole.AudioPlayer.getSupportedTypes(); + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.spec.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.spec.ts new file mode 100644 index 0000000000..baf4bfe90e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.spec.ts @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; +import { GuacImageService } from "./guac-image.service"; + +describe('GuacImageService', () => { + let service: GuacImageService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(GuacImageService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should return that all image types are supported', async () => { + const supported = await service.getSupportedMimetypes(); + expect(supported).toEqual(['image/jpeg', 'image/png', 'image/webp']); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.ts new file mode 100644 index 0000000000..3544140a91 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.ts @@ -0,0 +1,140 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +/** + * A service for checking browser image support. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacImageService { + + /** + * Map of possibly-supported image mimetypes to corresponding test images + * encoded with base64. If the image is correctly decoded, it will be a + * single pixel (1x1) image. + */ + private testImages: Record = { + + /** + * Test JPEG image, encoded as base64. + */ + 'image/jpeg': + '/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoH' + + 'BwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQME' + + 'BAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU' + + 'FBQUFBQUFBQUFBQUFBT/wAARCAABAAEDAREAAhEBAxEB/8QAFAABAAAAAAAAAAA' + + 'AAAAAAAAACf/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAUAQEAAAAAAAAAAAAAAA' + + 'AAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AVMH/2Q==', + + /** + * Test PNG image, encoded as base64. + */ + 'image/png': + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEX///+nxBvI' + + 'AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==', + + /** + * Test WebP image, encoded as base64. + */ + 'image/webp': 'UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==' + + } + + /** + * The resolve function associated with {@link deferredSupportedMimetypes}. + */ + private deferredSupportedMimetypesResolve?: (value: string[] | PromiseLike) => void; + + /** + * Deferred which tracks the progress and ultimate result of all pending + * image format tests. + * + */ + private deferredSupportedMimetypes: Promise = + new Promise((resolve) => { + return this.deferredSupportedMimetypesResolve = resolve; + }); + + /** + * Array of all promises associated with pending image tests. Each image + * test promise MUST be guaranteed to resolve and MUST NOT be rejected. + */ + private pendingTests: Promise[] = []; + + /** + * The array of supported image formats. This will be gradually populated + * by the various image tests that occur in the background, and will not be + * fully populated until all promises within pendingTests are resolved. + */ + private supported: string[] = []; + + /** + * Return a promise which resolves with to an array of image mimetypes + * supported by the browser, once those mimetypes are known. The returned + * promise is guaranteed to resolve successfully. + * + * @returns + * A promise which resolves with an array of image mimetypes supported + * by the browser. + */ + getSupportedMimetypes(): Promise { + return this.deferredSupportedMimetypes; + }; + + constructor() { + // Test each possibly-supported image + for (let mimetype in this.testImages) { + const data = this.testImages[mimetype]; + + // Add promise for current image test + const imageTest = new Promise((resolve) => { + // Attempt to load image + const image = new Image(); + image.src = 'data:' + mimetype + ';base64,' + data; + + // Store as supported depending on whether load was successful + image.onload = image.onerror = () => { + // imageTestComplete + + // Image format is supported if successfully decoded + if (image.width === 1 && image.height === 1) + this.supported.push(mimetype); + + // Test is complete + resolve(); + + }; + }); + + this.pendingTests.push(imageTest); + + } + + // When all image tests are complete, resolve promise with list of + // supported formats + Promise.all(this.pendingTests).then(() => { + this.deferredSupportedMimetypesResolve?.(this.supported); + }); + + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.spec.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.spec.ts new file mode 100644 index 0000000000..d4e45ca496 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.spec.ts @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { GuacVideoService } from './guac-video.service'; + +describe('GuacVideoService', () => { + let service: GuacVideoService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(GuacVideoService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.ts new file mode 100644 index 0000000000..25011ae697 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.ts @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +/** + * A service for checking browser video support. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacVideoService { + + /** + * Array of all supported video mimetypes. + */ + supported: string[]; + + /** + * Object describing the UI's level of video support. + */ + constructor() { + this.supported = Guacamole.VideoPlayer.getSupportedTypes(); + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts new file mode 100644 index 0000000000..6bbcf7f9f1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, HostListener, Input } from '@angular/core'; +import { GuacEventService } from "../../events/services/guac-event.service"; +import { GuacEventArguments } from "../../events/types/GuacEventArguments"; + +/** + * A callback that is invoked by the guacClick directive when a + * click or click-like event is received. + * + * @param shift + * Whether Shift was held down at the time the click occurred. + * + * @param ctrl + * Whether Ctrl or Meta (the Mac "Command" key) was held down + * at the time the click occurred. + */ +export type GuacClickCallback = (shift: boolean, ctrl: boolean) => void; + +/** + * A directive which provides handling of click and click-like touch events. + * The state of Shift and Ctrl modifiers is tracked through these click events + * to allow for specific handling of Shift+Click and Ctrl+Click. + */ +@Directive({ + selector: '[guacClick]' +}) +export class GuacClickDirective { + + /** + * A callback that is invoked by the guacClick directive when a + * click or click-like event is received. + */ + @Input({required: true}) guacClick!: GuacClickCallback; + + /** + * The element which will register the click. + */ + element: Element; + + /** + * Whether either Shift key is currently pressed. + */ + shift: boolean = false; + + /** + * Whether either Ctrl key is currently pressed. To allow the + * Command key to be used on Mac platforms, this flag also + * considers the state of either Meta key. + */ + ctrl: boolean = false; + + // Fire provided callback for each mouse-initiated "click" event ... + @HostListener('click', ['$event']) elementClicked(e: MouseEvent) { + if (this.element.contains(e.target as Node)) { + this.guacClick(this.shift, this.ctrl); + } + } + + // ... and for touch-initiated click-like events + @HostListener('touchstart', ['$event']) elementTouched(e: Event) { + if (this.element.contains(e.target as Node)) { + this.guacClick(this.shift, this.ctrl); + } + } + + constructor(private el: ElementRef, + private guacEventService: GuacEventService) { + this.element = el.nativeElement; + + // Update tracking of modifier states for each key press + this.guacEventService.on('guacKeydown', ({keyboard}) => { + this.updateModifiers(keyboard); + }); + + // Update tracking of modifier states for each key release + this.guacEventService.on('guacKeyup', ({keyboard}) => { + this.updateModifiers(keyboard); + }); + } + + /** + * Updates the state of the {@link shift} and {@link ctrl} flags + * based on which keys are currently marked as held down by the + * given Guacamole.Keyboard. + * + * @param {Guacamole.Keyboard} keyboard + * The Guacamole.Keyboard instance to read key states from. + */ + updateModifiers(keyboard: Guacamole.Keyboard) { + + this.shift = !!( + keyboard.pressed[0xFFE1] // Left shift + || keyboard.pressed[0xFFE2] // Right shift + ); + + this.ctrl = !!( + keyboard.pressed[0xFFE3] // Left ctrl + || keyboard.pressed[0xFFE4] // Right ctrl + || keyboard.pressed[0xFFE7] // Left meta (command) + || keyboard.pressed[0xFFE8] // Right meta (command) + ); + + }; + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-focus.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-focus.directive.ts new file mode 100644 index 0000000000..45cd75cf71 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-focus.directive.ts @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; + +/** + * A directive which allows elements to be manually focused / blurred. + */ +@Directive({ + selector: '[guacFocus]' +}) +export class GuacFocusDirective implements OnInit, OnChanges { + + /** + * Whether the element associated with this directive should be + * focussed. + */ + @Input() guacFocus?: boolean; + + /** + * The element which will be focused / blurred. + */ + element: any; + + constructor(private el: ElementRef) { + this.element = el.nativeElement; + } + + ngOnInit() { + this.updateFocus(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes['guacFocus']) + this.updateFocus(); + } + + /** + * Set/unset focus depending on value of guacFocus. + */ + updateFocus() { + if (this.guacFocus) { + this.element.focus(); + } else { + this.element.blur(); + } + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts new file mode 100644 index 0000000000..d477163fcf --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, Inject, Input } from '@angular/core'; +import { DOCUMENT } from "@angular/common"; + +/** + * A directive which calls a given callback when its associated element is + * resized. This will modify the internal DOM tree of the associated element, + * and the associated element MUST have position (for example, + * "position: relative"). + */ +@Directive({ + selector: '[guacResize]' +}) +export class GuacResizeDirective { + + /** + * The function to call whenever the associated element is + * resized. The function will be passed the width and height of + * the element, in pixels. + */ + @Input({required: true}) guacResize!: (width: number, height: number) => void; + + /** + * The element which will monitored for size changes. + */ + element: any; + + /** + * The resize sensor - an HTML object element. + */ + resizeSensor: HTMLObjectElement; + + /** + * The width of the associated element, in pixels. + */ + lastWidth: number; + + /** + * The height of the associated element, in pixels. + */ + lastHeight: number; + + constructor(private el: ElementRef, @Inject(DOCUMENT) private document: Document) { + this.element = el.nativeElement; + this.lastWidth = this.element.offsetWidth; + this.lastHeight = this.element.offsetHeight; + + this.resizeSensor = this.document.createElement('object'); + + // Register event listener once window object exists + this.resizeSensor.onload = () => { + this.resizeSensor.contentDocument?.defaultView?.addEventListener('resize', () => this.checkSize()); + this.checkSize(); + }; + + // Load blank contents + this.resizeSensor.style.cssText = 'height: 100%; width: 100%; position: absolute; left: 0; top: 0; overflow: hidden; border: none; opacity: 0; z-index: -1;'; + this.resizeSensor.type = 'text/html'; + this.resizeSensor.innerHTML = ` + + + + + _ + + + + `; + + // Add resize sensor to associated element + this.element.insertBefore(this.resizeSensor, this.element.firstChild); + } + + /** + * Checks whether the size of the associated element has changed + * and, if so, calls the resize callback with the new width and + * height as parameters. + */ + checkSize(): void { + // Call callback only if size actually changed + if (this.element.offsetWidth !== this.lastWidth + || this.element.offsetHeight !== this.lastHeight) { + + // Call resize callback, if defined + this.guacResize(this.element.offsetWidth, this.element.offsetHeight); + + // Update stored size + this.lastWidth = this.element.offsetWidth; + this.lastHeight = this.element.offsetHeight; + + } + + }; + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-scroll.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-scroll.directive.ts new file mode 100644 index 0000000000..f3180a227d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-scroll.directive.ts @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Directive, + ElementRef, + Input, + OnChanges, + SimpleChanges +} from '@angular/core'; +import { ScrollState } from "../types/ScrollState"; + +/** + * A directive which allows elements to be manually scrolled, and for their + * scroll state to be observed. + */ +@Directive({ + selector: '[guacScroll]' +}) +export class GuacScrollDirective implements OnChanges { + + /** + * The current scroll state of the element. + */ + @Input({required: false}) guacScroll!: ScrollState; + + /** + * The element which is being scrolled, or monitored for changes + * in scroll. + */ + element: Element; + + constructor(el: ElementRef) { + this.element = el.nativeElement; + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes['guacScroll']) { + const currentValue = changes['guacScroll'].currentValue as ScrollState; + const previousValue = changes['guacScroll'].previousValue as ScrollState | undefined; + + // Update underlying scrollLeft property when left changes + if (currentValue.left !== previousValue?.left) { + this.element.scrollLeft = currentValue.left; + this.guacScroll.left = this.element.scrollLeft; + } + + // Update underlying scrollTop property when top changes + if (currentValue.top !== previousValue?.top) { + this.element.scrollTop = currentValue.top; + this.guacScroll.top = this.element.scrollTop; + } + } + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-upload.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-upload.directive.ts new file mode 100644 index 0000000000..e8cbfbff3b --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-upload.directive.ts @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ChangeDetectorRef, Directive, ElementRef, Inject, Input, OnInit } from '@angular/core'; +import { DOCUMENT } from "@angular/common"; + +/** + * A directive which allows files to be uploaded. Clicking on the associated + * element will result in a file selector dialog, which then calls the provided + * callback function with any chosen files. + */ +@Directive({ + selector: '[guacUpload]' +}) +export class GuacUploadDirective implements OnInit { + + /** + * The function to call whenever files are chosen. The callback is + * provided a single parameter: the FileList containing all chosen + * files. + */ + @Input({required: true}) guacUpload!: (files: FileList) => void; + + /** + * Whether upload of multiple files should be allowed. If false, the + * file dialog will only allow a single file to be chosen at once, + * otherwise any number of files may be chosen. Defaults to true if + * not set. + */ + @Input() guacMultiple = true; + + /** + * The element which will register the click. + */ + element: Element; + + /** + * Internal form, containing a single file input element. + * + * @type HTMLFormElement + */ + readonly form: HTMLFormElement; + + /** + * Internal file input element. + * + * @type HTMLInputElement + */ + readonly input: HTMLInputElement; + + constructor(private el: ElementRef, + @Inject(DOCUMENT) private document: Document, + private cdr: ChangeDetectorRef) { + this.element = el.nativeElement; + this.form = this.document.createElement('form'); + this.input = this.document.createElement('input'); + } + + ngOnInit(): void { + // Init input element + this.input.type = 'file'; + this.input.multiple = this.guacMultiple; + + // Add input element to internal form + this.form.appendChild(this.input); + + // Notify of any chosen files + this.input.addEventListener('change', () => { + + // Only set chosen files selection is not canceled + if (this.input.files && this.input.files.length > 0) + this.guacUpload(this.input.files); + + // Reset selection + this.form.reset(); + this.cdr.detectChanges(); + }); + + // Open file chooser when element is clicked + this.element.addEventListener('click', () => { + this.input.click(); + }); + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/element.module.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/element.module.ts new file mode 100644 index 0000000000..c76542997e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/element.module.ts @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GuacClickDirective } from './directives/guac-click.directive'; +import { GuacFocusDirective } from './directives/guac-focus.directive'; + import { GuacResizeDirective } from './directives/guac-resize.directive'; +import { GuacScrollDirective } from './directives/guac-scroll.directive'; +import { GuacUploadDirective } from './directives/guac-upload.directive'; + +/** + * Module for manipulating element state, such as focus or scroll position, as + * well as handling browser events. + */ +@NgModule({ + declarations: [ + GuacClickDirective, + GuacFocusDirective, + GuacResizeDirective, + GuacScrollDirective, + GuacUploadDirective + ], + imports: [ + CommonModule + ], + exports: [ + GuacClickDirective, + GuacFocusDirective, + GuacResizeDirective, + GuacScrollDirective, + GuacUploadDirective + ] +}) +export class ElementModule { +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/styles/resize-sensor.css b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/styles/resize-sensor.css new file mode 100644 index 0000000000..9f308eb471 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/styles/resize-sensor.css @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.resize-sensor { + height: 100%; + width: 100%; + position: absolute; + left: 0; + top: 0; + overflow: hidden; + border: none; + opacity: 0; + z-index: -1; +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/Marker.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/Marker.ts new file mode 100644 index 0000000000..ccf5d35954 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/Marker.ts @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the Marker class definition. + */ +export class Marker { + + /** + * Creates a new Marker which allows its associated element to be scrolled + * into view as desired. + * + * @param {Element} element + * The element to associate with this marker. + */ + constructor(private element: Element) { + } + + /** + * Scrolls scrollable elements, or the window, as needed to bring the + * element associated with this marker into view. + */ + scrollIntoView() { + this.element.scrollIntoView(); + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/ScrollState.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/ScrollState.ts new file mode 100644 index 0000000000..807900797a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/types/ScrollState.ts @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the ScrollState class definition. + */ +export class ScrollState { + + /** + * The left edge of the view rectangle within the scrollable area. This + * value naturally increases as the user scrolls right. + */ + left: number; + + /** + * The top edge of the view rectangle within the scrollable area. This + * value naturally increases as the user scrolls down. + */ + top: number; + + /** + * Creates a new ScrollState, representing the current scroll position of + * an arbitrary element. This constructor initializes the properties of the + * new ScrollState with the corresponding properties of the given template. + * + * @constructor + * @param template + * The object whose properties should be copied within the new + * ScrollState. + */ + constructor(template: Partial = {}) { + this.left = template.left || 0; + this.top = template.top || 0; + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts new file mode 100644 index 0000000000..c65ebb4063 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; +import { GuacEventArguments } from "../types/GuacEventArguments"; + +import { GuacEventService } from './guac-event.service'; + +interface TestEventArgs extends GuacEventArguments { + test: { age: number; } +} + +describe('GuacEventService', () => { + let service: GuacEventService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(GuacEventService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should emit test event', () => { + const age = 25; + + service.on('test', ({age, event}) => { + expect(event.name).toBe('test'); + expect(age).toBe(25) + }); + + service.broadcast('test', {age}); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts new file mode 100644 index 0000000000..3848b3959a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; +import { filter, Subject } from "rxjs"; +import { GuacEvent, GuacEventName } from "../types/GuacEvent"; +import { GuacEventArguments } from "../types/GuacEventArguments"; + +/** + * A callback for the event T. The arguments for the callback are inferred + * based on the Args and Event type parameters. + * + * @template Args + * The type of where the callback arguments for the event are specified. + * + * @template Event + * The type of the event. + */ +export type GuacEventCallback> + = (args: { event: GuacEvent } & Args[Event]) => void + +/** + * Service for broadcasting and subscribing to Guacamole frontend events. + */ +@Injectable({ + providedIn: 'root' +}) +export class GuacEventService { + + /** + * Subject for all Guacamole frontend events. + */ + private events = new Subject(); + + /** + * TODO: Document + * @param eventName + * @param args + */ + broadcast>(eventName: T, args?: Args[T]): GuacEvent { + const guacEvent = {event: new GuacEvent(eventName)}; + const eventArgs = args ? {...args, ...guacEvent} : guacEvent; + this.events.next(eventArgs); + return guacEvent.event; + } + + /** + * TODO: Document + * @param eventName + * @param callback + */ + on>(eventName: T, callback: GuacEventCallback) { + this.events + .pipe(filter(({event}) => eventName === event.name)) + .subscribe((args) => callback(args)); + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEvent.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEvent.ts new file mode 100644 index 0000000000..8e851e125c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEvent.ts @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { GuacEventArguments } from "./GuacEventArguments"; + +export type GuacEventName = keyof T; + +export class GuacEvent { + name: GuacEventName; + + constructor(name: GuacEventName) { + this.name = name; + } + + defaultPrevented: boolean = false + + preventDefault() { + this.defaultPrevented = true; + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEventArguments.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEventArguments.ts new file mode 100644 index 0000000000..e63d9ba696 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/types/GuacEventArguments.ts @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * TODO + */ +export interface GuacEventArguments { + // Keyboard events + guacKeydown: { keysym: number; keyboard: Guacamole.Keyboard; }; + guacKeyup: { keysym: number; keyboard: Guacamole.Keyboard; }; + + // OSK events + guacSyntheticKeydown: { keysym: number; }; + guacSyntheticKeyup: { keysym: number; }; + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html new file mode 100644 index 0000000000..3b28ad449f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html @@ -0,0 +1,20 @@ + +
      +
      diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.spec.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.spec.ts new file mode 100644 index 0000000000..e816803c9c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.spec.ts @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { simulateMouseClick } from "../../../../test-utils/click-helper"; +import { ElementModule } from '../../../element/element.module'; +import { GuacEventService } from "../../../events/services/guac-event.service"; +import { GuacEventArguments } from "../../../events/types/GuacEventArguments"; +import { OskComponent } from './osk.component'; +import { SimpleChange } from "@angular/core"; +import { + HttpClientTestingModule, + HttpTestingController +} from "@angular/common/http/testing"; +import { By } from "@angular/platform-browser"; + +describe('OskComponent', () => { + let component: OskComponent; + let fixture: ComponentFixture; + + let httpTestingController: HttpTestingController; + let guacEventService: GuacEventService; + const layout = 'assets/de-de-qwertz.json'; + const layoutResponse = `{"language":"de_DE","type":"qwertz","width":23,"keys":{"0":[{"title":"0","requires":[]},{"title":"=","requires":["shift"]},{"title":"}","requires":["alt-gr"]}],"1":[{"title":"1","requires":[]},{"title":"!","requires":["shift"]}],"2":[{"title":"2","requires":[]},{"title":"\\"","requires":["shift"]},{"title":"²","requires":["alt-gr"]}],"3":[{"title":"3","requires":[]},{"title":"§","requires":["shift"]},{"title":"³","requires":["alt-gr"]}],"4":[{"title":"4","requires":[]},{"title":"$","requires":["shift"]}],"5":[{"title":"5","requires":[]},{"title":"%","requires":["shift"]}],"6":[{"title":"6","requires":[]},{"title":"&","requires":["shift"]}],"7":[{"title":"7","requires":[]},{"title":"/","requires":["shift"]},{"title":"{","requires":["alt-gr"]}],"8":[{"title":"8","requires":[]},{"title":"(","requires":["shift"]},{"title":"[","requires":["alt-gr"]}],"9":[{"title":"9","requires":[]},{"title":")","requires":["shift"]},{"title":"]","requires":["alt-gr"]}],"Esc":65307,"F1":65470,"F2":65471,"F3":65472,"F4":65473,"F5":65474,"F6":65475,"F7":65476,"F8":65477,"F9":65478,"F10":65479,"F11":65480,"F12":65481,"Space":" ","Back":[{"title":"⟵","keysym":65288}],"Tab":[{"title":"Tab ↹","keysym":65289}],"Enter":[{"title":"↵","keysym":65293}],"Home":[{"title":"Pos 1","keysym":65360}],"PgUp":[{"title":"Bild ↑","keysym":65365}],"PgDn":[{"title":"Bild ↓","keysym":65366}],"End":[{"title":"Ende","keysym":65367}],"Ins":[{"title":"Einfg","keysym":65379}],"Del":[{"title":"Entf","keysym":65535}],"Left":[{"title":"←","keysym":65361}],"Up":[{"title":"↑","keysym":65362}],"Right":[{"title":"→","keysym":65363}],"Down":[{"title":"↓","keysym":65364}],"Menu":[{"title":"Menu","keysym":65383}],"LShift":[{"title":"Shift","modifier":"shift","keysym":65505}],"RShift":[{"title":"Shift","modifier":"shift","keysym":65506}],"LCtrl":[{"title":"Strg","modifier":"control","keysym":65507}],"RCtrl":[{"title":"Strg","modifier":"control","keysym":65508}],"Caps":[{"title":"Caps","modifier":"caps","keysym":65509}],"LAlt":[{"title":"Alt","modifier":"alt","keysym":65513}],"AltGr":[{"title":"AltGr","modifier":"alt-gr","keysym":65027}],"Meta":[{"title":"Meta","modifier":"meta","keysym":65511}],"^":[{"title":"^","requires":[]},{"title":"°","requires":["shift"]}],"ß":[{"title":"ß","requires":[]},{"title":"?","requires":["shift"]},{"title":"\\\\","requires":["alt-gr"]}],"´":[{"title":"´","requires":[]},{"title":"\`","requires":["shift"]}],"+":[{"title":"+","requires":[]},{"title":"*","requires":["shift"]},{"title":"~","requires":["alt-gr"]}],"#":[{"title":"#","requires":[]},{"title":"'","requires":["shift"]}],"<":[{"title":"<","requires":[]},{"title":">","requires":["shift"]},{"title":"|","requires":["alt-gr"]}],",":[{"title":",","requires":[]},{"title":";","requires":["shift"]}],".":[{"title":".","requires":[]},{"title":":","requires":["shift"]}],"-":[{"title":"-","requires":[]},{"title":"_","requires":["shift"]}],"q":[{"title":"q","requires":[]},{"title":"Q","requires":["caps"]},{"title":"Q","requires":["shift"]},{"title":"q","requires":["caps","shift"]},{"title":"@","requires":["alt-gr"]}],"w":[{"title":"w","requires":[]},{"title":"W","requires":["caps"]},{"title":"W","requires":["shift"]},{"title":"w","requires":["caps","shift"]}],"e":[{"title":"e","requires":[]},{"title":"E","requires":["caps"]},{"title":"E","requires":["shift"]},{"title":"e","requires":["caps","shift"]},{"title":"€","requires":["alt-gr"]}],"r":[{"title":"r","requires":[]},{"title":"R","requires":["caps"]},{"title":"R","requires":["shift"]},{"title":"r","requires":["caps","shift"]}],"t":[{"title":"t","requires":[]},{"title":"T","requires":["caps"]},{"title":"T","requires":["shift"]},{"title":"t","requires":["caps","shift"]}],"z":[{"title":"z","requires":[]},{"title":"Z","requires":["caps"]},{"title":"Z","requires":["shift"]},{"title":"z","requires":["caps","shift"]}],"u":[{"title":"u","requires":[]},{"title":"U","requires":["caps"]},{"title":"U","requires":["shift"]},{"title":"u","requires":["caps","shift"]}],"i":[{"title":"i","requires":[]},{"title":"I","requires":["caps"]},{"title":"I","requires":["shift"]},{"title":"i","requires":["caps","shift"]}],"o":[{"title":"o","requires":[]},{"title":"O","requires":["caps"]},{"title":"O","requires":["shift"]},{"title":"o","requires":["caps","shift"]}],"p":[{"title":"p","requires":[]},{"title":"P","requires":["caps"]},{"title":"P","requires":["shift"]},{"title":"p","requires":["caps","shift"]}],"ü":[{"title":"ü","requires":[]},{"title":"Ü","requires":["caps"]},{"title":"Ü","requires":["shift"]},{"title":"ü","requires":["caps","shift"]}],"a":[{"title":"a","requires":[]},{"title":"A","requires":["caps"]},{"title":"A","requires":["shift"]},{"title":"a","requires":["caps","shift"]}],"s":[{"title":"s","requires":[]},{"title":"S","requires":["caps"]},{"title":"S","requires":["shift"]},{"title":"s","requires":["caps","shift"]}],"d":[{"title":"d","requires":[]},{"title":"D","requires":["caps"]},{"title":"D","requires":["shift"]},{"title":"d","requires":["caps","shift"]}],"f":[{"title":"f","requires":[]},{"title":"F","requires":["caps"]},{"title":"F","requires":["shift"]},{"title":"f","requires":["caps","shift"]}],"g":[{"title":"g","requires":[]},{"title":"G","requires":["caps"]},{"title":"G","requires":["shift"]},{"title":"g","requires":["caps","shift"]}],"h":[{"title":"h","requires":[]},{"title":"H","requires":["caps"]},{"title":"H","requires":["shift"]},{"title":"h","requires":["caps","shift"]}],"j":[{"title":"j","requires":[]},{"title":"J","requires":["caps"]},{"title":"J","requires":["shift"]},{"title":"j","requires":["caps","shift"]}],"k":[{"title":"k","requires":[]},{"title":"K","requires":["caps"]},{"title":"K","requires":["shift"]},{"title":"k","requires":["caps","shift"]}],"l":[{"title":"l","requires":[]},{"title":"L","requires":["caps"]},{"title":"L","requires":["shift"]},{"title":"l","requires":["caps","shift"]}],"ö":[{"title":"ö","requires":[]},{"title":"Ö","requires":["caps"]},{"title":"Ö","requires":["shift"]},{"title":"ö","requires":["caps","shift"]}],"ä":[{"title":"ä","requires":[]},{"title":"Ä","requires":["caps"]},{"title":"Ä","requires":["shift"]},{"title":"ä","requires":["caps","shift"]}],"y":[{"title":"y","requires":[]},{"title":"Y","requires":["caps"]},{"title":"Y","requires":["shift"]},{"title":"y","requires":["caps","shift"]}],"x":[{"title":"x","requires":[]},{"title":"X","requires":["caps"]},{"title":"X","requires":["shift"]},{"title":"x","requires":["caps","shift"]}],"c":[{"title":"c","requires":[]},{"title":"C","requires":["caps"]},{"title":"C","requires":["shift"]},{"title":"c","requires":["caps","shift"]}],"v":[{"title":"v","requires":[]},{"title":"V","requires":["caps"]},{"title":"V","requires":["shift"]},{"title":"v","requires":["caps","shift"]}],"b":[{"title":"b","requires":[]},{"title":"B","requires":["caps"]},{"title":"B","requires":["shift"]},{"title":"b","requires":["caps","shift"]}],"n":[{"title":"n","requires":[]},{"title":"N","requires":["caps"]},{"title":"N","requires":["shift"]},{"title":"n","requires":["caps","shift"]}],"m":[{"title":"m","requires":[]},{"title":"M","requires":["caps"]},{"title":"M","requires":["shift"]},{"title":"m","requires":["caps","shift"]},{"title":"µ","requires":["alt-gr"]}]},"layout":[["Esc",0.7,"F1","F2","F3","F4",0.7,"F5","F6","F7","F8",0.7,"F9","F10","F11","F12"],[0.1],{"main":{"alpha":[["^","1","2","3","4","5","6","7","8","9","0","ß","´","Back"],["Tab","q","w","e","r","t","z","u","i","o","p","ü","+",1,0.6],["Caps","a","s","d","f","g","h","j","k","l","ö","ä","#","Enter"],["LShift","<","y","x","c","v","b","n","m",",",".","-","RShift"],["LCtrl","Meta","LAlt","Space","AltGr","Menu","RCtrl"]],"movement":[["Ins","Home","PgUp"],["Del","End","PgDn"],[1],["Up"],["Left","Down","Right"]]}}],"keyWidths":{"Back":2,"Tab":1.5,"\\\\":1.5,"Caps":1.75,"Enter":1.25,"LShift":2,"RShift":2.1,"LCtrl":1.6,"Meta":1.6,"LAlt":1.6,"Space":6.1,"AltGr":1.6,"Menu":1.6,"RCtrl":1.6,"Ins":1.6,"Home":1.6,"PgUp":1.6,"Del":1.6,"End":1.6,"PgDn":1.6}}`; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [OskComponent], + imports: [HttpClientTestingModule, ElementModule], + }) + .compileComponents(); + + httpTestingController = TestBed.inject(HttpTestingController); + guacEventService = TestBed.inject(GuacEventService); + + fixture = TestBed.createComponent(OskComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('loads layout and displays osk', async () => { + component.layout = layout; + fixture.detectChanges(); + component.ngOnChanges({layout: new SimpleChange(undefined, layout, true)}); + + const req = httpTestingController.expectOne(layout); + expect(req.request.method).toEqual('GET'); + req.flush(JSON.parse(layoutResponse)); + + expect(fixture.debugElement.query(By.css('.guac-keyboard'))).toBeTruthy(); + }); + + it('outputs emit events', () => { + spyOn(guacEventService, 'broadcast'); + + component.layout = layout; + fixture.detectChanges(); + component.ngOnChanges({layout: new SimpleChange(undefined, layout, true)}); + + const req = httpTestingController.expectOne(layout); + expect(req.request.method).toEqual('GET'); + req.flush(JSON.parse(layoutResponse)); + + // click div with class 'guac-keyboard-cap' and text 'a' + const divs = fixture.debugElement.queryAll(By.css('.guac-keyboard-cap')); + const divA = divs.find((div) => div.nativeElement.textContent === 'a')?.nativeElement; + + simulateMouseClick(divA); + + expect(guacEventService.broadcast).toHaveBeenCalledWith('guacSyntheticKeydown', {keysym: 97}); + expect(guacEventService.broadcast).toHaveBeenCalledWith('guacSyntheticKeyup', {keysym: 97}); + + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts new file mode 100644 index 0000000000..a3e1a23aaf --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + Component, ElementRef, + Input, + OnChanges, SimpleChanges, + ViewChild, + ViewEncapsulation +} from '@angular/core'; +import { HttpClient } from "@angular/common/http"; +import { GuacEventService } from "../../../events/services/guac-event.service"; +import { GuacEventArguments } from "../../../events/types/GuacEventArguments"; + + +/** + * A component which displays the Guacamole on-screen keyboard. + */ +@Component({ + selector: 'guac-osk', + templateUrl: './osk.component.html', + encapsulation: ViewEncapsulation.None +}) +export class OskComponent implements OnChanges { + + /** + * The URL for the Guacamole on-screen keyboard layout to use. + */ + @Input({required: true}) layout!: string; + + /** + * The current on-screen keyboard, if any. + */ + private keyboard: Guacamole.OnScreenKeyboard | null = null; + + /** + * The main containing element for the entire directive. + */ + @ViewChild('osk') main!: ElementRef; + + /** + * Inject required services. + */ + constructor(private http: HttpClient, + private guacEventService: GuacEventService) { + } + + /** + * Load the new keyboard when the layout changes. + */ + ngOnChanges(changes: SimpleChanges): void { + + if (changes['layout']) { + this.onLayoutChange(changes['layout'].currentValue); + } + + } + + // Size keyboard to same size as main element + keyboardResized(): void { + + // Resize keyboard, if defined + if (this.keyboard) + this.keyboard.resize(this.main.nativeElement.offsetWidth); + + }; + + /** + * Load the new keyboard. + * + * @param url + * The URL for the Guacamole on-screen keyboard layout to use. + */ + private onLayoutChange(url: string): void { + + // Remove current keyboard + if (this.keyboard) { + this.main.nativeElement.removeChild(this.keyboard.getElement()); + this.keyboard = null; + } + + // Load new keyboard + if (url) { + + // Retrieve layout JSON + this.http.get(url).subscribe( + // Build OSK with retrieved layout + (layout) => { + + // Abort if the layout changed while we were waiting for a response + if (this.layout !== url) + return; + + // Add OSK element + this.keyboard = new Guacamole.OnScreenKeyboard(layout); + this.main.nativeElement.appendChild(this.keyboard.getElement()); + + // Init size + this.keyboard.resize(this.main.nativeElement.offsetWidth); + + // Broadcast keydown for each key pressed + this.keyboard.onkeydown = (keysym: number) => { + this.guacEventService.broadcast('guacSyntheticKeydown', {keysym}); + }; + + // Broadcast keydown for each key released + this.keyboard.onkeyup = (keysym: number) => { + this.guacEventService.broadcast('guacSyntheticKeyup', {keysym}); + }; + }); + } + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/osk.module.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/osk.module.ts new file mode 100644 index 0000000000..8ef7565fb8 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/osk.module.ts @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ElementModule } from "../element/element.module"; +import { OskComponent } from './components/osk/osk.component'; +import { HttpClientModule } from "@angular/common/http"; + +/** + * Module for displaying the Guacamole on-screen keyboard. + */ +@NgModule({ + declarations: [ + OskComponent + ], + imports: [ + CommonModule, + HttpClientModule, + ElementModule + ], + exports: [ + OskComponent + ] +}) +export class OskModule { +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/styles/osk.css b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/styles/osk.css new file mode 100644 index 0000000000..5f56c560f6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/osk/styles/osk.css @@ -0,0 +1,228 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.osk { + position: relative; +} + +.guac-keyboard { + display: inline-block; + width: 100%; + + margin: 0; + padding: 0; + cursor: default; + + text-align: left; + vertical-align: middle; +} + +.guac-keyboard, +.guac-keyboard * { + overflow: hidden; + white-space: nowrap; +} + +.guac-keyboard .guac-keyboard-key-container { + display: inline-block; + margin: 0.05em; + position: relative; +} + +.guac-keyboard .guac-keyboard-key { + + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + + background: #444; + + border: 0.125em solid #666; + -moz-border-radius: 0.25em; + -webkit-border-radius: 0.25em; + -khtml-border-radius: 0.25em; + border-radius: 0.25em; + + color: white; + font-size: 40%; + font-weight: lighter; + text-align: center; + white-space: pre; + + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25), + 1px -1px 0 rgba(0, 0, 0, 0.25), + -1px 1px 0 rgba(0, 0, 0, 0.25), + -1px -1px 0 rgba(0, 0, 0, 0.25); + +} + +.guac-keyboard .guac-keyboard-key:hover { + cursor: pointer; +} + +.guac-keyboard .guac-keyboard-key.highlight { + background: #666; + border-color: #666; +} + +/* Align some keys to the left */ +.guac-keyboard .guac-keyboard-key-caps, +.guac-keyboard .guac-keyboard-key-enter, +.guac-keyboard .guac-keyboard-key-tab, +.guac-keyboard .guac-keyboard-key-lalt, +.guac-keyboard .guac-keyboard-key-ralt, +.guac-keyboard .guac-keyboard-key-alt-gr, +.guac-keyboard .guac-keyboard-key-lctrl, +.guac-keyboard .guac-keyboard-key-rctrl, +.guac-keyboard .guac-keyboard-key-lshift, +.guac-keyboard .guac-keyboard-key-rshift { + text-align: left; + padding-left: 0.75em; +} + +/* Active shift */ +.guac-keyboard.guac-keyboard-modifier-shift .guac-keyboard-key-rshift, +.guac-keyboard.guac-keyboard-modifier-shift .guac-keyboard-key-lshift, + +/* Active ctrl */ +.guac-keyboard.guac-keyboard-modifier-control .guac-keyboard-key-rctrl, +.guac-keyboard.guac-keyboard-modifier-control .guac-keyboard-key-lctrl, + +/* Active alt */ +.guac-keyboard.guac-keyboard-modifier-alt .guac-keyboard-key-ralt, +.guac-keyboard.guac-keyboard-modifier-alt .guac-keyboard-key-lalt, + +/* Active alt-gr */ +.guac-keyboard.guac-keyboard-modifier-alt-gr .guac-keyboard-key-alt-gr, + +/* Active caps */ +.guac-keyboard.guac-keyboard-modifier-caps .guac-keyboard-key-caps, + +/* Active super */ +.guac-keyboard.guac-keyboard-modifier-super .guac-keyboard-key-super, + +/* Active latin */ +.guac-keyboard.guac-keyboard-modifier-lat .guac-keyboard-key-latin { + background: #882; + border-color: #DD4; +} + +.guac-keyboard .guac-keyboard-key.guac-keyboard-pressed { + background: #822; + border-color: #D44; +} + +.guac-keyboard .guac-keyboard-group { + line-height: 0; +} + +.guac-keyboard .guac-keyboard-group.guac-keyboard-alpha, +.guac-keyboard .guac-keyboard-group.guac-keyboard-movement, +.guac-keyboard .guac-keyboard-group.guac-keyboard-function, +.guac-keyboard .guac-keyboard-group.guac-keyboard-virtual { + display: inline-block; + text-align: center; + vertical-align: top; +} + +.guac-keyboard .guac-keyboard-group.guac-keyboard-main, +.guac-keyboard .guac-keyboard-group.guac-keyboard-top { + + /* IE10 */ + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-direction: row; + + /* Ancient Mozilla */ + display: -moz-box; + -moz-box-align: stretch; + -moz-box-orient: horizontal; + + /* Ancient WebKit */ + display: -webkit-box; + -webkit-box-align: stretch; + -webkit-box-orient: horizontal; + + /* Old WebKit */ + display: -webkit-flex; + -webkit-align-items: stretch; + -webkit-flex-direction: row; + + /* W3C */ + display: flex; + align-items: stretch; + flex-direction: row; + +} + +.guac-keyboard .guac-keyboard-group.guac-keyboard-movement, +.guac-keyboard .guac-keyboard-group.guac-keyboard-virtual { + -ms-flex: 1 1 auto; + -moz-box-flex: 1; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + flex: 1 1 auto; +} + +.guac-keyboard .guac-keyboard-gap { + display: inline-block; +} + +/* Hide keycaps requiring modifiers which are NOT currently active. */ +.guac-keyboard:not(.guac-keyboard-modifier-caps) +.guac-keyboard-cap.guac-keyboard-requires-caps, + +.guac-keyboard:not(.guac-keyboard-modifier-shift) +.guac-keyboard-cap.guac-keyboard-requires-shift, + +.guac-keyboard:not(.guac-keyboard-modifier-alt-gr) +.guac-keyboard-cap.guac-keyboard-requires-alt-gr, + +.guac-keyboard:not(.guac-keyboard-modifier-lat) +.guac-keyboard-cap.guac-keyboard-requires-lat, + + /* Hide keycaps NOT requiring modifiers which ARE currently active, where that + modifier is used to determine which cap is displayed for the current key. */ +.guac-keyboard.guac-keyboard-modifier-shift +.guac-keyboard-key.guac-keyboard-uses-shift +.guac-keyboard-cap:not(.guac-keyboard-requires-shift), + +.guac-keyboard.guac-keyboard-modifier-caps +.guac-keyboard-key.guac-keyboard-uses-caps +.guac-keyboard-cap:not(.guac-keyboard-requires-caps), + +.guac-keyboard.guac-keyboard-modifier-alt-gr +.guac-keyboard-key.guac-keyboard-uses-alt-gr +.guac-keyboard-cap:not(.guac-keyboard-requires-alt-gr), + +.guac-keyboard.guac-keyboard-modifier-lat +.guac-keyboard-key.guac-keyboard-uses-lat +.guac-keyboard-cap:not(.guac-keyboard-requires-lat) { + + display: none; + +} + +/* Fade out keys which do not use AltGr if AltGr is active */ +.guac-keyboard.guac-keyboard-modifier-alt-gr +.guac-keyboard-key:not(.guac-keyboard-uses-alt-gr):not(.guac-keyboard-key-alt-gr) { + opacity: 0.5; +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-drag.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-drag.directive.ts new file mode 100644 index 0000000000..e92550dc45 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-drag.directive.ts @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, HostListener, Input } from '@angular/core'; + +/** + * A directive which allows handling of drag gestures on a particular element. + */ +@Directive({ + selector: '[guacTouchDrag]' +}) +export class GuacTouchDragDirective { + + /** + * Called during a drag gesture as the user's finger is placed upon + * the element, moves, and is lifted from the element. + * + * @param inProgress + * Whether the gesture is currently in progress. This will + * always be true except when the gesture has ended, at which + * point one final call will occur with this parameter set to + * false. + * + * @param startX + * The X location at which the drag gesture began. + * + * @param startY + * The Y location at which the drag gesture began. + * + * @param currentX + * The current X location of the user's finger. + * + * @param currentY + * The current Y location of the user's finger. + * + * @param deltaX + * The difference in X location relative to the start of the + * gesture. + * + * @param deltaY + * The difference in Y location relative to the start of the + * gesture. + * + * @return {boolean} + * false if the default action of the touch event should be + * prevented, any other value otherwise. + */ + @Input({required: true}) guacTouchDrag!: (inProgress: boolean, + startX: number, + startY: number, + currentX: number, + currentY: number, + deltaX: number, + deltaY: number) => boolean; + + /** + * Whether a drag gesture is in progress. + */ + inProgress: boolean = false; + + /** + * The starting X location of the drag gesture. + */ + startX?: number = undefined; + + /** + * The starting Y location of the drag gesture. + */ + startY?: number = undefined; + + /** + * The current X location of the drag gesture. + */ + currentX?: number = undefined; + + /** + * The current Y location of the drag gesture. + */ + currentY?: number = undefined; + + /** + * The change in X relative to drag start. + */ + deltaX: number = 0; + + /** + * The change in X relative to drag start. + */ + deltaY: number = 0; + + /** + * The element which will register the drag gesture. + */ + element: Element; + + constructor(private el: ElementRef) { + this.element = el.nativeElement; + } + + // When there is exactly one touch, monitor the change in location + @HostListener('touchmove', ['$event']) dragTouchMove(e: TouchEvent): void { + if (e.touches.length === 1) { + + // Get touch location + const x = e.touches[0].clientX; + const y = e.touches[0].clientY; + + // Init start location and deltas if gesture is starting + if (!this.startX || !this.startY) { + this.startX = this.currentX = x; + this.startY = this.currentY = y; + this.deltaX = 0; + this.deltaY = 0; + this.inProgress = true; + } + + // Update deltas if gesture is in progress + else if (this.inProgress) { + this.deltaX = x - (this.currentX as number); + this.deltaY = y - (this.currentY as number); + this.currentX = x; + this.currentY = y; + } + + // Signal start/change in drag gesture + if (this.inProgress) { + // TODO: $scope.$apply(function dragChanged() { + if (this.guacTouchDrag(true, this.startX, this.startY, (this.currentX as number), + (this.currentY as number), this.deltaX, this.deltaY) === false) { + e.preventDefault(); + } + // }); + } + + } + } + + @HostListener('touchend', ['$event']) dragTouchEnd(e: TouchEvent): void { + if (this.startX && this.startY && e.touches.length === 0) { + + // Signal end of drag gesture + if (this.inProgress && this.guacTouchDrag) { + // TODO: $scope.$apply(function dragComplete() { + if (this.guacTouchDrag(true, this.startX, this.startY, (this.currentX as number), + (this.currentY as number), this.deltaX, this.deltaY) === false) { + e.preventDefault(); + } + // }); + } + + this.startX = this.currentX = undefined; + this.startY = this.currentY = undefined; + this.deltaX = 0; + this.deltaY = 0; + this.inProgress = false; + + } + } + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-pinch.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-pinch.directive.ts new file mode 100644 index 0000000000..a3c3e5c2d9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-pinch.directive.ts @@ -0,0 +1,200 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Directive, ElementRef, HostListener, Input } from '@angular/core'; + +/** + * A directive which allows handling of pinch gestures (pinch-to-zoom, for + * example) on a particular element. + */ +@Directive({ + selector: '[guacTouchPinch]' +}) +export class GuacTouchPinchDirective { + + /** + * Called when a pinch gesture begins, changes, or ends. + * + * @param inProgress + * Whether the gesture is currently in progress. This will + * always be true except when the gesture has ended, at which + * point one final call will occur with this parameter set to + * false. + * + * @param startLength + * The initial distance between the two touches of the + * pinch gesture, in pixels. + * + * @param currentLength + * The current distance between the two touches of the + * pinch gesture, in pixels. + * + * @param centerX + * The current X coordinate of the center of the pinch gesture. + * + * @param centerY + * The current Y coordinate of the center of the pinch gesture. + * + * @return {boolean} + * false if the default action of the touch event should be + * prevented, any other value otherwise. + */ + @Input({required: true}) guacTouchPinch!: (inProgress: boolean, + startLength: number, + currentLength: number, + centerX: number, + centerY: number) => boolean; + + /** + * The starting pinch distance, or null if the gesture has not yet + * started. + */ + startLength?: number = undefined; + + /** + * The current pinch distance, or null if the gesture has not yet + * started. + */ + currentLength?: number = undefined; + + /** + * The X coordinate of the current center of the pinch gesture. + */ + centerX: number = 0; + + /** + * The Y coordinate of the current center of the pinch gesture. + */ + centerY: number = 0; + + /** + * The element which will register the pinch gesture. + */ + element: Element; + + constructor(private el: ElementRef) { + this.element = el.nativeElement; + } + + // When there are exactly two touches, monitor the distance between + // them, firing zoom events as appropriate + @HostListener('touchmove', ['$event']) pinchTouchMove(e: TouchEvent) { + if (e.touches.length === 2) { + + // Calculate current zoom level + this.currentLength = this.pinchDistance(e); + + // Calculate center + this.centerX = this.pinchCenterX(e); + this.centerY = this.pinchCenterY(e); + + // Init start length if pinch is not in progress + if (!this.startLength) + this.startLength = this.currentLength; + + // Notify of pinch status + if (this.guacTouchPinch) { + if (this.guacTouchPinch(true, this.startLength, this.currentLength, + this.centerX, this.centerY) === false) + e.preventDefault(); + } + + } + } + + // Reset monitoring and fire end event when done + @HostListener('touchend', ['$event']) pinchTouchEnd(e: TouchEvent) { + if (this.startLength && e.touches.length < 2) { + + // Notify of pinch end + if (this.guacTouchPinch) { + if (this.guacTouchPinch(false, this.startLength, (this.currentLength as number), + this.centerX, this.centerY) === false) { + e.preventDefault(); + } + } + + this.startLength = undefined; + + } + + } + + /** + * Given a touch event, calculates the distance between the first + * two touches in pixels. + * + * @param e + * The touch event to use when performing distance calculation. + * + * @return + * The distance in pixels between the first two touches. + */ + pinchDistance(e: TouchEvent): number { + + const touchA = e.touches[0]; + const touchB = e.touches[1]; + + const deltaX = touchA.clientX - touchB.clientX; + const deltaY = touchA.clientY - touchB.clientY; + + return Math.sqrt(deltaX * deltaX + deltaY * deltaY); + + } + + /** + * Given a touch event, calculates the center between the first two + * touches in pixels, returning the X coordinate of this center. + * + * @param e + * The touch event to use when performing center calculation. + * + * @return + * The X coordinate of the center of the first two touches. + */ + pinchCenterX(e: TouchEvent): number { + + var touchA = e.touches[0]; + var touchB = e.touches[1]; + + return (touchA.clientX + touchB.clientX) / 2; + + }; + + /** + * Given a touch event, calculates the center between the first two + * touches in pixels, returning the Y coordinate of this center. + * + * @param e + * The touch event to use when performing center calculation. + * + * @return + * The Y coordinate of the center of the first two touches. + */ + pinchCenterY(e: TouchEvent): number { + + var touchA = e.touches[0]; + var touchB = e.touches[1]; + + return (touchA.clientY + touchB.clientY) / 2; + + }; + + +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/touch.module.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/touch.module.ts new file mode 100644 index 0000000000..9adde2d898 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/touch/touch.module.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GuacTouchPinchDirective } from './directives/guac-touch-pinch.directive'; +import { GuacTouchDragDirective } from './directives/guac-touch-drag.directive'; + + +/** + * Module for handling common touch gestures, like panning or pinch-to-zoom. + */ +@NgModule({ + declarations: [ + GuacTouchPinchDirective, + GuacTouchDragDirective + ], + imports: [ + CommonModule + ], + exports: [ + GuacTouchPinchDirective, + GuacTouchDragDirective + ] +}) +export class TouchModule { } diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/types/Guacamole.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/types/Guacamole.ts new file mode 100644 index 0000000000..6bca7d967c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/types/Guacamole.ts @@ -0,0 +1,3683 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// @ts-ignore +declare namespace Guacamole { + + /** + * Dynamic on-screen keyboard. Given the layout object for an on-screen + * keyboard, this object will construct a clickable on-screen keyboard with its + * own key events. + */ + class OnScreenKeyboard { + /** + * The number of mousemove events to require before re-enabling mouse + * event handling after receiving a touch event. + * + * @type {Number} + */ + touchMouseThreshold: number; + /** + * The keyboard layout provided at time of construction. + * + * @type {Guacamole.OnScreenKeyboard.Layout} + */ + layout: OnScreenKeyboard.Layout; + + constructor(layout: OnScreenKeyboard.Layout); + + /** + * Fired whenever the user presses a key on this Guacamole.OnScreenKeyboard. + * + * @event + * @param {Number} keysym The keysym of the key being pressed. + */ + onkeydown(keysym: number): void; + + /** + * Fired whenever the user releases a key on this Guacamole.OnScreenKeyboard. + * + * @event + * @param {Number} keysym The keysym of the key being released. + */ + onkeyup(keysym: number): void; + + /** + * Returns the element containing the entire on-screen keyboard. + * @returns {Element} The element containing the entire on-screen keyboard. + */ + getElement(): any; + + /** + * Resizes all elements within this Guacamole.OnScreenKeyboard such that + * the width is close to but does not exceed the specified width. The + * height of the keyboard is determined based on the width. + * + * @param {Number} width The width to resize this Guacamole.OnScreenKeyboard + * to, in pixels. + */ + resize(width: number): void; + + /** + * Resets the state of this keyboard, releasing all keys, and firing keyup + * events for each released key. + */ + reset(): void; + } + + + namespace OnScreenKeyboard { + + + class Layout { + + /** + * The language of keyboard layout, such as "en_US". This property is for + * informational purposes only, but it is recommend to conform to the + * [language code]_[country code] format. + * + * @type {String} + */ + language: string; + /** + * The type of keyboard layout, such as "qwerty". This property is for + * informational purposes only, and does not conform to any standard. + * + * @type {String} + */ + type: string; + /** + * Map of key name to corresponding keysym, title, or key object. If only + * the keysym or title is provided, the key object will be created + * implicitly. In all cases, the name property of the key object will be + * taken from the name given in the mapping. + * + * @type {Object.} + */ + keys: any; + /** + * Arbitrarily nested, arbitrarily grouped key names. The contents of the + * layout will be traversed to produce an identically-nested grouping of + * keys in the DOM tree. All strings will be transformed into their + * corresponding sets of keys, while all objects and arrays will be + * transformed into named groups and anonymous groups respectively. Any + * numbers present will be transformed into gaps of that size, scaled + * according to the same units as each key. + * + * @type {Object} + */ + layout: any; + /** + * The width of the entire keyboard, in arbitrary units. The width of each + * key is relative to this width, as both width values are assumed to be in + * the same units. The conversion factor between these units and pixels is + * derived later via a call to resize() on the Guacamole.OnScreenKeyboard. + * + * @type {Number} + */ + width: number; + /** + * The width of each key, in arbitrary units, relative to other keys in + * this layout. The true pixel size of each key will be determined by the + * overall size of the keyboard. If not defined here, the width of each + * key will default to 1. + * + * @type {Object.} + */ + keyWidths: any; + + /** + * @constructor + * @param {Guacamole.OnScreenKeyboard.Layout|Object} template + * The object whose identically-named properties will be used to initialize + * the properties of this layout. + */ + constructor(template: any); + } + + /** + * Represents a single key, or a single possible behavior of a key. Each key + * on the on-screen keyboard must have at least one associated + * Guacamole.OnScreenKeyboard.Key, whether that key is explicitly defined or + * implied, and may have multiple Guacamole.OnScreenKeyboard.Key if behavior + * depends on modifier states. + */ + class Key { + /** + * The unique name identifying this key within the keyboard layout. + * + * @type {String} + */ + name: string; + /** + * The human-readable title that will be displayed to the user within the + * key. If not provided, this will be derived from the key name. + * + * @type {String} + */ + title: string; + /** + * The name of the modifier set when the key is pressed and cleared when + * this key is released, if any. The names of modifiers are distinct from + * the names of keys; both the "RightShift" and "LeftShift" keys may set + * the "shift" modifier, for example. By default, the key will affect no + * modifiers. + * + * @type {String} + */ + modifier: string; + /** + * An array containing the names of each modifier required for this key to + * have an effect. For example, a lowercase letter may require nothing, + * while an uppercase letter would require "shift", assuming the Shift key + * is named "shift" within the layout. By default, the key will require + * no modifiers. + * + * @type {String[]} + */ + requires: string[]; + + constructor(template: any, name: string); + } + + + } + + + /** + * Guacamole protocol client. Given a {@link Guacamole.Tunnel}, + * automatically handles incoming and outgoing Guacamole instructions via the + * provided tunnel, updating its display using one or more canvas elements. + */ + class Client { + /** + * @param {Guacamole.Tunnel} tunnel The tunnel to use to send and receive + * Guacamole instructions. + */ + constructor(tunnel: Tunnel); + + /** + * Produces an opaque representation of Guacamole.Client state which can be + * later imported through a call to importState(). This object is + * effectively an independent, compressed snapshot of protocol and display + * state. Invoking this function implicitly flushes the display. + * + * @param {function} callback + * Callback which should be invoked once the state object is ready. The + * state object will be passed to the callback as the sole parameter. + * This callback may be invoked immediately, or later as the display + * finishes rendering and becomes ready. + */ + exportState(callback: any): void; + + /** + * Restores Guacamole.Client protocol and display state based on an opaque + * object from a prior call to exportState(). The Guacamole.Client instance + * used to that state need not be the same as this instance. + * + * @param {Object} state + * An opaque representation of Guacamole.Client state from a prior call + * to exportState(). + * + * @param {function} [callback] + * The function to invoke when state has finished being imported. This + * may happen immediately, or later as images within the provided state + * object are loaded. + */ + importState(state: any, callback: any): void; + + /** + * Returns the underlying display of this Guacamole.Client. The display + * contains an Element which can be added to the DOM, causing the + * display to become visible. + * + * @return {Guacamole.Display} The underlying display of this + * Guacamole.Client. + */ + getDisplay(): Display; + + /** + * Sends a disconnect instruction to the server and closes the tunnel. + */ + disconnect(): void; + + /** + * Connects the underlying tunnel of this Guacamole.Client, passing the + * given arbitrary data to the tunnel during the connection process. + * + * @param data Arbitrary connection data to be sent to the underlying + * tunnel during the connection process. + * @throws {Guacamole.Status} If an error occurs during connection. + */ + connect(data: any): void; + + /** + * Sends a mouse event having the properties provided by the given mouse + * state. + * + * @param {!Guacamole.Mouse.State} mouseState + * The state of the mouse to send in the mouse event. + * + * @param {boolean} [applyDisplayScale=false] + * Whether the provided mouse state uses local display units, rather + * than remote display units, and should be scaled to match the + * {@link Guacamole.Display}. + */ + sendMouseState(mouseState: Mouse.State, applyDisplayScale?: boolean): void; + + /** + * Sends a touch event having the properties provided by the given touch + * state. + * + * @param {!Guacamole.Touch.State} touchState + * The state of the touch contact to send in the touch event. + * + * @param {boolean} [applyDisplayScale=false] + * Whether the provided touch state uses local display units, rather + * than remote display units, and should be scaled to match the + * {@link Guacamole.Display}. + */ + sendTouchState(touchState : Guacamole.Touch.State, applyDisplayScale?: boolean): void; + + /** + * Sends a key event having the given properties as if the user + * pressed or released a key. + * + * @param {Boolean} pressed Whether the key is pressed (true) or released + * (false). + * @param {Number} keysym The keysym of the key being pressed or released. + */ + sendKeyEvent(pressed: number, keysym: number): void; + + /** + * Sends the current size of the screen. + * + * @param {Number} width The width of the screen. + * @param {Number} height The height of the screen. + */ + sendSize(width: number, height: number): void; + + /** + * Sets the clipboard of the remote client to the given text data. + * + * @deprecated Use createClipboardStream() instead. + * @param {String} data The data to send as the clipboard contents. + */ + setClipboard(data: string): void; + + /** + * Allocates an available stream index and creates a new + * Guacamole.OutputStream using that index, associating the resulting + * stream with this Guacamole.Client. Note that this stream will not yet + * exist as far as the other end of the Guacamole connection is concerned. + * Streams exist within the Guacamole protocol only when referenced by an + * instruction which creates the stream, such as a "clipboard", "file", or + * "pipe" instruction. + * + * @returns {Guacamole.OutputStream} + * A new Guacamole.OutputStream with a newly-allocated index and + * associated with this Guacamole.Client. + */ + createOutputStream(): OutputStream; + + /** + * Opens a new audio stream for writing, where audio data having the give + * mimetype will be sent along the returned stream. The instruction + * necessary to create this stream will automatically be sent. + * + * @param {String} mimetype + * The mimetype of the audio data that will be sent along the returned + * stream. + * + * @return {Guacamole.OutputStream} + * The created audio stream. + */ + createAudioStream(mimetype: string): OutputStream; + + /** + * Opens a new file for writing, having the given index, mimetype and + * filename. The instruction necessary to create this stream will + * automatically be sent. + * + * @param {String} mimetype The mimetype of the file being sent. + * @param {String} filename The filename of the file being sent. + * @return {Guacamole.OutputStream} The created file stream. + */ + createFileStream(mimetype: string, filename: string): OutputStream; + + /** + * Opens a new pipe for writing, having the given name and mimetype. The + * instruction necessary to create this stream will automatically be sent. + * + * @param {String} mimetype The mimetype of the data being sent. + * @param {String} name The name of the pipe. + * @return {Guacamole.OutputStream} The created file stream. + */ + createPipeStream(mimetype: string, name: string): OutputStream; + + /** + * Opens a new clipboard object for writing, having the given mimetype. The + * instruction necessary to create this stream will automatically be sent. + * + * @param {String} mimetype The mimetype of the data being sent. + * @param {String} name The name of the pipe. + * @return {Guacamole.OutputStream} The created file stream. + */ + createClipboardStream(mimetype: string): OutputStream; + + /** + * Opens a new argument value stream for writing, having the given + * parameter name and mimetype, requesting that the connection parameter + * with the given name be updated to the value described by the contents + * of the following stream. The instruction necessary to create this stream + * will automatically be sent. + * + * @param {!string} mimetype + * The mimetype of the data being sent. + * + * @param {!string} name + * The name of the connection parameter to attempt to update. + * + * @return {!Guacamole.OutputStream} + * The created argument value stream. + */ + createArgumentValueStream(mimetype: string, name: string): OutputStream; + + /** + * Creates a new output stream associated with the given object and having + * the given mimetype and name. The legality of a mimetype and name is + * dictated by the object itself. The instruction necessary to create this + * stream will automatically be sent. + * + * @param {Number} index + * The index of the object for which the output stream is being + * created. + * + * @param {String} mimetype + * The mimetype of the data which will be sent to the output stream. + * + * @param {String} name + * The defined name of an output stream within the given object. + * + * @returns {Guacamole.OutputStream} + * An output stream which will write blobs to the named output stream + * of the given object. + */ + createObjectOutputStream(index: number, mimetype: string, name: string): OutputStream; + + /** + * Requests read access to the input stream having the given name. If + * successful, a new input stream will be created. + * + * @param {Number} index + * The index of the object from which the input stream is being + * requested. + * + * @param {String} name + * The name of the input stream to request. + */ + requestObjectInputStream(index: number, name: string): void; + + /** + * Acknowledge receipt of a blob on the stream with the given index. + * + * @param {Number} index The index of the stream associated with the + * received blob. + * @param {String} message A human-readable message describing the error + * or status. + * @param {Number} code The error code, if any, or 0 for success. + */ + sendAck(index: number, message: string, code: number): void; + + /** + * Given the index of a file, writes a blob of data to that file. + * + * @param {Number} index The index of the file to write to. + * @param {String} data Base64-encoded data to write to the file. + */ + sendBlob(index: number, data: string): void; + + /** + * Marks a currently-open stream as complete. The other end of the + * Guacamole connection will be notified via an "end" instruction that the + * stream is closed, and the index will be made available for reuse in + * future streams. + * + * @param {Number} index + * The index of the stream to end. + */ + endStream(index: number): void; + + /** + * Fired whenever the state of this Guacamole.Client changes. + * + * @event + * @param {Number} state The new state of the client. + */ + onstatechange(state: number): void; + + /** + * Fired when the remote client sends a name update. + * + * @event + * @param {String} name The new name of this client. + */ + onname(name: string): void; + + /** + * Fired when an error is reported by the remote client, and the connection + * is being closed. + * + * @event + * @param {Guacamole.Status} status A status object which describes the + * error. + */ + onerror(status: Status): void; + + /** + * Fired when a audio stream is created. The stream provided to this event + * handler will contain its own event handlers for received data. + * + * @event + * @param {Guacamole.InputStream} stream + * The stream that will receive audio data from the server. + * + * @param {String} mimetype + * The mimetype of the audio data which will be received. + * + * @return {Guacamole.AudioPlayer} + * An object which implements the Guacamole.AudioPlayer interface and + * has been initialized to play the data in the provided stream, or null + * if the built-in audio players of the Guacamole client should be + * used. + */ + onaudio(stream: InputStream, mimetype: string): AudioPlayer; + + /** + * Fired when a video stream is created. The stream provided to this event + * handler will contain its own event handlers for received data. + * + * @event + * @param {Guacamole.InputStream} stream + * The stream that will receive video data from the server. + * + * @param {Guacamole.Display.VisibleLayer} layer + * The destination layer on which the received video data should be + * played. It is the responsibility of the Guacamole.VideoPlayer + * implementation to play the received data within this layer. + * + * @param {String} mimetype + * The mimetype of the video data which will be received. + * + * @return {Guacamole.VideoPlayer} + * An object which implements the Guacamole.VideoPlayer interface and + * has been initialied to play the data in the provided stream, or null + * if the built-in video players of the Guacamole client should be + * used. + */ + onvideo(stream: InputStream, layer: Display.VisibleLayer, mimetype: string): VideoPlayer; + + /** + * Fired when the clipboard of the remote client is changing. + * + * @event + * @param {Guacamole.InputStream} stream The stream that will receive + * clipboard data from the server. + * @param {String} mimetype The mimetype of the data which will be received. + */ + onclipboard: (stream: InputStream, mimetype: string) => void; + + /** + * Fired when a file stream is created. The stream provided to this event + * handler will contain its own event handlers for received data. + * + * @event + * @param {Guacamole.InputStream} stream The stream that will receive data + * from the server. + * @param {String} mimetype The mimetype of the file received. + * @param {String} filename The name of the file received. + */ + onfile(stream: InputStream, mimetype: string, filename: string): void; + + /** + * Fired when a filesystem object is created. The object provided to this + * event handler will contain its own event handlers and functions for + * requesting and handling data. + * + * @event + * @param {Guacamole.Object} object + * The created filesystem object. + * + * @param {String} name + * The name of the filesystem. + */ + onfilesystem(object: Object, name: string): void; + + /** + * Fired when a pipe stream is created. The stream provided to this event + * handler will contain its own event handlers for received data; + * + * @event + * @param {Guacamole.InputStream} stream The stream that will receive data + * from the server. + * @param {String} mimetype The mimetype of the data which will be received. + * @param {String} name The name of the pipe. + */ + onpipe(stream: InputStream, mimetype: string, name: string): void; + + /** + * Fired when a "required" instruction is received. A required instruction + * indicates that additional parameters are required for the connection to + * continue, such as user credentials. + * + * @event + * @param {!string[]} parameters + * The names of the connection parameters that are required to be + * provided for the connection to continue. + */ + onrequired: (parameters: string[]) => void | null; + + /** + * Fired whenever a sync instruction is received from the server, indicating + * that the server is finished processing any input from the client and + * has sent any results. + * + * @event + * @param {Number} timestamp The timestamp associated with the sync + * instruction. + */ + onsync(timestamp: number): void; + + /** + * Fired when a user joins a shared connection. + * + * @event + * @param {!string} userID + * A unique value representing this specific user's connection to the + * shared connection. This value is generated by the server and is + * guaranteed to be unique relative to other users of the connection. + * + * @param {!string} name + * A human-readable name representing the user that joined, such as + * their username. This value is provided by the web application during + * the connection handshake and is not necessarily unique relative to + * other users of the connection. + */ + onjoin(userID: string, name: string): void | null; + + /** + * Fired when a user leaves a shared connection. + * + * @event + * @param {!string} userID + * A unique value representing this specific user's connection to the + * shared connection. This value is generated by the server and is + * guaranteed to be unique relative to other users of the connection. + * + * @param {!string} name + * A human-readable name representing the user that left, such as their + * username. This value is provided by the web application during the + * connection handshake and is not necessarily unique relative to other + * users of the connection. + */ + onleave(userID: string, name: string): void | null; + + /** + * Fired when the remote client is explicitly declaring the level of + * multi-touch support provided by a particular display layer. + * + * @event + * @param {!Guacamole.Display.VisibleLayer} layer + * The layer whose multi-touch support level is being declared. + * + * @param {!number} touches + * The maximum number of simultaneous touches supported by the given + * layer, where 0 indicates that touch events are not supported at all. + */ + onmultitouch: (layer: Display.VisibleLayer, touches: number) => void | null; + + /** + * Fired when the current value of a connection parameter is being exposed + * by the server. + * + * @event + * @param {!Guacamole.InputStream} stream + * The stream that will receive connection parameter data from the + * server. + * + * @param {!string} mimetype + * The mimetype of the data which will be received. + * + * @param {!string} name + * The name of the connection parameter whose value is being exposed. + */ + onargv: (stream: InputStream, mimetype: string, name: string) => void | null; + + /** + * All possible Guacamole Client states. + * + * @type {!Object.} + */ + static State: any; + + } + + /** + * Core object providing abstract communication for Guacamole. This object + * is a null implementation whose functions do nothing. Guacamole applications + * should use {@link Guacamole.HTTPTunnel} instead, or implement their own tunnel based + * on this one. + * + * @constructor + * @see Guacamole.HTTPTunnel + */ + class Tunnel { + static INTERNAL_DATA_OPCODE: string; + static State: any; + + /** + * The UUID uniquely identifying this tunnel. If not yet known, this will + * be null. + * + * @type {string} + */ + uuid: string; + + /** + * Fired when the UUID that uniquely identifies this tunnel is known. + * + * @event + * @param {!string} + * The UUID uniquely identifying this tunnel. + */ + onuuid: (uuid: string) => void | null; + + /** + * The current state of this tunnel. + * + * @type {Number} + */ + state: number; + + /** + * The maximum amount of time to wait for data to be received, in + * milliseconds. If data is not received within this amount of time, + * the tunnel is closed with an error. The default value is 15000. + * + * @type {Number} + */ + receiveTimeout: number; + + /** + * Connect to the tunnel with the given optional data. This data is + * typically used for authentication. The format of data accepted is + * up to the tunnel implementation. + * + * @param {String} data The data to send to the tunnel when connecting. + */ + connect(data: string): void; + + /** + * Disconnect from the tunnel. + */ + disconnect(): void; + + /** + * Fired whenever an error is encountered by the tunnel. + * + * @event + * @param {Guacamole.Status} status A status object which describes the + * error. + */ + onerror(error: Status): void; + + /** + * Fired whenever the state of the tunnel changes. + * + * @event + * @param {Number} state The new state of the client. + */ + onstatechange(state: number): void; + + /** + * Fired once for every complete Guacamole instruction received, in order. + * + * @event + * @param {String} opcode The Guacamole instruction opcode. + * @param {Array} parameters The parameters provided for the instruction, + * if any. + */ + oninstruction(opcode: string, parameters: any): void; + + + /** + * Send the given message through the tunnel to the service on the other + * side. All messages are guaranteed to be received in the order sent. + * + * @param {...*} elements + * The elements of the message to send to the service on the other side + * of the tunnel. + */ + sendMessage(elements: any): void; + + /** + * Changes the stored numeric state of this tunnel, firing the onstatechange + * event if the new state is different and a handler has been defined. + * + * @private + * @param {Number} state + * The new state of this tunnel. + */ + setState(state: number): void; + } + + /** + * Guacamole Tunnel implemented over WebSocket via XMLHttpRequest. + */ + class WebSocketTunnel extends Tunnel { + /** + * @param {String} tunnelURL The URL of the WebSocket tunneling service. + */ + constructor(tunnelURL: string); + } + + + class SocketIOTunnel extends Tunnel { + constructor(url: string, connectionOptions: any, eventChannel: string); + + /** + * Return the socketio socket + */ + getSocket(): any; + } + + /** + * Guacamole Tunnel which cycles between all specified tunnels until + * no tunnels are left. Another tunnel is used if an error occurs but + * no instructions have been received. If an instruction has been + * received, or no tunnels remain, the error is passed directly out + * through the onerror handler (if defined). + */ + class ChainedTunnel extends Tunnel { + /** + * @param {...*} tunnelChain + * The tunnels to use, in order of priority. + */ + constructor(...tunnelChain: any[]); + } + + /** + * Guacamole Tunnel implemented over HTTP via XMLHttpRequest. + */ + class HTTPTunnel extends Tunnel { + /** + * @param {String} tunnelURL + * The URL of the HTTP tunneling service. + * + * @param {Boolean} [crossDomain=false] + * Whether tunnel requests will be cross-domain, and thus must use CORS + * mechanisms and headers. By default, it is assumed that tunnel requests + * will be made to the same domain. + * + * @param {Object} [extraTunnelHeaders={}] + * Key value pairs containing the header names and values of any additional + * headers to be sent in tunnel requests. By default, no extra headers will + * be added. + */ + constructor(tunnelURL: string, crossDomain?: boolean, extraTunnelHeaders?: any); + } + + /** + * Guacamole Tunnel which replays a Guacamole protocol dump from a static file + * received via HTTP. Instructions within the file are parsed and handled as + * quickly as possible, while the file is being downloaded. + */ + class StaticHTTPTunnel extends Tunnel { + /** + * @param {String} url + * The URL of a Guacamole protocol dump. + * + * @param {Boolean} [crossDomain=false] + * Whether tunnel requests will be cross-domain, and thus must use CORS + * mechanisms and headers. By default, it is assumed that tunnel requests + * will be made to the same domain. + * + * @param {Object} [extraTunnelHeaders={}] + * Key value pairs containing the header names and values of any additional + * headers to be sent in tunnel requests. By default, no extra headers will + * be added. + */ + constructor(url: string, crossDomain: boolean, extraTunnelHeaders: any); + } + + /** + * Abstract audio player which accepts, queues and plays back arbitrary audio + * data. It is up to implementations of this class to provide some means of + * handling a provided Guacamole.InputStream. Data received along the provided + * stream is to be played back immediately. + */ + class AudioPlayer { + /** + * Determines whether the given mimetype is supported by any built-in + * implementation of Guacamole.AudioPlayer, and thus will be properly handled + * by Guacamole.AudioPlayer.getInstance(). + * + * @param {String} mimetype + * The mimetype to check. + * + * @returns {Boolean} + * true if the given mimetype is supported by any built-in + * Guacamole.AudioPlayer, false otherwise. + */ + static isSupportedType(mimetype: string): boolean; + + /** + * Returns a list of all mimetypes supported by any built-in + * Guacamole.AudioPlayer, in rough order of priority. Beware that only the core + * mimetypes themselves will be listed. Any mimetype parameters, even required + * ones, will not be included in the list. For example, "audio/L8" is a + * supported raw audio mimetype that is supported, but it is invalid without + * additional parameters. Something like "audio/L8;rate=44100" would be valid, + * however (see https://tools.ietf.org/html/rfc4856). + * + * @returns {String[]} + * A list of all mimetypes supported by any built-in Guacamole.AudioPlayer, + * excluding any parameters. + */ + static getSupportedTypes(): string[]; + + /** + * Returns an instance of Guacamole.AudioPlayer providing support for the given + * audio format. If support for the given audio format is not available, null + * is returned. + * + * @param {Guacamole.InputStream} stream + * The Guacamole.InputStream to read audio data from. + * + * @param {String} mimetype + * The mimetype of the audio data in the provided stream. + * + * @return {Guacamole.AudioPlayer} + * A Guacamole.AudioPlayer instance supporting the given mimetype and + * reading from the given stream, or null if support for the given mimetype + * is absent. + */ + static getInstance(stream: InputStream, mimetype: string): AudioPlayer; + + sync(): void; + + } + + /** + * Implementation of Guacamole.AudioPlayer providing support for raw PCM format + * audio. This player relies only on the Web Audio API and does not require any + * browser-level support for its audio formats. + */ + class RawAudioPlayer extends AudioPlayer { + /** + * @augments Guacamole.AudioPlayer + * @param {Guacamole.InputStream} stream + * The Guacamole.InputStream to read audio data from. + * + * @param {String} mimetype + * The mimetype of the audio data in the provided stream, which must be a + * "audio/L8" or "audio/L16" mimetype with necessary parameters, such as: + * "audio/L16;rate=44100,channels=2". + */ + constructor(stream: InputStream, mimetype: string); + + /** + * Determines whether the given mimetype is supported by + * Guacamole.RawAudioPlayer. + * + * @param {String} mimetype + * The mimetype to check. + * + * @returns {Boolean} + * true if the given mimetype is supported by Guacamole.RawAudioPlayer, + * false otherwise. + */ + static isSupportedType(mimetype: string): boolean; + + /** + * Returns a list of all mimetypes supported by Guacamole.RawAudioPlayer. Only + * the core mimetypes themselves will be listed. Any mimetype parameters, even + * required ones, will not be included in the list. For example, "audio/L8" is + * a raw audio mimetype that may be supported, but it is invalid without + * additional parameters. Something like "audio/L8;rate=44100" would be valid, + * however (see https://tools.ietf.org/html/rfc4856). + * + * @returns {String[]} + * A list of all mimetypes supported by Guacamole.RawAudioPlayer, excluding + * any parameters. If the necessary JavaScript APIs for playing raw audio + * are absent, this list will be empty. + */ + static getSupportedTypes(): string[]; + + /** @override */ + sync(): void; + } + + /** + * Abstract audio recorder which streams arbitrary audio data to an underlying + * Guacamole.OutputStream. It is up to implementations of this class to provide + * some means of handling this Guacamole.OutputStream. Data produced by the + * recorder is to be sent along the provided stream immediately. + */ + class AudioRecorder { + /** + * Determines whether the given mimetype is supported by any built-in + * implementation of Guacamole.AudioRecorder, and thus will be properly handled + * by Guacamole.AudioRecorder.getInstance(). + * + * @param {String} mimetype + * The mimetype to check. + * + * @returns {Boolean} + * true if the given mimetype is supported by any built-in + * Guacamole.AudioRecorder, false otherwise. + */ + static isSupportedType(mimetype: string): boolean; + + /** + * Returns a list of all mimetypes supported by any built-in + * Guacamole.AudioRecorder, in rough order of priority. Beware that only the + * core mimetypes themselves will be listed. Any mimetype parameters, even + * required ones, will not be included in the list. For example, "audio/L8" is + * a supported raw audio mimetype that is supported, but it is invalid without + * additional parameters. Something like "audio/L8;rate=44100" would be valid, + * however (see https://tools.ietf.org/html/rfc4856). + * + * @returns {String[]} + * A list of all mimetypes supported by any built-in + * Guacamole.AudioRecorder, excluding any parameters. + */ + static getSupportedTypes(): string[]; + + /** + * Returns an instance of Guacamole.AudioRecorder providing support for the + * given audio format. If support for the given audio format is not available, + * null is returned. + * + * @param {Guacamole.OutputStream} stream + * The Guacamole.OutputStream to send audio data through. + * + * @param {String} mimetype + * The mimetype of the audio data to be sent along the provided stream. + * + * @return {Guacamole.AudioRecorder} + * A Guacamole.AudioRecorder instance supporting the given mimetype and + * writing to the given stream, or null if support for the given mimetype + * is absent. + */ + static getInstance(stream: OutputStream, mimetype: string): AudioRecorder; + + /** + * Callback which is invoked when the audio recording process has stopped + * and the underlying Guacamole stream has been closed normally. Audio will + * only resume recording if a new Guacamole.AudioRecorder is started. This + * Guacamole.AudioRecorder instance MAY NOT be reused. + * + * @event + */ + onclose(): void; + + /** + * Callback which is invoked when the audio recording process cannot + * continue due to an error, if it has started at all. The underlying + * Guacamole stream is automatically closed. Future attempts to record + * audio should not be made, and this Guacamole.AudioRecorder instance + * MAY NOT be reused. + * + * @event + */ + onerror(): void; + } + + /** + * Implementation of Guacamole.AudioRecorder providing support for raw PCM + * format audio. This recorder relies only on the Web Audio API and does not + * require any browser-level support for its audio formats. + * + * @constructor + * @augments Guacamole.AudioRecorder + * @param {Guacamole.OutputStream} stream + * The Guacamole.OutputStream to write audio data to. + * + * @param {String} mimetype + * The mimetype of the audio data to send along the provided stream, which + * must be a "audio/L8" or "audio/L16" mimetype with necessary parameters, + * such as: "audio/L16;rate=44100,channels=2". + */ + class RawAudioRecorder extends AudioRecorder { + /** + * @augments Guacamole.AudioRecorder + * @param {Guacamole.OutputStream} stream + * The Guacamole.OutputStream to write audio data to. + * + * @param {String} mimetype + * The mimetype of the audio data to send along the provided stream, which + * must be a "audio/L8" or "audio/L16" mimetype with necessary parameters, + * such as: "audio/L16;rate=44100,channels=2". + */ + constructor(stream: AudioRecorder, mimetype: string); + + /** + * Determines whether the given mimetype is supported by + * Guacamole.RawAudioRecorder. + * + * @param {String} mimetype + * The mimetype to check. + * + * @returns {Boolean} + * true if the given mimetype is supported by Guacamole.RawAudioRecorder, + * false otherwise. + */ + static isSupportedType(mimetype: string): boolean; + + /** + * Returns a list of all mimetypes supported by Guacamole.RawAudioRecorder. Only + * the core mimetypes themselves will be listed. Any mimetype parameters, even + * required ones, will not be included in the list. For example, "audio/L8" is + * a raw audio mimetype that may be supported, but it is invalid without + * additional parameters. Something like "audio/L8;rate=44100" would be valid, + * however (see https://tools.ietf.org/html/rfc4856). + * + * @returns {String[]} + * A list of all mimetypes supported by Guacamole.RawAudioRecorder, + * excluding any parameters. If the necessary JavaScript APIs for recording + * raw audio are absent, this list will be empty. + */ + static getSupportedTypes(): string[]; + } + + /** + * Provides cross-browser and cross-keyboard keyboard for a specific element. + * Browser and keyboard layout variation is abstracted away, providing events + * which represent keys as their corresponding X11 keysym. + */ + class Keyboard { + /** + * @param {Element} element The Element to use to provide keyboard events. + */ + constructor(element: any); + + /** + * Fired whenever the user presses a key with the element associated + * with this Guacamole.Keyboard in focus. + * + * @event + * @param {Number} keysym The keysym of the key being pressed. + * @return {Boolean} true if the key event should be allowed through to the + * browser, false otherwise. + */ + onkeydown(keysym: number): boolean; + + /** + * Fired whenever the user releases a key with the element associated + * with this Guacamole.Keyboard in focus. + * + * @event + * @param {Number} keysym The keysym of the key being released. + */ + onkeyup(keysym: number): void; + + /** + * Marks a key as pressed, firing the keydown event if registered. Key + * repeat for the pressed key will start after a delay if that key is + * not a modifier. The return value of this function depends on the + * return value of the keydown event handler, if any. + * + * @param {Number} keysym The keysym of the key to press. + * @return {Boolean} true if event should NOT be canceled, false otherwise. + */ + press(keysym: number): boolean; + + /** + * Marks a key as released, firing the keyup event if registered. + * + * @param {Number} keysym The keysym of the key to release. + */ + release(keysym: number): void; + + /** + * Resets the state of this keyboard, releasing all keys, and firing keyup + * events for each released key. + */ + reset(): void; + + /** + * The state of every key, indexed by keysym. If a particular key is + * pressed, the value of pressed for that keysym will be true. If a key + * is not currently pressed, it will not be defined. + */ + pressed: Record + + /** + * Attaches event listeners to the given Element, automatically translating + * received key, input, and composition events into simple keydown/keyup + * events signalled through this Guacamole.Keyboard's onkeydown and + * onkeyup handlers. + * + * @param {!(Element|Document)} element + * The Element to attach event listeners to for the sake of handling + * key or input events. + */ + listenTo(element: Element | Document): void; + } + + /** + * A hidden input field which attempts to keep itself focused at all times, + * except when another input field has been intentionally focused, whether + * programatically or by the user. The actual underlying input field, returned + * by getElement(), may be used as a reliable source of keyboard-related events, + * particularly composition and input events which may require a focused input + * field to be dispatched at all. + */ + class InputSink { + /** + * Returns the underlying input field. This input field MUST be manually + * added to the DOM for the Guacamole.InputSink to have any effect. + * + * @returns {!Element} + * The underlying input field. + */ + getElement(): Element; + } + + /** + * The Guacamole display. The display does not deal with the Guacamole + * protocol, and instead implements a set of graphical operations which + * embody the set of operations present in the protocol. The order operations + * are executed is guaranteed to be in the same order as their corresponding + * functions are called. + */ + class Display { + + /** + * The X coordinate of the hotspot of the mouse cursor. The hotspot is + * the relative location within the image of the mouse cursor at which + * each click occurs. + * + * @type {Number} + */ + cursorHotspotX: number; + + /** + * The Y coordinate of the hotspot of the mouse cursor. The hotspot is + * the relative location within the image of the mouse cursor at which + * each click occurs. + * + * @type {Number} + */ + cursorHotspotY: number; + + /** + * The current X coordinate of the local mouse cursor. This is not + * necessarily the location of the actual mouse - it refers only to + * the location of the cursor image within the Guacamole display, as + * last set by moveCursor(). + * + * @type {Number} + */ + cursorX: number; + + /** + * The current X coordinate of the local mouse cursor. This is not + * necessarily the location of the actual mouse - it refers only to + * the location of the cursor image within the Guacamole display, as + * last set by moveCursor(). + * + * @type {Number} + */ + cursorY: number; + + /** + * Fired when the default layer (and thus the entire Guacamole display) + * is resized. + * + * @event + * @param {Number} width The new width of the Guacamole display. + * @param {Number} height The new height of the Guacamole display. + */ + onresize(width: number, height: number): void; + + /** + * Fired whenever the local cursor image is changed. This can be used to + * implement special handling of the client-side cursor, or to override + * the default use of a software cursor layer. + * + * @event + * @param {HTMLCanvasElement} canvas The cursor image. + * @param {Number} x The X-coordinate of the cursor hotspot. + * @param {Number} y The Y-coordinate of the cursor hotspot. + */ + oncursor(canvas: any, x: number, y: number): void; + + /** + * Returns the element which contains the Guacamole display. + * + * @return {Element} The element containing the Guacamole display. + */ + getElement(): any; + + /** + * Returns the width of this display. + * + * @return {Number} The width of this display; + */ + getWidth(): number; + + /** + * Returns the height of this display. + * + * @return {Number} The height of this display; + */ + getHeight(): number; + + /** + * Returns the default layer of this display. Each Guacamole display always + * has at least one layer. Other layers can optionally be created within + * this layer, but the default layer cannot be removed and is the absolute + * ancestor of all other layers. + * + * @return {Guacamole.Display.VisibleLayer} The default layer. + */ + getDefaultLayer(): Display.VisibleLayer; + + /** + * Returns the cursor layer of this display. Each Guacamole display contains + * a layer for the image of the mouse cursor. This layer is a special case + * and exists above all other layers, similar to the hardware mouse cursor. + * + * @return {Guacamole.Display.VisibleLayer} The cursor layer. + */ + getCursorLayer(): Display.VisibleLayer; + + /** + * Creates a new layer. The new layer will be a direct child of the default + * layer, but can be moved to be a child of any other layer. Layers returned + * by this function are visible. + * + * @return {Guacamole.Display.VisibleLayer} The newly-created layer. + */ + createLayer(): Display.VisibleLayer; + + /** + * Creates a new buffer. Buffers are invisible, off-screen surfaces. They + * are implemented in the same manner as layers, but do not provide the + * same nesting semantics. + * + * @return {Guacamole.Layer} The newly-created buffer. + */ + createBuffer(): Layer; + + /** + * Flush all pending draw tasks, if possible, as a new frame. If the entire + * frame is not ready, the flush will wait until all required tasks are + * unblocked. + * + * @param {function} callback The function to call when this frame is + * flushed. This may happen immediately, or + * later when blocked tasks become unblocked. + */ + flush(callback: any): void; + + /** + * Sets the hotspot and image of the mouse cursor displayed within the + * Guacamole display. + * + * @param {Number} hotspotX The X coordinate of the cursor hotspot. + * @param {Number} hotspotY The Y coordinate of the cursor hotspot. + * @param {Guacamole.Layer} layer The source layer containing the data which + * should be used as the mouse cursor image. + * @param {Number} srcx The X coordinate of the upper-left corner of the + * rectangle within the source layer's coordinate + * space to copy data from. + * @param {Number} srcy The Y coordinate of the upper-left corner of the + * rectangle within the source layer's coordinate + * space to copy data from. + * @param {Number} srcw The width of the rectangle within the source layer's + * coordinate space to copy data from. + * @param {Number} srch The height of the rectangle within the source + * layer's coordinate space to copy data from. + */ + setCursor(hotspotX: number, hotspotY: number, layer: Layer, srcx: number, srcy: number, srcw: number, srch: number): void; + + /** + * Sets whether the software-rendered cursor is shown. This cursor differs + * from the hardware cursor in that it is built into the Guacamole.Display, + * and relies on its own Guacamole layer to render. + * + * @param {Boolean} [shown=true] Whether to show the software cursor. + */ + showCursor(shown: boolean): void; + + /** + * Sets the location of the local cursor to the given coordinates. For the + * sake of responsiveness, this function performs its action immediately. + * Cursor motion is not maintained within atomic frames. + * + * @param {Number} x The X coordinate to move the cursor to. + * @param {Number} y The Y coordinate to move the cursor to. + */ + moveCursor(x: number, y: number): void; + + /** + * Changes the size of the given Layer to the given width and height. + * Resizing is only attempted if the new size provided is actually different + * from the current size. + * + * @param {Guacamole.Layer} layer The layer to resize. + * @param {Number} width The new width. + * @param {Number} height The new height. + */ + resize(layer: Layer, width: number, height: number): void; + + /** + * Draws the specified image at the given coordinates. The image specified + * must already be loaded. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + * @param {Image} image The image to draw. Note that this is an Image + * object - not a URL. + */ + drawImage(layer: Layer, x: number, y: number, image: any): void; + + /** + * Draws the image contained within the specified Blob at the given + * coordinates. The Blob specified must already be populated with image + * data. + * + * @param {Guacamole.Layer} layer + * The layer to draw upon. + * + * @param {Number} x + * The destination X coordinate. + * + * @param {Number} y + * The destination Y coordinate. + * + * @param {Blob} blob + * The Blob containing the image data to draw. + */ + drawBlob(layer: Layer, x: number, y: number, blob: any): void; + + /** + * Draws the image at the specified URL at the given coordinates. The image + * will be loaded automatically, and this and any future operations will + * wait for the image to finish loading. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + * @param {String} url The URL of the image to draw. + */ + draw(layer: Layer, x: number, y: number, url: string): void; + + /** + * Plays the video at the specified URL within this layer. The video + * will be loaded automatically, and this and any future operations will + * wait for the video to finish loading. Future operations will not be + * executed until the video finishes playing. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {String} mimetype The mimetype of the video to play. + * @param {Number} duration The duration of the video in milliseconds. + * @param {String} url The URL of the video to play. + */ + play(layer: Layer, mimetype: string, duration: number, url: string): void; + + /** + * Transfer a rectangle of image data from one Layer to this Layer using the + * specified transfer function. + * + * @param {Guacamole.Layer} srcLayer The Layer to copy image data from. + * @param {Number} srcx The X coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcy The Y coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcw The width of the rectangle within the source Layer's + * coordinate space to copy data from. + * @param {Number} srch The height of the rectangle within the source + * Layer's coordinate space to copy data from. + * @param {Guacamole.Layer} dstLayer The layer to draw upon. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + * @param {Function} transferFunction The transfer function to use to + * transfer data from source to + * destination. + */ + transfer(srcLayer: Layer, + srcx: number, + srcy: number, + srcw: number, + srch: number, + dstLayer: Layer, + x: number, + y: number, + transferFunction: any): void; + + /** + * Put a rectangle of image data from one Layer to this Layer directly + * without performing any alpha blending. Simply copy the data. + * + * @param {Guacamole.Layer} srcLayer The Layer to copy image data from. + * @param {Number} srcx The X coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcy The Y coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcw The width of the rectangle within the source Layer's + * coordinate space to copy data from. + * @param {Number} srch The height of the rectangle within the source + * Layer's coordinate space to copy data from. + * @param {Guacamole.Layer} dstLayer The layer to draw upon. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + */ + put(srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, dstLayer: Layer, x: number, y: number): void; + + /** + * Copy a rectangle of image data from one Layer to this Layer. This + * operation will copy exactly the image data that will be drawn once all + * operations of the source Layer that were pending at the time this + * function was called are complete. This operation will not alter the + * size of the source Layer even if its autosize property is set to true. + * + * @param {Guacamole.Layer} srcLayer The Layer to copy image data from. + * @param {Number} srcx The X coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcy The Y coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcw The width of the rectangle within the source Layer's + * coordinate space to copy data from. + * @param {Number} srch The height of the rectangle within the source + * Layer's coordinate space to copy data from. + * @param {Guacamole.Layer} dstLayer The layer to draw upon. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + */ + copy(srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, dstLayer: Layer, x: number, y: number): void; + + /** + * Starts a new path at the specified point. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} x The X coordinate of the point to draw. + * @param {Number} y The Y coordinate of the point to draw. + */ + moveTo(layer: Layer, x: number, y: number): void; + + /** + * Add the specified line to the current path. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} x The X coordinate of the endpoint of the line to draw. + * @param {Number} y The Y coordinate of the endpoint of the line to draw. + */ + lineTo(layer: Layer, x: number, y: number): void; + + /** + * Add the specified arc to the current path. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} x The X coordinate of the center of the circle which + * will contain the arc. + * @param {Number} y The Y coordinate of the center of the circle which + * will contain the arc. + * @param {Number} radius The radius of the circle. + * @param {Number} startAngle The starting angle of the arc, in radians. + * @param {Number} endAngle The ending angle of the arc, in radians. + * @param {Boolean} negative Whether the arc should be drawn in order of + * decreasing angle. + */ + arc(layer: Layer, x: number, y: number, radius: number, startAngle: number, endAngle: number, negative: boolean): void; + + /** + * Starts a new path at the specified point. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} cp1x The X coordinate of the first control point. + * @param {Number} cp1y The Y coordinate of the first control point. + * @param {Number} cp2x The X coordinate of the second control point. + * @param {Number} cp2y The Y coordinate of the second control point. + * @param {Number} x The X coordinate of the endpoint of the curve. + * @param {Number} y The Y coordinate of the endpoint of the curve. + */ + curveTo(layer: Layer, cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void; + + /** + * Closes the current path by connecting the end point with the start + * point (if any) with a straight line. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + */ + close(layer: Layer): void; + + /** + * Add the specified rectangle to the current path. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} x The X coordinate of the upper-left corner of the + * rectangle to draw. + * @param {Number} y The Y coordinate of the upper-left corner of the + * rectangle to draw. + * @param {Number} w The width of the rectangle to draw. + * @param {Number} h The height of the rectangle to draw. + */ + rect(layer: Layer, x: number, y: number, w: number, h: number): void; + + /** + * Clip all future drawing operations by the current path. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as fillColor()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {Guacamole.Layer} layer The layer to affect. + */ + clip(layer: Layer): void; + + /** + * Stroke the current path with the specified color. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {String} cap The line cap style. Can be "round", "square", + * or "butt". + * @param {String} join The line join style. Can be "round", "bevel", + * or "miter". + * @param {Number} thickness The line thickness in pixels. + * @param {Number} r The red component of the color to fill. + * @param {Number} g The green component of the color to fill. + * @param {Number} b The blue component of the color to fill. + * @param {Number} a The alpha component of the color to fill. + */ + strokeColor(layer: Layer, cap: string, join: string, thickness: number, r: number, g: number, b: number, a: number): void; + + /** + * Fills the current path with the specified color. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Number} r The red component of the color to fill. + * @param {Number} g The green component of the color to fill. + * @param {Number} b The blue component of the color to fill. + * @param {Number} a The alpha component of the color to fill. + */ + fillColor(layer: Layer, r: number, g: number, b: number, a: number): void; + + /** + * Stroke the current path with the image within the specified layer. The + * image data will be tiled infinitely within the stroke. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {String} cap The line cap style. Can be "round", "square", + * or "butt". + * @param {String} join The line join style. Can be "round", "bevel", + * or "miter". + * @param {Number} thickness The line thickness in pixels. + * @param {Guacamole.Layer} srcLayer The layer to use as a repeating pattern + * within the stroke. + */ + strokeLayer(layer: Layer, cap: string, join: string, thickness: number, srcLayer: Layer): void; + + /** + * Fills the current path with the image within the specified layer. The + * image data will be tiled infinitely within the stroke. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + * @param {Guacamole.Layer} srcLayer The layer to use as a repeating pattern + * within the fill. + */ + fillLayer(layer: Layer, srcLayer: Layer): void; + + /** + * Push current layer state onto stack. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + */ + push(layer: Layer): void; + + /** + * Pop layer state off stack. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + */ + pop(layer: Layer): void; + + /** + * Reset the layer, clearing the stack, the current path, and any transform + * matrix. + * + * @param {Guacamole.Layer} layer The layer to draw upon. + */ + reset(layer: Layer): void; + + /** + * Sets the given affine transform (defined with six values from the + * transform's matrix). + * + * @param {Guacamole.Layer} layer The layer to modify. + * @param {Number} a The first value in the affine transform's matrix. + * @param {Number} b The second value in the affine transform's matrix. + * @param {Number} c The third value in the affine transform's matrix. + * @param {Number} d The fourth value in the affine transform's matrix. + * @param {Number} e The fifth value in the affine transform's matrix. + * @param {Number} f The sixth value in the affine transform's matrix. + */ + setTransform(layer: Layer, a: number, b: number, c: number, d: number, e: number, f: number): void; + + /** + * Applies the given affine transform (defined with six values from the + * transform's matrix). + * + * @param {Guacamole.Layer} layer The layer to modify. + * @param {Number} a The first value in the affine transform's matrix. + * @param {Number} b The second value in the affine transform's matrix. + * @param {Number} c The third value in the affine transform's matrix. + * @param {Number} d The fourth value in the affine transform's matrix. + * @param {Number} e The fifth value in the affine transform's matrix. + * @param {Number} f The sixth value in the affine transform's matrix. + */ + transform(layer: Layer, a: number, b: number, c: number, d: number, e: number, f: number): void; + + /** + * Sets the channel mask for future operations on this Layer. + * + * The channel mask is a Guacamole-specific compositing operation identifier + * with a single bit representing each of four channels (in order): source + * image where destination transparent, source where destination opaque, + * destination where source transparent, and destination where source + * opaque. + * + * @param {Guacamole.Layer} layer The layer to modify. + * @param {Number} mask The channel mask for future operations on this + * Layer. + */ + setChannelMask(layer: Layer, mask: number): void; + + /** + * Sets the miter limit for stroke operations using the miter join. This + * limit is the maximum ratio of the size of the miter join to the stroke + * width. If this ratio is exceeded, the miter will not be drawn for that + * joint of the path. + * + * @param {Guacamole.Layer} layer The layer to modify. + * @param {Number} limit The miter limit for stroke operations using the + * miter join. + */ + setMiterLimit(layer: Layer, limit: number): void; + + /** + * Removes the given layer container entirely, such that it is no longer + * contained within its parent layer, if any. + * + * @param {Guacamole.Display.VisibleLayer} layer + * The layer being removed from its parent. + */ + dispose(layer: Display.VisibleLayer): void; + + /** + * Applies the given affine transform (defined with six values from the + * transform's matrix) to the given layer. + * + * @param {Guacamole.Display.VisibleLayer} layer + * The layer being distorted. + * + * @param {Number} a + * The first value in the affine transform's matrix. + * + * @param {Number} b + * The second value in the affine transform's matrix. + * + * @param {Number} c + * The third value in the affine transform's matrix. + * + * @param {Number} d + * The fourth value in the affine transform's matrix. + * + * @param {Number} e + * The fifth value in the affine transform's matrix. + * + * @param {Number} f + * The sixth value in the affine transform's matrix. + */ + distort(layer: Display.VisibleLayer, a: number, b: number, c: number, d: number, e: number, f: number): void; + + /** + * Moves the upper-left corner of the given layer to the given X and Y + * coordinate, sets the Z stacking order, and reparents the layer + * to the given parent layer. + * + * @param {Guacamole.Display.VisibleLayer} layer + * The layer being moved. + * + * @param {Guacamole.Display.VisibleLayer} parent + * The parent to set. + * + * @param {Number} x + * The X coordinate to move to. + * + * @param {Number} y + * The Y coordinate to move to. + * + * @param {Number} z + * The Z coordinate to move to. + */ + move(layer: Display.VisibleLayer, parent: Display.VisibleLayer, x: number, y: number, z: number): void; + + /** + * Sets the opacity of the given layer to the given value, where 255 is + * fully opaque and 0 is fully transparent. + * + * @param {Guacamole.Display.VisibleLayer} layer + * The layer whose opacity should be set. + * + * @param {Number} alpha + * The opacity to set. + */ + shade(layer: Display.VisibleLayer, alpha: number): void; + + /** + * Sets the scale of the client display element such that it renders at + * a relatively smaller or larger size, without affecting the true + * resolution of the display. + * + * @param {Number} scale The scale to resize to, where 1.0 is normal + * size (1:1 scale). + */ + scale(scale: number): void; + + /** + * Returns the scale of the display. + * + * @return {Number} The scale of the display. + */ + getScale(): number; + + /** + * Returns a canvas element containing the entire display, with all child + * layers composited within. + * + * @return {HTMLCanvasElement} A new canvas element containing a copy of + * the display. + */ + flatten(): any; + + } + + namespace Display { + /** + * Simple container for Guacamole.Layer, allowing layers to be easily + * repositioned and nested. This allows certain operations to be accelerated + * through DOM manipulation, rather than raster operations. + */ + class VisibleLayer { + + /** + * The opacity of the layer container, where 255 is fully opaque and 0 is + * fully transparent. + */ + alpha: number; + + /** + * X coordinate of the upper-left corner of this layer container within + * its parent, in pixels. + * @type {Number} + */ + x: number; + + /** + * Y coordinate of the upper-left corner of this layer container within + * its parent, in pixels. + * @type {Number} + */ + y: number; + + /** + * Z stacking order of this layer relative to other sibling layers. + * @type {Number} + */ + z: number; + + /** + * The affine transformation applied to this layer container. Each element + * corresponds to a value from the transformation matrix, with the first + * three values being the first row, and the last three values being the + * second row. There are six values total. + * + * @type {Number[]} + */ + matrix: number[]; + + /** + * The parent layer container of this layer, if any. + * @type {Guacamole.Display.VisibleLayer} + */ + parent: VisibleLayer; + + /** + * Set of all children of this layer, indexed by layer index. This object + * will have one property per child. + */ + children: any; + + /** + * @augments Guacamole.Layer + * @param {Number} width The width of the Layer, in pixels. The canvas element + * backing this Layer will be given this width. + * @param {Number} height The height of the Layer, in pixels. The canvas element + * backing this Layer will be given this height. + */ + constructor(width: number, height: number); + + resize(width: number, height: number): void; + + /** + * Returns the element containing the canvas and any other elements + * associated with this layer. + * @returns {Element} The element containing this layer's canvas. + */ + getElement(): any; + + /** + * Moves the upper-left corner of this layer to the given X and Y + * coordinate. + * + * @param {Number} x The X coordinate to move to. + * @param {Number} y The Y coordinate to move to. + */ + translate(x: number, y: number): void; + + /** + * Moves the upper-left corner of this VisibleLayer to the given X and Y + * coordinate, sets the Z stacking order, and reparents this VisibleLayer + * to the given VisibleLayer. + * + * @param {Guacamole.Display.VisibleLayer} parent The parent to set. + * @param {Number} x The X coordinate to move to. + * @param {Number} y The Y coordinate to move to. + * @param {Number} z The Z coordinate to move to. + */ + move(parent: VisibleLayer, x: number, y: number, z: number): void; + + /** + * Sets the opacity of this layer to the given value, where 255 is fully + * opaque and 0 is fully transparent. + * + * @param {Number} a The opacity to set. + */ + shade(a: number): void; + + /** + * Removes this layer container entirely, such that it is no longer + * contained within its parent layer, if any. + */ + dispose(): void; + + /** + * Applies the given affine transform (defined with six values from the + * transform's matrix). + * + * @param {Number} a The first value in the affine transform's matrix. + * @param {Number} b The second value in the affine transform's matrix. + * @param {Number} c The third value in the affine transform's matrix. + * @param {Number} d The fourth value in the affine transform's matrix. + * @param {Number} e The fifth value in the affine transform's matrix. + * @param {Number} f The sixth value in the affine transform's matrix. + */ + distort(a: number, b: number, c: number, d: number, e: number, f: number): void; + + } + } + + /** + * Provides cross-browser absolute touch event translation for a given element. + * + * Touch events are translated into mouse events as if the touches occurred + * on a touchscreen (tapping anywhere on the screen clicks at that point, + * long-press to right-click). + */ + class Mouse extends Guacamole.Event.Target { + /** + * @param {Element} element The Element to use to provide touch events. + */ + constructor(element: any); + + /** + * Fired whenever a mouse button is effectively pressed. This can happen + * as part of a "mousedown" gesture initiated by the user by pressing one + * finger over the touchscreen element, as part of a "scroll" gesture + * initiated by dragging two fingers up or down, etc. + * + * @event + * @param {Guacamole.Mouse.State} state The current mouse state. + */ + onmousedown(state: Mouse.State): void; + + /** + * Fired whenever a mouse button is effectively released. This can happen + * as part of a "mouseup" gesture initiated by the user by removing the + * finger pressed against the touchscreen element, or as part of a "scroll" + * gesture initiated by dragging two fingers up or down, etc. + * + * @event + * @param {Guacamole.Mouse.State} state The current mouse state. + */ + onmouseup(state: Mouse.State): void; + + /** + * Fired whenever the user moves the mouse by dragging their finger over + * the touchscreen element. Note that unlike Guacamole.Mouse.Touchpad, + * dragging a finger over the touchscreen element will always cause + * the mouse button to be effectively down, as if clicking-and-dragging. + * + * @event + * @param {Guacamole.Mouse.State} state The current mouse state. + */ + onmousemove(state: Mouse.State): void; + + } + + namespace Mouse { + /** + * Simple container for properties describing the state of a mouse. + */ + class State { + /** + * The current X position of the mouse pointer. + * @type {Number} + */ + x: number; + /** + * The current Y position of the mouse pointer. + * @type {Number} + */ + y: number; + /** + * Whether the left mouse button is currently pressed. + * @type {Boolean} + */ + left: boolean; + /** + * Whether the middle mouse button is currently pressed. + * @type {Boolean} + */ + middle: boolean; + /** + * Whether the right mouse button is currently pressed. + * @type {Boolean} + */ + right: boolean; + /** + * Whether the up mouse button is currently pressed. This is the fourth + * mouse button, associated with upward scrolling of the mouse scroll + * wheel. + * @type {Boolean} + */ + up: boolean; + /** + * Whether the down mouse button is currently pressed. This is the fifth + * mouse button, associated with downward scrolling of the mouse scroll + * wheel. + * @type {Boolean} + */ + down: boolean; + + /** + * @param {Number} x The X position of the mouse pointer in pixels. + * @param {Number} y The Y position of the mouse pointer in pixels. + * @param {Boolean} left Whether the left mouse button is pressed. + * @param {Boolean} middle Whether the middle mouse button is pressed. + * @param {Boolean} right Whether the right mouse button is pressed. + * @param {Boolean} up Whether the up mouse button is pressed (the fourth + * button, usually part of a scroll wheel). + * @param {Boolean} down Whether the down mouse button is pressed (the fifth + * button, usually part of a scroll wheel). + */ + constructor(x: number, y: number, left: boolean, middle: boolean, right: boolean, up: boolean, down: boolean); + } + + /** + * Provides cross-browser absolute touch event translation for a given element. + * + * Touch events are translated into mouse events as if the touches occurred + * on a touchscreen (tapping anywhere on the screen clicks at that point, + * long-press to right-click). + * + * @example + * var touchscreen = new Guacamole.Mouse.Touchscreen(client.getDisplay().getElement()); + * + * // Emulate a mouse using touchscreen-style gestures, forwarding all mouse + * // interaction over Guacamole connection + * touchscreen.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) { + * + * // Re-show software mouse cursor if possibly hidden by a prior call to + * // showCursor(), such as a "mouseout" event handler that hides the + * // cursor + * client.getDisplay().showCursor(true); + * + * client.sendMouseState(e.state, true); + * + * }); + * + * @constructor + * @augments Guacamole.Mouse.Event.Target + * @param {!Element} element + * The Element to use to provide touch events. + */ + class Touchscreen { + + /** + * Provides cross-browser absolute touch event translation for a given element. + * + * Touch events are translated into mouse events as if the touches occurred + * on a touchscreen (tapping anywhere on the screen clicks at that point, + * long-press to right-click). + * + * @example + * var touchscreen = new Guacamole.Mouse.Touchscreen(client.getDisplay().getElement()); + * + * // Emulate a mouse using touchscreen-style gestures, forwarding all mouse + * // interaction over Guacamole connection + * touchscreen.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) { + * + * // Re-show software mouse cursor if possibly hidden by a prior call to + * // showCursor(), such as a "mouseout" event handler that hides the + * // cursor + * client.getDisplay().showCursor(true); + * + * client.sendMouseState(e.state, true); + * + * }); + * + * @constructor + * @augments Guacamole.Mouse.Event.Target + * @param {!Element} element + * The Element to use to provide touch events. + */ + constructor(element: Element); + } + + /** + * Provides cross-browser relative touch event translation for a given element. + */ + class Touchpad { + + /** + * Provides cross-browser relative touch event translation for a given element. + * + * Touch events are translated into mouse events as if the touches occurred + * on a touchpad (drag to push the mouse pointer, tap to click). + * + * @example + * var touchpad = new Guacamole.Mouse.Touchpad(client.getDisplay().getElement()); + * + * // Emulate a mouse using touchpad-style gestures, forwarding all mouse + * // interaction over Guacamole connection + * touchpad.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) { + * + * // Re-show software mouse cursor if possibly hidden by a prior call to + * // showCursor(), such as a "mouseout" event handler that hides the + * // cursor + * client.getDisplay().showCursor(true); + * + * client.sendMouseState(e.state, true); + * + * }); + * + * @constructor + * @augments Guacamole.Mouse.Event.Target + * @param {!Element} element + * The Element to use to provide touch events. + */ + constructor(element: Element); + } + + /** + * Base event type for all mouse events. The mouse producing the event may be + * the user's local mouse (as with {@link Guacamole.Mouse}) or an emulated + * mouse (as with {@link Guacamole.Mouse.Touchpad}). + */ + class MouseEvent extends Guacamole.Event.DOMEvent { + + /** + * Base event type for all mouse events. The mouse producing the event may be + * the user's local mouse (as with {@link Guacamole.Mouse}) or an emulated + * mouse (as with {@link Guacamole.Mouse.Touchpad}). + * + * @constructor + * @augments Guacamole.Event.DOMEvent + * @param {!string} type + * The type name of the event ("mousedown", "mouseup", etc.) + * + * @param {!Guacamole.Mouse.State} state + * The current mouse state. + * + * @param {Event|Event[]} [events=[]] + * The DOM events that are related to this event, if any. + */ + constructor(type: string, state: Guacamole.Mouse.State, events?: Event|Event[]); + + /** + * The current mouse state at the time this event was fired. + * + * @type {!Guacamole.Mouse.State} + */ + state: Guacamole.Mouse.State; + } + + namespace Event { + + /** + * An object which can dispatch {@link Guacamole.Mouse.Event} objects + * representing mouse events. These mouse events may be produced from an actual + * mouse device (as with {@link Guacamole.Mouse}), from an emulated mouse + * device (as with {@link Guacamole.Mouse.Touchpad}, or may be programmatically + * generated (using functions like [dispatch()]{@link Guacamole.Mouse.Event.Target#dispatch}, + * [press()]{@link Guacamole.Mouse.Event.Target#press}, and + * [release()]{@link Guacamole.Mouse.Event.Target#release}). + */ + class Target extends Guacamole.Event.Target { + /** + * An object which can dispatch {@link Guacamole.Mouse.Event} objects + * representing mouse events. These mouse events may be produced from an actual + * mouse device (as with {@link Guacamole.Mouse}), from an emulated mouse + * device (as with {@link Guacamole.Mouse.Touchpad}, or may be programmatically + * generated (using functions like [dispatch()]{@link Guacamole.Mouse.Event.Target#dispatch}, + * [press()]{@link Guacamole.Mouse.Event.Target#press}, and + * [release()]{@link Guacamole.Mouse.Event.Target#release}). + * + * @constructor + * @augments Guacamole.Event.Target + */ + constructor(); + } + } + } + + /** + * An arbitrary event, emitted by a {@link Guacamole.Event.Target}. This object + * should normally serve as the base class for a different object that is more + * specific to the event type. + */ + class Event { + + /** + * An arbitrary event, emitted by a {@link Guacamole.Event.Target}. This object + * should normally serve as the base class for a different object that is more + * specific to the event type. + * + * @constructor + * @param {!string} type + * The unique name of this event type. + */ + constructor(type: string); + + /** + * Requests that the default behavior of related DOM events be prevented. + * Whether this request will be honored by the browser depends on the + * nature of those events and the timing of the request. + */ + preventDefault(): void; + + /** + * Stops further propagation of related events through the DOM. Only events + * that are directly related to this event will be stopped. + */ + stopPropagation(): void; + + } + + namespace Event { + + /** + * A {@link Guacamole.Event} that may relate to one or more DOM events. + * Continued propagation and default behavior of the related DOM events may be + * prevented with {@link Guacamole.Event.DOMEvent#stopPropagation stopPropagation()} + * and {@link Guacamole.Event.DOMEvent#preventDefault preventDefault()} + * respectively. + */ + class DOMEvent extends Guacamole.Event { + + /** + * A {@link Guacamole.Event} that may relate to one or more DOM events. + * Continued propagation and default behavior of the related DOM events may be + * prevented with {@link Guacamole.Event.DOMEvent#stopPropagation stopPropagation()} + * and {@link Guacamole.Event.DOMEvent#preventDefault preventDefault()} + * respectively. + * + * @constructor + * @augments Guacamole.Event + * + * @param {!string} type + * The unique name of this event type. + * + * @param {Event|Event[]} [events=[]] + * The DOM events that are related to this event, if any. Future calls to + * {@link Guacamole.Event.DOMEvent#preventDefault preventDefault()} and + * {@link Guacamole.Event.DOMEvent#stopPropagation stopPropagation()} will + * affect these events. + */ + constructor(type: string, events?: Event|Event[]); + } + + /** + * A callback function which handles an event dispatched by an event + * target. + * + * @param {!Guacamole.Event} event + * The event that was dispatched. + * + * @param {!Guacamole.Event.Target} target + * The object that dispatched the event. + */ + type TargetListener = (event: Guacamole.Event, target: Guacamole.Event.Target) => void; + + /** + * An object which can dispatch {@link Guacamole.Event} objects. Listeners + * registered with {@link Guacamole.Event.Target#on on()} will automatically + * be invoked based on the type of {@link Guacamole.Event} passed to + * {@link Guacamole.Event.Target#dispatch dispatch()}. It is normally + * subclasses of Guacamole.Event.Target that will dispatch events, and usages + * of those subclasses that will catch dispatched events with on(). + */ + class Target { + + /** + * An object which can dispatch {@link Guacamole.Event} objects. Listeners + * registered with {@link Guacamole.Event.Target#on on()} will automatically + * be invoked based on the type of {@link Guacamole.Event} passed to + * {@link Guacamole.Event.Target#dispatch dispatch()}. It is normally + * subclasses of Guacamole.Event.Target that will dispatch events, and usages + * of those subclasses that will catch dispatched events with on(). + * + * @constructor + */ + constructor(); + + + + /** + * Registers a listener for events having the given type, as dictated by + * the {@link Guacamole.Event#type type} property of {@link Guacamole.Event} + * provided to {@link Guacamole.Event.Target#dispatch dispatch()}. + * + * @param {!string} type + * The unique name of this event type. + * + * @param {!Guacamole.Event.Target~listener} listener + * The function to invoke when an event having the given type is + * dispatched. The {@link Guacamole.Event} object provided to + * {@link Guacamole.Event.Target#dispatch dispatch()} will be passed to + * this function, along with the dispatching Guacamole.Event.Target. + */ + on(type: string, listener: Guacamole.Event.TargetListener): void; + + /** + * Registers a listener for events having the given types, as dictated by + * the {@link Guacamole.Event#type type} property of {@link Guacamole.Event} + * provided to {@link Guacamole.Event.Target#dispatch dispatch()}. + *

      + * Invoking this function is equivalent to manually invoking + * {@link Guacamole.Event.Target#on on()} for each of the provided types. + * + * @param {!string[]} types + * The unique names of the event types to associate with the given + * listener. + * + * @param {!Guacamole.Event.Target~listener} listener + * The function to invoke when an event having any of the given types + * is dispatched. The {@link Guacamole.Event} object provided to + * {@link Guacamole.Event.Target#dispatch dispatch()} will be passed to + * this function, along with the dispatching Guacamole.Event.Target. + */ + onEach(types: string[], listener: Guacamole.Event.TargetListener): void; + + } + } + + /** + * Abstract ordered drawing surface. Each Layer contains a canvas element and + * provides simple drawing instructions for drawing to that canvas element, + * however unlike the canvas element itself, drawing operations on a Layer are + * guaranteed to run in order, even if such an operation must wait for an image + * to load before completing. + */ + class Layer { + /** + * @param {Number} width The width of the Layer, in pixels. The canvas element + * backing this Layer will be given this width. + * + * @param {Number} height The height of the Layer, in pixels. The canvas element + * backing this Layer will be given this height. + */ + constructor(width: number, height: number); + + /** + * Returns the canvas element backing this Layer. Note that the dimensions + * of the canvas may not exactly match those of the Layer, as resizing a + * canvas while maintaining its state is an expensive operation. + * + * @returns {HTMLCanvasElement} + * The canvas element backing this Layer. + */ + getCanvas(): any; + + /** + * Returns a new canvas element containing the same image as this Layer. + * Unlike getCanvas(), the canvas element returned is guaranteed to have + * the exact same dimensions as the Layer. + * + * @returns {HTMLCanvasElement} + * A new canvas element containing a copy of the image content this + * Layer. + */ + toCanvas(): any; + + /** + * Changes the size of this Layer to the given width and height. Resizing + * is only attempted if the new size provided is actually different from + * the current size. + * + * @param {Number} newWidth The new width to assign to this Layer. + * @param {Number} newHeight The new height to assign to this Layer. + */ + resize(newWidth: number, newHeight: number): void; + + /** + * Draws the specified image at the given coordinates. The image specified + * must already be loaded. + * + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + * @param {Image} image The image to draw. Note that this is an Image + * object - not a URL. + */ + drawImage(x: number, y: number, image: any): void; + + /** + * Transfer a rectangle of image data from one Layer to this Layer using the + * specified transfer function. + * + * @param {Guacamole.Layer} srcLayer The Layer to copy image data from. + * @param {Number} srcx The X coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcy The Y coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcw The width of the rectangle within the source Layer's + * coordinate space to copy data from. + * @param {Number} srch The height of the rectangle within the source + * Layer's coordinate space to copy data from. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + * @param {Function} transferFunction The transfer function to use to + * transfer data from source to + * destination. + */ + transfer(srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, x: number, y: number, transferFunction: any): void; + + /** + * Put a rectangle of image data from one Layer to this Layer directly + * without performing any alpha blending. Simply copy the data. + * + * @param {Guacamole.Layer} srcLayer The Layer to copy image data from. + * @param {Number} srcx The X coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcy The Y coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcw The width of the rectangle within the source Layer's + * coordinate space to copy data from. + * @param {Number} srch The height of the rectangle within the source + * Layer's coordinate space to copy data from. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + */ + put(srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, x: number, y: number): void; + + /** + * Copy a rectangle of image data from one Layer to this Layer. This + * operation will copy exactly the image data that will be drawn once all + * operations of the source Layer that were pending at the time this + * function was called are complete. This operation will not alter the + * size of the source Layer even if its autosize property is set to true. + * + * @param {Guacamole.Layer} srcLayer The Layer to copy image data from. + * @param {Number} srcx The X coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcy The Y coordinate of the upper-left corner of the + * rectangle within the source Layer's coordinate + * space to copy data from. + * @param {Number} srcw The width of the rectangle within the source Layer's + * coordinate space to copy data from. + * @param {Number} srch The height of the rectangle within the source + * Layer's coordinate space to copy data from. + * @param {Number} x The destination X coordinate. + * @param {Number} y The destination Y coordinate. + */ + copy(srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, x: number, y: number): void; + + /** + * Starts a new path at the specified point. + * + * @param {Number} x The X coordinate of the point to draw. + * @param {Number} y The Y coordinate of the point to draw. + */ + moveTo(x: number, y: number): void; + + /** + * Add the specified line to the current path. + * + * @param {Number} x The X coordinate of the endpoint of the line to draw. + * @param {Number} y The Y coordinate of the endpoint of the line to draw. + */ + lineTo(x: number, y: number): void; + + /** + * Add the specified arc to the current path. + * + * @param {Number} x The X coordinate of the center of the circle which + * will contain the arc. + * @param {Number} y The Y coordinate of the center of the circle which + * will contain the arc. + * @param {Number} radius The radius of the circle. + * @param {Number} startAngle The starting angle of the arc, in radians. + * @param {Number} endAngle The ending angle of the arc, in radians. + * @param {Boolean} negative Whether the arc should be drawn in order of + * decreasing angle. + */ + arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, negative: boolean): void; + + /** + * Starts a new path at the specified point. + * + * @param {Number} cp1x The X coordinate of the first control point. + * @param {Number} cp1y The Y coordinate of the first control point. + * @param {Number} cp2x The X coordinate of the second control point. + * @param {Number} cp2y The Y coordinate of the second control point. + * @param {Number} x The X coordinate of the endpoint of the curve. + * @param {Number} y The Y coordinate of the endpoint of the curve. + */ + curveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void; + + /** + * Closes the current path by connecting the end point with the start + * point (if any) with a straight line. + */ + close(): void; + + /** + * Add the specified rectangle to the current path. + * + * @param {Number} x The X coordinate of the upper-left corner of the + * rectangle to draw. + * @param {Number} y The Y coordinate of the upper-left corner of the + * rectangle to draw. + * @param {Number} w The width of the rectangle to draw. + * @param {Number} h The height of the rectangle to draw. + */ + rect(x: number, y: number, w: number, h: number): void; + + /** + * Clip all future drawing operations by the current path. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as fillColor()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + */ + clip(): void; + + /** + * Stroke the current path with the specified color. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {String} cap The line cap style. Can be "round", "square", + * or "butt". + * @param {String} join The line join style. Can be "round", "bevel", + * or "miter". + * @param {Number} thickness The line thickness in pixels. + * @param {Number} r The red component of the color to fill. + * @param {Number} g The green component of the color to fill. + * @param {Number} b The blue component of the color to fill. + * @param {Number} a The alpha component of the color to fill. + */ + strokeColor(cap: string, join: string, thickness: number, r: number, g: number, b: number, a: number): void; + + /** + * Fills the current path with the specified color. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {Number} r The red component of the color to fill. + * @param {Number} g The green component of the color to fill. + * @param {Number} b The blue component of the color to fill. + * @param {Number} a The alpha component of the color to fill. + */ + fillColor(r: number, g: number, b: number, a: number): void; + + /** + * Stroke the current path with the image within the specified layer. The + * image data will be tiled infinitely within the stroke. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {String} cap The line cap style. Can be "round", "square", + * or "butt". + * @param {String} join The line join style. Can be "round", "bevel", + * or "miter". + * @param {Number} thickness The line thickness in pixels. + * @param {Guacamole.Layer} srcLayer The layer to use as a repeating pattern + * within the stroke. + */ + strokeLayer(cap: string, join: string, thickness: number, srcLayer: Layer): void; + + /** + * Fills the current path with the image within the specified layer. The + * image data will be tiled infinitely within the stroke. The current path + * is implicitly closed. The current path can continue to be reused + * for other operations (such as clip()) but a new path will be started + * once a path drawing operation (path() or rect()) is used. + * + * @param {Guacamole.Layer} srcLayer The layer to use as a repeating pattern + * within the fill. + */ + fillLayer(srcLayer: Layer): void; + + /** + * Push current layer state onto stack. + */ + push(): void; + + /** + * Pop layer state off stack. + */ + pop(): void; + + /** + * Reset the layer, clearing the stack, the current path, and any transform + * matrix. + */ + reset(): void; + + /** + * Sets the given affine transform (defined with six values from the + * transform's matrix). + * + * @param {Number} a The first value in the affine transform's matrix. + * @param {Number} b The second value in the affine transform's matrix. + * @param {Number} c The third value in the affine transform's matrix. + * @param {Number} d The fourth value in the affine transform's matrix. + * @param {Number} e The fifth value in the affine transform's matrix. + * @param {Number} f The sixth value in the affine transform's matrix. + */ + setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void; + + /** + * Applies the given affine transform (defined with six values from the + * transform's matrix). + * + * @param {Number} a The first value in the affine transform's matrix. + * @param {Number} b The second value in the affine transform's matrix. + * @param {Number} c The third value in the affine transform's matrix. + * @param {Number} d The fourth value in the affine transform's matrix. + * @param {Number} e The fifth value in the affine transform's matrix. + * @param {Number} f The sixth value in the affine transform's matrix. + */ + transform(a: number, b: number, c: number, d: number, e: number, f: number): void; + + /** + * Sets the channel mask for future operations on this Layer. + * + * The channel mask is a Guacamole-specific compositing operation identifier + * with a single bit representing each of four channels (in order): source + * image where destination transparent, source where destination opaque, + * destination where source transparent, and destination where source + * opaque. + * + * @param {Number} mask The channel mask for future operations on this + * Layer. + */ + setChannelMask(mask: number): void; + + /** + * Sets the miter limit for stroke operations using the miter join. This + * limit is the maximum ratio of the size of the miter join to the stroke + * width. If this ratio is exceeded, the miter will not be drawn for that + * joint of the path. + * + * @param {Number} limit The miter limit for stroke operations using the + * miter join. + */ + setMiterLimit(limit: number): void; + + } + + /** + * A Guacamole status. Each Guacamole status consists of a status code, defined + * by the protocol, and an optional human-readable message, usually only + * included for debugging convenience. + * + * @constructor + * @param {Number} code + * The Guacamole status code, as defined by Guacamole.Status.Code. + * + * @param {String} [message] + * An optional human-readable message. + */ + class Status { + /** + * Enumeration of all Guacamole status codes. + */ + static Code: any; + + /** + * The Guacamole status code. + * + * @see Guacamole.Status.Code + * @type {!number} + */ + code: number; + + /** + * An arbitrary human-readable message associated with this status, if any. + * The human-readable message is not required, and is generally provided + * for debugging purposes only. For user feedback, it is better to translate + * the Guacamole status code into a message. + * + * @type {string} + */ + message: string; + + /** + * @param {Number} code + * The Guacamole status code, as defined by Guacamole.Status.Code. + * + * @param {String} [message] + * An optional human-readable message. + */ + constructor(code: number, message: string); + + /** + * Returns whether this status represents an error. + * @returns {Boolean} true if this status represents an error, false + * otherwise. + */ + isError(): boolean; + } + + /** + * An input stream abstraction used by the Guacamole client to facilitate + * transfer of files or other binary data. + */ + class InputStream { + + /** + * The index of this stream + */ + index: number; + + /** + * @param {Guacamole.Client} client The client owning this stream. + * @param {Number} index The index of this stream. + */ + constructor(client: Client, index: number); + + /** + * Called when a blob of data is received. + * + * @event + * @param {!string} data + * The received base64 data. + */ + onblob: ((data: string) => void) | null; + + /** + * Called when this stream is closed. + * + * @event + */ + onend: (() => void) | null; + + /** + * Acknowledges the receipt of a blob. + * + * @param {String} message A human-readable message describing the error + * or status. + * @param {Number} code The error code, if any, or 0 for success. + */ + sendAck(message: string, code: number): void; + + } + + /** + * Abstract stream which can receive data. + */ + class OutputStream { + + /** + * The index of this stream + */ + index: number; + + + /** + * @param {Guacamole.Client} client The client owning this stream. + * @param {Number} index The index of this stream. + */ + constructor(client: Client, index: number); + + /** + * Fired whenever an acknowledgement is received from the server, indicating + * that a stream operation has completed, or an error has occurred. + * + * @event + * @param {!Guacamole.Status} status + * The status of the operation. + */ + onack: ((status: Status) => void) | null; + + /** + * Writes the given base64-encoded data to this stream as a blob. + * + * @param {String} data The base64-encoded data to send. + */ + sendBlob(data: string): void; + + /** + * Closes this stream. + */ + sendEnd(): void; + } + + /** + * Integer pool which returns consistently increasing integers while integers + * are in use, and previously-used integers when possible. + */ + class IntegerPool { + /** + * Returns the next available integer in the pool. If possible, a previously + * used integer will be returned. + * + * @return {Number} The next available integer. + */ + next(): number; + + /** + * Frees the given integer, allowing it to be reused. + * + * @param {Number} integer The integer to free. + */ + free(integer: number): void; + + } + + /** + * A reader which automatically handles the given input stream, returning + * strictly text data. Note that this object will overwrite any installed event + * handlers on the given Guacamole.InputStream. + */ + class StringReader { + /** + * @param {Guacamole.InputStream} stream The stream that data will be read + * from. + */ + constructor(stream: InputStream); + + /** + * Fired once for every blob of text data received. + * + * @event + * @param {String} text The data packet received. + */ + ontext(text: string): void; + + /** + * Fired once this stream is finished and no further data will be written. + * @event + */ + onend(): void; + + } + + /** + * A writer which automatically writes to the given output stream with the + * contents of provided Blob objects. + * + * @constructor + * @param {Guacamole.OutputStream} stream + * The stream that data will be written to. + */ + class BlobWriter { + /** + * @param {Guacamole.OutputStream} stream + * The stream that data will be written to. + */ + constructor(stream: OutputStream); + + /** + * Sends the contents of the given blob over the underlying stream. + * + * @param {Blob} blob + * The blob to send. + */ + sendBlob(blob: any): void; + + /** + * Signals that no further text will be sent, effectively closing the + * stream. + */ + sendEnd(): void; + + /** + * Fired for received data, if acknowledged by the server. + * + * @event + * @param {Guacamole.Status} status + * The status of the operation. + */ + onack(status: Status): void; + + /** + * Fired when an error occurs reading a blob passed to + * [sendBlob()]{@link Guacamole.BlobWriter#sendBlob}. The transfer for the + * the given blob will cease, but the stream will remain open. + * + * @event + * @param {Blob} blob + * The blob that was being read when the error occurred. + * + * @param {Number} offset + * The offset of the failed read attempt within the blob, in bytes. + * + * @param {DOMError} error + * The error that occurred. + */ + onerror(blob: any, offset: number, error: any): void; + + /** + * Fired for each successfully-read chunk of data as a blob is being sent + * via [sendBlob()]{@link Guacamole.BlobWriter#sendBlob}. + * + * @event + * @param {Blob} blob + * The blob that is being read. + * + * @param {Number} offset + * The offset of the read that just succeeded. + */ + onprogress(blob: any, offset: number): void; + + /** + * Fired when a blob passed to + * [sendBlob()]{@link Guacamole.BlobWriter#sendBlob} has finished being + * sent. + * + * @event + * @param {Blob} blob + * The blob that was sent. + */ + oncomplete(blob: any): void; + + } + + /** + * A reader which automatically handles the given input stream, assembling all + * received blobs into a single blob by appending them to each other in order. + * Note that this object will overwrite any installed event handlers on the + * given Guacamole.InputStream. + */ + class BlobReader { + /** + * @param {Guacamole.InputStream} stream The stream that data will be read + * from. + * @param {String} mimetype The mimetype of the blob being built. + */ + constructor(stream: InputStream, mimetype: string); + + /** + * Returns the current length of this Guacamole.InputStream, in bytes. + * @return {Number} The current length of this Guacamole.InputStream. + */ + getLength(): number; + + /** + * Returns the contents of this Guacamole.BlobReader as a Blob. + * @return {Blob} The contents of this Guacamole.BlobReader. + */ + getBlob(): any; + + /** + * Fired once for every blob of data received. + * + * @event + * @param {Number} length The number of bytes received. + */ + onprogress(length: number): void; + + /** + * Fired once this stream is finished and no further data will be written. + * @event + */ + onend(): void; + + } + + /** + * A reader which automatically handles the given input stream, returning + * received blobs as a single data URI built over the course of the stream. + * Note that this object will overwrite any installed event handlers on the + * given Guacamole.InputStream. + */ + class DataURIReader { + /** + * @param {Guacamole.InputStream} stream + * @param mimetype + */ + constructor(stream: InputStream, mimetype: InputStream); + + /** + * Returns the data URI of all data received through the underlying stream + * thus far. + * + * @returns {String} + * The data URI of all data received through the underlying stream thus + * far. + */ + getURI(): string; + + /** + * Fired once this stream is finished and no further data will be written. + * + * @event + */ + onend(): void; + } + + /** + * An object used by the Guacamole client to house arbitrarily-many named + * input and output streams. + */ + class Object { + /** + * @param {Guacamole.Client} client + * The client owning this object. + * + * @param {Number} index + * The index of this object. + */ + constructor(client: Client, index: number); + + /** + * Called when this object receives the body of a requested input stream. + * By default, all objects will invoke the callbacks provided to their + * requestInputStream() functions based on the name of the stream + * requested. This behavior can be overridden by specifying a different + * handler here. + * + * @event + * @param {Guacamole.InputStream} inputStream + * The input stream of the received body. + * + * @param {String} mimetype + * The mimetype of the data being received. + * + * @param {String} name + * The name of the stream whose body has been received. + */ + onbody(inputStream: InputStream, mimetype: string, name: string): void; + + /** + * Called when this object is being undefined. Once undefined, no further + * communication involving this object may occur. + * + * @event + */ + onundefine(): void; + + /** + * Requests read access to the input stream having the given name. If + * successful, a new input stream will be created. + * + * @param {String} name + * The name of the input stream to request. + * + * @param {Function} [bodyCallback] + * The callback to invoke when the body of the requested input stream + * is received. This callback will be provided a Guacamole.InputStream + * and its mimetype as its two only arguments. If the onbody handler of + * this object is overridden, this callback will not be invoked. + */ + requestInputStream(name: string, bodyCallback: any): void; + + /** + * Creates a new output stream associated with this object and having the + * given mimetype and name. The legality of a mimetype and name is dictated + * by the object itself. + * + * @param {String} mimetype + * The mimetype of the data which will be sent to the output stream. + * + * @param {String} name + * The defined name of an output stream within this object. + * + * @returns {Guacamole.OutputStream} + * An output stream which will write blobs to the named output stream + * of this object. + */ + createOutputStream(mimetype: string, name: string): OutputStream; + + /** + * The reserved name denoting the root stream of any object. The contents of + * the root stream MUST be a JSON map of stream name to mimetype. + * + * @constant + * @type {!string} + */ + ROOT_STREAM: string; + + /** + * The mimetype of a stream containing JSON which maps available stream names + * to their corresponding mimetype. The root stream of a Guacamole.Object MUST + * have this mimetype. + * + * @constant + * @type {!string} + */ + STREAM_INDEX_MIMETYPE: string; + } + + /** + * A reader which automatically handles the given input stream, assembling all + * received blobs into a JavaScript object by appending them to each other, in + * order, and decoding the result as JSON. Note that this object will overwrite + * any installed event handlers on the given Guacamole.InputStream. + */ + class JSONReader { + /** + * @param {Guacamole.InputStream} stream + */ + constructor(stream: InputStream); + + /** + * Returns the current length of this Guacamole.JSONReader, in characters. + * + * @return {Number} + * The current length of this Guacamole.JSONReader. + */ + getLength(): number; + + /** + * Returns the contents of this Guacamole.JSONReader as a JavaScript + * object. + * + * @return {Object} + * The contents of this Guacamole.JSONReader, as parsed from the JSON + * contents of the input stream. + */ + getJSON(): any; + + /** + * Fired once for every blob of data received. + * + * @event + * @param {Number} length + * The number of characters received. + */ + onprogress(length: number): void; + + /** + * Fired once this stream is finished and no further data will be written. + * + * @event + */ + onend(): void; + } + + /** + * A writer which automatically writes to the given output stream with text + * data. + */ + class StringWriter { + /** + * @param stream @param {Guacamole.OutputStream} stream The stream that data will be written to. + */ + constructor(stream: OutputStream); + + /** + * Sends the given text. + * + * @param {String} text The text to send. + */ + sendText(text: string): void; + + /** + * Signals that no further text will be sent, effectively closing the + * stream. + */ + sendEnd(): void; + + /** + * Fired for received data, if acknowledged by the server. + * @event + * @param {Guacamole.Status} status The status of the operation. + */ + onack: null | ((status: Status) => void); + } + + /** + * Provides cross-browser multi-touch events for a given element. The events of + * the given element are automatically populated with handlers that translate + * touch events into a non-browser-specific event provided by the + * Guacamole.Touch instance. + */ + class Touch { + + /** + * Provides cross-browser multi-touch events for a given element. The events of + * the given element are automatically populated with handlers that translate + * touch events into a non-browser-specific event provided by the + * Guacamole.Touch instance. + * + * @constructor + * @augments Guacamole.Event.Target + * @param {!Element} element + * The Element to use to provide touch events. + */ + constructor(element: Element); + } + + namespace Touch { + + /** + * The current state of a touch contact. + */ + class State{ + + /** + * The current state of a touch contact. + * + * @constructor + * @augments Guacamole.Position + * @param {Guacamole.Touch.State|object} [template={}] + * The object whose properties should be copied within the new + * Guacamole.Touch.State. + */ + constructor(template?: State | any); + } + + /** + * An event which represents a change in state of a single touch contact, + * including the creation or removal of that contact. If multiple contacts are + * involved in a touch interaction, each contact will be associated with its + * own event. + */ + class Event extends Guacamole.Event.DOMEvent { + /** + * An event which represents a change in state of a single touch contact, + * including the creation or removal of that contact. If multiple contacts are + * involved in a touch interaction, each contact will be associated with its + * own event. + * + * @constructor + * @augments Guacamole.Event.DOMEvent + * @param {!string} type + * The name of the touch event type. Possible values are "touchstart", + * "touchmove", and "touchend". + * + * @param {!TouchEvent} event + * The DOM touch event that produced this Guacamole.Touch.Event. + * + * @param {!Guacamole.Touch.State} state + * The state of the touch contact associated with this event. + */ + constructor(type: string, event: TouchEvent, state: Guacamole.Touch.State); + + /** + * The state of the touch contact associated with this event. + * + * @type {!Guacamole.Touch.State} + */ + state: Guacamole.Touch.State; + } + } + + /** + * Simple Guacamole protocol parser that invokes an oninstruction event when + * full instructions are available from data received via receive(). + */ + class Parser { + /** + * Appends the given instruction data packet to the internal buffer of + * this Guacamole.Parser, executing all completed instructions at + * the beginning of this buffer, if any. + * + * @param {String} packet The instruction data to receive. + */ + receive(packet: string): void; + + /** + * Fired once for every complete Guacamole instruction received, in order. + * + * @event + * @param {String} opcode The Guacamole instruction opcode. + * @param {Array} parameters The parameters provided for the instruction, + * if any. + */ + oninstruction(opcode: string, parameters: any): void; + + } + + /** + * A reader which automatically handles the given input stream, returning + * strictly received packets as array buffers. Note that this object will + * overwrite any installed event handlers on the given Guacamole.InputStream. + */ + class ArrayBufferReader { + /** + * @param {Guacamole.InputStream} stream The stream that data will be read + */ + constructor(stream: InputStream); + + /** + * Fired once for every blob of data received. + * + * @event + * @param {ArrayBuffer} buffer The data packet received. + */ + ondata(buffer: ArrayBuffer): void; + + /** + * Fired once this stream is finished and no further data will be written. + * @event + */ + onend(): void; + } + + /** + * A writer which automatically writes to the given output stream with arbitrary + * binary data, supplied as ArrayBuffers. + */ + class ArrayBufferWriter { + /** + * @param {Guacamole.OutputStream} stream The stream that data will be written to. + */ + constructor(stream: OutputStream); + + /** + * Sends the given data. + * + * @param {ArrayBuffer|TypedArray} data The data to send. + */ + sendData(data: any): void; + + /** + * Signals that no further text will be sent, effectively closing the + * stream. + */ + sendEnd(): void; + + /** + * Fired for received data, if acknowledged by the server. + * @event + * @param {Guacamole.Status} status The status of the operation. + */ + onack(status: Status): void; + } + + /** + * A description of the format of raw PCM audio, such as that used by + * Guacamole.RawAudioPlayer and Guacamole.RawAudioRecorder. This object + * describes the number of bytes per sample, the number of channels, and the + * overall sample rate. + */ + class RawAudioFormat { + /** + * @param {Guacamole.RawAudioFormat|Object} template + * The object whose properties should be copied into the corresponding + * properties of the new Guacamole.RawAudioFormat. + */ + constructor(template: any); + + /** + * Parses the given mimetype, returning a new Guacamole.RawAudioFormat + * which describes the type of raw audio data represented by that mimetype. If + * the mimetype is not a supported raw audio data mimetype, null is returned. + * + * @param {String} mimetype + * The audio mimetype to parse. + * + * @returns {Guacamole.RawAudioFormat} + * A new Guacamole.RawAudioFormat which describes the type of raw + * audio data represented by the given mimetype, or null if the given + * mimetype is not supported. + */ + static parse(mimetype: string): RawAudioFormat; + } + + /** + * Abstract video player which accepts, queues and plays back arbitrary video + * data. It is up to implementations of this class to provide some means of + * handling a provided Guacamole.InputStream and rendering the received data to + * the provided Guacamole.Display.VisibleLayer. Data received along the + * provided stream is to be played back immediately. + */ + class VideoPlayer { + /** + * Determines whether the given mimetype is supported by any built-in + * implementation of Guacamole.VideoPlayer, and thus will be properly handled + * by Guacamole.VideoPlayer.getInstance(). + * + * @param {String} mimetype + * The mimetype to check. + * + * @returns {Boolean} + * true if the given mimetype is supported by any built-in + * Guacamole.VideoPlayer, false otherwise. + */ + static isSupportedType(mimetype: string): boolean; + + /** + * Returns a list of all mimetypes supported by any built-in + * Guacamole.VideoPlayer, in rough order of priority. Beware that only the core + * mimetypes themselves will be listed. Any mimetype parameters, even required + * ones, will not be included in the list. + * + * @returns {String[]} + * A list of all mimetypes supported by any built-in Guacamole.VideoPlayer, + * excluding any parameters. + */ + static getSupportedTypes(): string[]; + + /** + * Returns an instance of Guacamole.VideoPlayer providing support for the given + * video format. If support for the given video format is not available, null + * is returned. + * + * @param {Guacamole.InputStream} stream + * The Guacamole.InputStream to read video data from. + * + * @param {Guacamole.Display.VisibleLayer} layer + * The destination layer in which this Guacamole.VideoPlayer should play + * the received video data. + * + * @param {String} mimetype + * The mimetype of the video data in the provided stream. + * + * @return {Guacamole.VideoPlayer} + * A Guacamole.VideoPlayer instance supporting the given mimetype and + * reading from the given stream, or null if support for the given mimetype + * is absent. + */ + static getInstance(stream: InputStream, layer: Display.VisibleLayer, mimetype: string): VideoPlayer; + + /** + * Notifies this Guacamole.VideoPlayer that all video up to the current + * point in time has been given via the underlying stream, and that any + * difference in time between queued video data and the current time can be + * considered latency. + */ + sync(): void; + } + + /** + * A recording of a Guacamole session. Given a {@link Guacamole.Tunnel} or Blob, + * the Guacamole.SessionRecording automatically parses Guacamole instructions + * within the recording source as it plays back the recording. Playback of the + * recording may be controlled through function calls to the + * Guacamole.SessionRecording, even while the recording has not yet finished + * being created or downloaded. Parsing of the contents of the recording will + * begin immediately and automatically after this constructor is invoked. + */ + class SessionRecording { + + /** + * @param {!Blob|Guacamole.Tunnel} source + * The Blob from which the instructions of the recording should + * be read. + */ + constructor(source: Blob | Tunnel); + + /** + * Fired when loading of this recording has completed and all frames + * are available. + * + * @event + */ + onload: null | (() => void); + + /** + * Fired when an error occurs which prevents the recording from being + * played back. + * + * @event + * @param {!string} message + * A human-readable message describing the error that occurred. + */ + onerror: null | ((message: string) => void); + + /** + * Fired when further loading of this recording has been explicitly + * aborted through a call to abort(). + * + * @event + */ + onabort: null | (() => void); + + /** + * Fired when new frames have become available while the recording is + * being downloaded. + * + * @event + * @param {!number} duration + * The new duration of the recording, in milliseconds. + * + * @param {!number} parsedSize + * The number of bytes that have been loaded/parsed. + */ + onprogress: null | ((duration: number, parsedSize: number) => void); + + /** + * Fired whenever playback of the recording has started. + * + * @event + */ + onplay: null | (() => void); + + /** + * Fired whenever playback of the recording has been paused. This may + * happen when playback is explicitly paused with a call to pause(), or + * when playback is implicitly paused due to reaching the end of the + * recording. + * + * @event + */ + onpause: null | (() => void); + + /** + * Fired whenever the playback position within the recording changes. + * + * @event + * @param {!number} position + * The new position within the recording, in milliseconds. + * + * @param {!number} current + * The number of frames that have been seeked through. If not + * seeking through multiple frames due to a call to seek(), this + * will be 1. + * + * @param {!number} total + * The number of frames that are being seeked through in the + * current seek operation. If not seeking through multiple frames + * due to a call to seek(), this will be 1. + */ + onseek: null | ((position: number, current: number, total: number) => void); + + /** + * Connects the underlying tunnel, beginning download of the Guacamole + * session. Playback of the Guacamole session cannot occur until at least + * one frame worth of instructions has been downloaded. If the underlying + * recording source is a Blob, this function has no effect. + * + * @param {string} [data] + * The data to send to the tunnel when connecting. + */ + connect(data?: string): void; + + /** + * Aborts the loading process, stopping further processing of the + * provided data. If the underlying recording source is a Guacamole tunnel, + * it will be disconnected. + */ + abort(): void; + + /** + * Returns the underlying display of the Guacamole.Client used by this + * Guacamole.SessionRecording for playback. The display contains an Element + * which can be added to the DOM, causing the display (and thus playback of + * the recording) to become visible. + * + * @return {!Guacamole.Display} + * The underlying display of the Guacamole.Client used by this + * Guacamole.SessionRecording for playback. + */ + getDisplay(): Display; + + /** + * Returns whether playback is currently in progress. + * + * @returns {!boolean} + * true if playback is currently in progress, false otherwise. + */ + isPlaying(): boolean; + + /** + * Returns the duration of this recording, in milliseconds. If the + * recording is still being downloaded, this value will gradually increase. + * + * @returns {!number} + * The duration of this recording, in milliseconds. + */ + getDuration(): number; + + /** + * Begins continuous playback of the recording downloaded thus far. + * Playback of the recording will continue until pause() is invoked or + * until no further frames exist. Playback is initially paused when a + * Guacamole.SessionRecording is created, and must be explicitly started + * through a call to this function. If playback is already in progress, + * this function has no effect. If a seek operation is in progress, + * playback resumes at the current position, and the seek is aborted as if + * completed. + */ + play(): void; + + /** + * Seeks to the given position within the recording. If the recording is + * currently being played back, playback will continue after the seek is + * performed. If the recording is currently paused, playback will be + * paused after the seek is performed. If a seek operation is already in + * progress, that seek is first aborted. The seek operation will proceed + * asynchronously. + * + * @param {!number} position + * The position within the recording to seek to, in milliseconds. + * + * @param {function} [callback] + * The callback to invoke once the seek operation has completed. + */ + seek(position: number, callback?: () => void): void; + + /** + * Cancels the current seek operation, setting the current frame of the + * recording to wherever the seek operation was able to reach prior to + * being cancelled. If a callback was provided to seek(), that callback + * is invoked. If a seek operation is not currently underway, this + * function has no effect. + */ + cancel(): void; + + /** + * Pauses playback of the recording, if playback is currently in progress. + * If playback is not in progress, this function has no effect. If a seek + * operation is in progress, the seek is aborted. Playback is initially + * paused when a Guacamole.SessionRecording is created, and must be + * explicitly started through a call to play(). + */ + pause(): void; + + /** + * A single frame of Guacamole session data. Each frame is made up of the set + * of instructions used to generate that frame, and the timestamp as dictated + * by the "sync" instruction terminating the frame. Optionally, a frame may + * also be associated with a snapshot of Guacamole client state, such that the + * frame can be rendered without replaying all previous frames. + * + * @private + * @constructor + * @param {!number} timestamp + * The timestamp of this frame, as dictated by the "sync" instruction which + * terminates the frame. + * + * @param {!number} start + * The byte offset within the blob of the first character of the first + * instruction of this frame. + * + * @param {!number} end + * The byte offset within the blob of character which follows the last + * character of the last instruction of this frame. + */ + _Frame(timestamp: number, start: number, end: number): void; + + /** + * A read-only Guacamole.Tunnel implementation which streams instructions + * received through explicit calls to its receiveInstruction() function. + * + * @private + * @constructor + * @augments {Guacamole.Tunnel} + */ + _PlaybackTunnel(): void; + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/public-api.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/public-api.ts new file mode 100644 index 0000000000..c47bc4cf05 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/public-api.ts @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Public API Surface of guacamole-frontend-lib + */ + +import './lib/types/Guacamole' + +// Client lib +export * from './lib/client/client.module'; +export * from './lib/client/components/viewport.component'; +export * from './lib/client/services/guac-audio.service'; +export * from './lib/client/services/guac-image.service'; +export * from './lib/client/services/guac-video.service'; + +// Element +export * from './lib/element/element.module'; +export * from './lib/element/directives/guac-click.directive'; +export * from './lib/element/directives/guac-focus.directive'; +export * from './lib/element/directives/guac-resize.directive'; +export * from './lib/element/directives/guac-scroll.directive'; +export * from './lib/element/directives/guac-upload.directive'; +export * from './lib/element/types/ScrollState'; + +// Events +export * from './lib/events/types/GuacEvent'; +export * from './lib/events/types/GuacEventArguments'; +export * from './lib/events/services/guac-event.service'; + +// OSK +export * from './lib/osk/osk.module'; +export * from './lib/osk/components/osk/osk.component'; + +// Touch +export * from './lib/touch/touch.module'; +export * from './lib/touch/directives/guac-touch-pinch.directive'; +export * from './lib/touch/directives/guac-touch-drag.directive'; diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/click-helper.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/click-helper.ts new file mode 100644 index 0000000000..ecf7e5894a --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/click-helper.ts @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * TODO: Document + * @param element + * @param eventName + * @param coordX + * @param coordY + */ +const dispatchEvent = (element: any, eventName: string, coordX: any, coordY: any) => { + element.dispatchEvent(new MouseEvent(eventName, { + view: window, + bubbles: true, + cancelable: true, + clientX: coordX, + clientY: coordY, + button: 0 + })); +}; + +/** + * TODO: Document + * @param element + */ +export const simulateMouseClick = (element: any) => { + const box = element.getBoundingClientRect(); + const coordX = box.left + (box.right - box.left) / 2; + const coordY = box.top + (box.bottom - box.top) / 2; + + dispatchEvent(element, "mousedown", coordX, coordY); + dispatchEvent(element, "mouseup", coordX, coordY); + dispatchEvent(element, "click", coordX, coordY); +}; diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts new file mode 100644 index 0000000000..3d05b1e98e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestScheduler } from 'rxjs/internal/testing/TestScheduler'; + +/** + * Provides a TestScheduler that can be used for testing RxJS observables ("marble tests"). + */ +export const testScheduler = new TestScheduler((actual, expected) => { + // asserting the two objects are equal - required + // for TestScheduler assertions to work via your test framework + // e.g. using chai. + expect(actual).toEqual(expected); +}); diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json new file mode 100644 index 0000000000..f326bdb7a0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "**/*.spec.ts" + ] +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.prod.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.prod.json new file mode 100644 index 0000000000..06de549e10 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.prod.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.spec.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.spec.json new file mode 100644 index 0000000000..a8fa2f062f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "**/*.spec.ts", + "**/*.d.ts", + "**/Guacamole.ts" + ] +} diff --git a/guacamole/src/main/guacamole-frontend-lib/tsconfig.json b/guacamole/src/main/guacamole-frontend-lib/tsconfig.json new file mode 100644 index 0000000000..d43420139c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-lib/tsconfig.json @@ -0,0 +1,38 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "paths": { + "guacamole-frontend-lib": [ + "dist/guacamole-frontend-lib" + ] + }, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} From 1deaf90b92fb705ab78a7694766983828464ca38 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:01:11 +0200 Subject: [PATCH 05/80] GUACAMOLE-1085: Add Angular library guacamole-fronted-ext-lib --- .../guacamole-frontend-ext-lib/.editorconfig | 16 + .../guacamole-frontend-ext-lib/.gitignore | 8 + .../main/guacamole-frontend-ext-lib/README.md | 27 + .../guacamole-frontend-ext-lib/angular.json | 40 + .../package-lock.json | 11715 ++++++++++++++++ .../guacamole-frontend-ext-lib/package.json | 39 + .../guacamole-frontend-ext-lib/README.md | 24 + .../ng-package.json | 7 + .../guacamole-frontend-ext-lib/package.json | 12 + ...acamole-frontend-ext-lib.component.spec.ts | 40 + .../guacamole-frontend-ext-lib.component.ts | 34 + .../lib/guacamole-frontend-ext-lib.module.ts | 35 + ...guacamole-frontend-ext-lib.service.spec.ts | 35 + .../lib/guacamole-frontend-ext-lib.service.ts | 28 + .../src/public-api.ts | 26 + .../tsconfig.lib.json | 14 + .../tsconfig.lib.prod.json | 10 + .../tsconfig.spec.json | 14 + .../guacamole-frontend-ext-lib/tsconfig.json | 38 + 19 files changed, 12162 insertions(+) create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/.editorconfig create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/.gitignore create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/README.md create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/angular.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/package.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/README.md create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/ng-package.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/package.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.spec.json create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/.editorconfig b/guacamole/src/main/guacamole-frontend-ext-lib/.editorconfig new file mode 100644 index 0000000000..0792692308 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/.gitignore b/guacamole/src/main/guacamole-frontend-ext-lib/.gitignore new file mode 100644 index 0000000000..056c0d3f86 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/.gitignore @@ -0,0 +1,8 @@ +# Compiled output +dist/ + +# Node +node_modules/ + +# Miscellaneous +.angular/ diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/README.md b/guacamole/src/main/guacamole-frontend-ext-lib/README.md new file mode 100644 index 0000000000..8609132624 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/README.md @@ -0,0 +1,27 @@ +# GuacamoleFrontendExtLib + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/angular.json b/guacamole/src/main/guacamole-frontend-ext-lib/angular.json new file mode 100644 index 0000000000..0da68191a0 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/angular.json @@ -0,0 +1,40 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "guacamole-frontend-ext-lib": { + "projectType": "library", + "root": "projects/guacamole-frontend-ext-lib", + "sourceRoot": "projects/guacamole-frontend-ext-lib/src", + "prefix": "guac", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/guacamole-frontend-ext-lib/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/guacamole-frontend-ext-lib/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/guacamole-frontend-ext-lib/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + } + } + } + } +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json b/guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json new file mode 100644 index 0000000000..2940142863 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json @@ -0,0 +1,11715 @@ +{ + "name": "guacamole-frontend-ext-lib", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "guacamole-frontend-ext-lib", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^16.1.0", + "@angular/common": "^16.1.0", + "@angular/compiler": "^16.1.0", + "@angular/core": "^16.1.0", + "@angular/forms": "^16.1.0", + "@angular/platform-browser": "^16.1.0", + "@angular/platform-browser-dynamic": "^16.1.0", + "@angular/router": "^16.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.0", + "@types/jasmine": "~4.3.0", + "jasmine-core": "~4.6.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "@angular/localize": "^16.1.0", + "@angular/platform-server": "^16.1.0", + "@angular/service-worker": "^16.1.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.1.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.1", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1" + } + }, + "node_modules/@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/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/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "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/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.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.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.4.tgz", + "integrity": "sha512-DsJbnxCdjmhRP7dXwjD6JcPc+z7V/4mG3VA1cEFec/+R343TaNPnZ9eJzMkjR4T1BYkjkDIUsPDybkDC0qLrvA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", + "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "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 + }, + "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 + }, + "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 + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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 + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.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, + "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, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "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, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "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 + }, + "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, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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 + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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, + "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==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", + "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "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 + }, + "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, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "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, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "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": [ + { + "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/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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 + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/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/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/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "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, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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 + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "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, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/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/karma/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/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/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==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/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, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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 + }, + "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, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "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/make-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/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "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 + }, + "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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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 + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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 + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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 + }, + "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, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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 + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "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 + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "dependencies": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.17.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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, + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "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 + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "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, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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 + }, + "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/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/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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 + }, + "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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/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 + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=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/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/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "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/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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 + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "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, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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 + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "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 + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/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/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, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "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, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "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, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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 + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.2.tgz", + "integrity": "sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/tar/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 + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/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==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/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 + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "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 + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "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, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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, + "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": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/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 + }, + "node_modules/webpack/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==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "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/wrap-ansi-cjs": { + "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-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, + "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", + "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/wrap-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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/zone.js": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", + "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/package.json b/guacamole/src/main/guacamole-frontend-ext-lib/package.json new file mode 100644 index 0000000000..7ba66c4c01 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/package.json @@ -0,0 +1,39 @@ +{ + "name": "guacamole-frontend-ext-lib", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^16.1.0", + "@angular/common": "^16.1.0", + "@angular/compiler": "^16.1.0", + "@angular/core": "^16.1.0", + "@angular/forms": "^16.1.0", + "@angular/platform-browser": "^16.1.0", + "@angular/platform-browser-dynamic": "^16.1.0", + "@angular/router": "^16.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.0", + "@types/jasmine": "~4.3.0", + "jasmine-core": "~4.6.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/README.md b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/README.md new file mode 100644 index 0000000000..0f3bb6e5d5 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/README.md @@ -0,0 +1,24 @@ +# GuacamoleFrontendExtLib + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0. + +## Code scaffolding + +Run `ng generate component component-name --project guacamole-frontend-ext-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project guacamole-frontend-ext-lib`. +> Note: Don't forget to add `--project guacamole-frontend-ext-lib` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build guacamole-frontend-ext-lib` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build guacamole-frontend-ext-lib`, go to the dist folder `cd dist/guacamole-frontend-ext-lib` and run `npm publish`. + +## Running unit tests + +Run `ng test guacamole-frontend-ext-lib` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/ng-package.json b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/ng-package.json new file mode 100644 index 0000000000..f38009d53c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/guacamole-frontend-ext-lib", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/package.json b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/package.json new file mode 100644 index 0000000000..f780f7e49e --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/package.json @@ -0,0 +1,12 @@ +{ + "name": "guacamole-frontend-ext-lib", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + }, + "dependencies": { + "tslib": "^2.3.0" + }, + "sideEffects": false +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts new file mode 100644 index 0000000000..cff796fefc --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GuacamoleFrontendExtLibComponent } from './guacamole-frontend-ext-lib.component'; + +describe('GuacamoleFrontendExtLibComponent', () => { + let component: GuacamoleFrontendExtLibComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [GuacamoleFrontendExtLibComponent] + }); + fixture = TestBed.createComponent(GuacamoleFrontendExtLibComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts new file mode 100644 index 0000000000..59bd1b47e2 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component } from '@angular/core'; + +@Component({ + selector: 'guac-guacamole-frontend-ext-lib', + template: ` +

      + guacamole-frontend-ext-lib works! +

      + `, + styles: [ + ] +}) +export class GuacamoleFrontendExtLibComponent { + +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts new file mode 100644 index 0000000000..d6555b5b6d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { NgModule } from '@angular/core'; +import { GuacamoleFrontendExtLibComponent } from './guacamole-frontend-ext-lib.component'; + + + +@NgModule({ + declarations: [ + GuacamoleFrontendExtLibComponent + ], + imports: [ + ], + exports: [ + GuacamoleFrontendExtLibComponent + ] +}) +export class GuacamoleFrontendExtLibModule { } diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts new file mode 100644 index 0000000000..9e04f8d400 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { TestBed } from '@angular/core/testing'; + +import { GuacamoleFrontendExtLibService } from './guacamole-frontend-ext-lib.service'; + +describe('GuacamoleFrontendExtLibService', () => { + let service: GuacamoleFrontendExtLibService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(GuacamoleFrontendExtLibService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts new file mode 100644 index 0000000000..cad79c1cd9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class GuacamoleFrontendExtLibService { + + constructor() { } +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts new file mode 100644 index 0000000000..fa688b1524 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Public API Surface of guacamole-frontend-ext-lib + */ + +export * from './lib/guacamole-frontend-ext-lib.service'; +export * from './lib/guacamole-frontend-ext-lib.component'; +export * from './lib/guacamole-frontend-ext-lib.module'; diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.json b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.json new file mode 100644 index 0000000000..543fd474ab --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "**/*.spec.ts" + ] +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json new file mode 100644 index 0000000000..06de549e10 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.spec.json b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.spec.json new file mode 100644 index 0000000000..ce7048bc2c --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json b/guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json new file mode 100644 index 0000000000..c4b05939f9 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json @@ -0,0 +1,38 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "paths": { + "guacamole-frontend-ext-lib": [ + "dist/guacamole-frontend-ext-lib" + ] + }, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} From c9f1b7dd57b2a87843b47c8e6f1658efeb2666e0 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:50:40 +0200 Subject: [PATCH 06/80] GUACAMOLE-1085: Include Angular projects in maven build --- guacamole/pom.xml | 99 ++++++++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 39 deletions(-) diff --git a/guacamole/pom.xml b/guacamole/pom.xml index b0743b0fd6..efc4ea1313 100644 --- a/guacamole/pom.xml +++ b/guacamole/pom.xml @@ -60,82 +60,103 @@ - + com.github.eirslett frontend-maven-plugin 1.11.3 - src/main/frontend ${project.build.directory} - - - - --openssl-legacy-provider - - + install-node-and-npm install-node-and-npm - v18.18.0 - 9.8.1 + v18.16.1 + + - npm-ci + npm-ci-lib npm + src/main/guacamole-frontend-lib ci + - npm-build + npm-build-lib generate-resources npm + src/main/guacamole-frontend-lib run build - - - - - org.apache.maven.plugins - maven-resources-plugin - + + + npm-ci-app + + npm + + + src/main/guacamole-frontend + ci + + + - copy-npm-dependency-list + npm-build-app generate-resources - copy-resources + npm - ${dependency.list.directory} - - - src/main/frontend/dist - - npm-dependencies.txt - - - + src/main/guacamole-frontend + run build + + + + + + + + + + + + + + + + + + + + + + + + + + org.codehaus.mojo @@ -158,22 +179,22 @@ - src/main/frontend/dist + src/main/guacamole-frontend/dist/guacamole-frontend translations/*.json index.html - verifyCachedVersion.js + - src/main/frontend/dist + src/main/guacamole-frontend/dist/guacamole-frontend true translations/*.json index.html - verifyCachedVersion.js + @@ -193,7 +214,7 @@ zip - + @@ -323,7 +344,7 @@ com.google.inject.extensions guice-servlet - + org.glassfish.jersey.containers @@ -359,7 +380,7 @@ jsr250-api 1.0 - + com.google.guava From 08481c16fe5f50c3a78eee0c212acadc4ca71022 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 00:12:44 +0200 Subject: [PATCH 07/80] GUACAMOLE-1085: Add the frontend-lib as a dependency to the frontend --- .../main/guacamole-frontend/package-lock.json | 21 +++++++++++++++++++ .../src/main/guacamole-frontend/package.json | 1 + 2 files changed, 22 insertions(+) diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index 10c35e8213..08fce17eb3 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -21,6 +21,7 @@ "@simonwep/pickr": "^1.8.2", "angular-expressions": "^1.1.9", "file-saver": "^2.0.5", + "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", "jstz": "^2.1.1", "lodash": "^4.17.21", "rxjs": "~7.8.0", @@ -44,6 +45,16 @@ "typescript": "~5.1.3" } }, + "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { + "version": "0.0.1", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + } + }, "../ngx-guacamole/dist/ngx-guacamole": { "version": "0.0.1", "extraneous": true, @@ -6112,6 +6123,10 @@ "dev": true, "license": "ISC" }, + "node_modules/guacamole-frontend-lib": { + "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "link": true + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -15568,6 +15583,12 @@ "version": "4.2.11", "dev": true }, + "guacamole-frontend-lib": { + "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "requires": { + "tslib": "^2.3.0" + } + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index ef79803050..139b17180a 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -22,6 +22,7 @@ "@simonwep/pickr": "^1.8.2", "angular-expressions": "^1.1.9", "file-saver": "^2.0.5", + "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", "jstz": "^2.1.1", "lodash": "^4.17.21", "rxjs": "~7.8.0", From e53049ba3d26b0568690127621bfb14e78eed85d Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 12:07:41 +0200 Subject: [PATCH 08/80] GUACAMOLE-1085: fix: the event service now handles subscribers correctly --- .../directives/guac-click.directive.ts | 30 ++++-- .../services/guac-event.service.spec.ts | 55 ++++++++-- .../lib/events/services/guac-event.service.ts | 27 ++--- .../src/test-utils/test-scheduler.ts | 4 +- .../src/app/app.component.ts | 50 +++++---- .../client-page/client-page.component.ts | 102 ++++++++++++------ .../guac-client-notification.component.ts | 15 ++- .../guac-client/guac-client.component.ts | 61 ++++++----- .../clipboard/clipboard.component.ts | 7 +- .../login/components/login/login.component.ts | 72 +++++++------ .../settings/services/preference.service.ts | 7 +- .../session-storage-factory.service.ts | 26 ++--- .../guac-text-input/text-input.component.ts | 30 +++--- 13 files changed, 302 insertions(+), 184 deletions(-) diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts index 6bbcf7f9f1..c29e16395e 100644 --- a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts @@ -17,7 +17,14 @@ * under the License. */ -import { Directive, ElementRef, HostListener, Input } from '@angular/core'; +import { + DestroyRef, + Directive, + ElementRef, + HostListener, + Input +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { GuacEventService } from "../../events/services/guac-event.service"; import { GuacEventArguments } from "../../events/types/GuacEventArguments"; @@ -81,19 +88,24 @@ export class GuacClickDirective { } } - constructor(private el: ElementRef, - private guacEventService: GuacEventService) { + constructor(el: ElementRef, + private guacEventService: GuacEventService, + private destroyRef: DestroyRef) { this.element = el.nativeElement; // Update tracking of modifier states for each key press - this.guacEventService.on('guacKeydown', ({keyboard}) => { - this.updateModifiers(keyboard); - }); + this.guacEventService.on('guacKeydown') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({keyboard}) => { + this.updateModifiers(keyboard); + }); // Update tracking of modifier states for each key release - this.guacEventService.on('guacKeyup', ({keyboard}) => { - this.updateModifiers(keyboard); - }); + this.guacEventService.on('guacKeyup') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({keyboard}) => { + this.updateModifiers(keyboard); + }); } /** diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts index c65ebb4063..6e0f0aa54c 100644 --- a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts @@ -18,8 +18,10 @@ */ import { TestBed } from '@angular/core/testing'; +import { TestScheduler } from 'rxjs/testing'; +import { getTestScheduler } from '../../../test-utils/test-scheduler'; +import { GuacEvent } from '../types/GuacEvent'; import { GuacEventArguments } from "../types/GuacEventArguments"; - import { GuacEventService } from './guac-event.service'; interface TestEventArgs extends GuacEventArguments { @@ -28,10 +30,14 @@ interface TestEventArgs extends GuacEventArguments { describe('GuacEventService', () => { let service: GuacEventService; + let testScheduler: TestScheduler; beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(GuacEventService); + testScheduler = getTestScheduler() + TestBed.configureTestingModule({ + providers: [GuacEventService], + }); + service = TestBed.inject(GuacEventService); }); it('should be created', () => { @@ -39,13 +45,46 @@ describe('GuacEventService', () => { }); it('should emit test event', () => { - const age = 25; + testScheduler.run(({expectObservable, cold}) => { + + const age = 25; + const expected = { + a: { + age: age, + event: new GuacEvent('test') + } + }; + const events = service.on('test'); + + // Delay the broadcast for one time unit to allow expectObservable to subscribe to the subject + cold('-a').subscribe(() => service.broadcast('test', {age})); + + expectObservable(events).toBe('-a', expected); - service.on('test', ({age, event}) => { - expect(event.name).toBe('test'); - expect(age).toBe(25) }); - service.broadcast('test', {age}); }); + + it('handles multiple subscribers to the same event', () => { + testScheduler.run(({expectObservable, cold}) => { + const age = 25; + const expected = { + a: { + age: age, + event: new GuacEvent('test') + } + }; + + const events1 = service.on('test'); + const events2 = service.on('test'); + + // Delay the broadcast for one time unit to allow expectObservable to subscribe to the subject + cold('-a').subscribe(() => service.broadcast('test', {age})); + + expectObservable(events1).toBe('-a', expected); + expectObservable(events2).toBe('-a', expected); + + }); + }); + }); diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts index 3848b3959a..b072ef4bd4 100644 --- a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts @@ -18,23 +18,10 @@ */ import { Injectable } from '@angular/core'; -import { filter, Subject } from "rxjs"; +import { filter, Observable, Subject } from "rxjs"; import { GuacEvent, GuacEventName } from "../types/GuacEvent"; import { GuacEventArguments } from "../types/GuacEventArguments"; -/** - * A callback for the event T. The arguments for the callback are inferred - * based on the Args and Event type parameters. - * - * @template Args - * The type of where the callback arguments for the event are specified. - * - * @template Event - * The type of the event. - */ -export type GuacEventCallback> - = (args: { event: GuacEvent } & Args[Event]) => void - /** * Service for broadcasting and subscribing to Guacamole frontend events. */ @@ -63,11 +50,13 @@ export class GuacEventService { /** * TODO: Document * @param eventName - * @param callback + * @returns */ - on>(eventName: T, callback: GuacEventCallback) { - this.events - .pipe(filter(({event}) => eventName === event.name)) - .subscribe((args) => callback(args)); + on>(eventName: T): Observable<{ + event: GuacEvent + } & Args[T]> { + return this.events.pipe( + filter(({event}) => eventName === event.name) + ); } } diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts index 3d05b1e98e..78eb457836 100644 --- a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts +++ b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts @@ -17,12 +17,12 @@ * under the License. */ -import { TestScheduler } from 'rxjs/internal/testing/TestScheduler'; +import { TestScheduler } from 'rxjs/testing'; /** * Provides a TestScheduler that can be used for testing RxJS observables ("marble tests"). */ -export const testScheduler = new TestScheduler((actual, expected) => { +export const getTestScheduler = () => new TestScheduler((actual, expected) => { // asserting the two objects are equal - required // for TestScheduler assertions to work via your test framework // e.g. using chai. diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts index 219e254028..95d17aa2e9 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts @@ -258,7 +258,9 @@ export class AppComponent implements OnInit, AfterViewChecked { // Display login screen if a whole new set of credentials is needed this.guacEventService - .on('guacInvalidCredentials', ({error}) => { + .on('guacInvalidCredentials') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({error}) => { this.setApplicationState(ApplicationState.AWAITING_CREDENTIALS); @@ -270,7 +272,9 @@ export class AppComponent implements OnInit, AfterViewChecked { // Prompt for remaining credentials if provided credentials were not enough this.guacEventService - .on('guacInsufficientCredentials', ({parameters, error}) => { + .on('guacInsufficientCredentials') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({parameters, error}) => { this.setApplicationState(ApplicationState.AWAITING_CREDENTIALS); @@ -282,33 +286,39 @@ export class AppComponent implements OnInit, AfterViewChecked { // Alert user to authentication errors that occur in the absence of an // interactive login form - this.guacEventService.on('guacLoginFailed', ({error}) => { + this.guacEventService.on('guacLoginFailed') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({error}) => { - // All errors related to an interactive login form are handled elsewhere - if (this.applicationState === ApplicationState.AWAITING_CREDENTIALS - || error.type === Error.Type.INSUFFICIENT_CREDENTIALS - || error.type === Error.Type.INVALID_CREDENTIALS) - return; + // All errors related to an interactive login form are handled elsewhere + if (this.applicationState === ApplicationState.AWAITING_CREDENTIALS + || error.type === Error.Type.INSUFFICIENT_CREDENTIALS + || error.type === Error.Type.INVALID_CREDENTIALS) + return; - this.setApplicationState(ApplicationState.AUTOMATIC_LOGIN_REJECTED); - this.reAuthenticating = false; - this.fatalError = error; + this.setApplicationState(ApplicationState.AUTOMATIC_LOGIN_REJECTED); + this.reAuthenticating = false; + this.fatalError = error; - }); + }); // Replace absolutely all content with an error message if the page itself // cannot be displayed due to an error - this.guacEventService.on('guacFatalPageError', ({error}) => { - this.setApplicationState(ApplicationState.FATAL_ERROR); - this.fatalError = error; - }); + this.guacEventService.on('guacFatalPageError') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({error}) => { + this.setApplicationState(ApplicationState.FATAL_ERROR); + this.fatalError = error; + }); // Replace the overall user interface with an informational message if the // user has manually logged out - this.guacEventService.on('guacLogout', () => { - this.setApplicationState(ApplicationState.LOGGED_OUT); - this.reAuthenticating = false; - }); + this.guacEventService.on('guacLogout') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.setApplicationState(ApplicationState.LOGGED_OUT); + this.reAuthenticating = false; + }); // Add the CSS class provided in the route data property 'bodyClassName' to the body element this.router.events.pipe( diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts index 3627e30d33..7739b5140c 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts @@ -30,17 +30,25 @@ import { SimpleChanges, ViewEncapsulation } from '@angular/core'; -import { AuthenticationService } from '../../../auth/service/authentication.service'; +import { + AuthenticationService +} from '../../../auth/service/authentication.service'; import { ClipboardService } from '../../../clipboard/services/clipboard.service'; import { GuacFrontendEventArguments } from '../../../events/types/GuacFrontendEventArguments'; -import { ConnectionGroupService } from '../../../rest/service/connection-group.service'; +import { + ConnectionGroupService +} from '../../../rest/service/connection-group.service'; import { GuacEventService, ScrollState } from 'guacamole-frontend-lib'; -import { DataSourceService } from '../../../rest/service/data-source-service.service'; -import { PreferenceService } from '../../../settings/services/preference.service'; +import { + DataSourceService +} from '../../../rest/service/data-source-service.service'; +import { + PreferenceService +} from '../../../settings/services/preference.service'; import { RequestService } from '../../../rest/service/request.service'; import { TunnelService } from '../../../rest/service/tunnel.service'; import { UserPageService } from '../../../manage/services/user-page.service'; @@ -50,7 +58,9 @@ import { ManagedClientService } from '../../services/managed-client.service'; import { ManagedClientGroup } from '../../types/ManagedClientGroup'; import { ConnectionListContext } from '../../types/ConnectionListContext'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; -import { GuacClientManagerService } from '../../services/guac-client-manager.service'; +import { + GuacClientManagerService +} from '../../services/guac-client-manager.service'; import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'; import _filter from 'lodash/filter'; import findIndex from 'lodash/findIndex'; @@ -58,13 +68,17 @@ import findKey from 'lodash/findKey'; import intersection from 'lodash/intersection'; import isEmpty from 'lodash/isEmpty'; import pull from 'lodash/pull'; -import { filter, pairwise, startWith, tap } from 'rxjs'; +import { filter, pairwise, startWith, Subscription, tap } from 'rxjs'; import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; import { SharingProfile } from '../../../rest/types/SharingProfile'; import { ManagedClientState } from '../../types/ManagedClientState'; import { ManagedFilesystem } from '../../types/ManagedFilesystem'; -import { ManagedFilesystemService } from '../../services/managed-filesystem.service'; -import { NotificationAction } from '../../../notification/types/NotificationAction'; +import { + ManagedFilesystemService +} from '../../services/managed-filesystem.service'; +import { + NotificationAction +} from '../../../notification/types/NotificationAction'; import { Protocol } from '../../../rest/types/Protocol'; import { FormGroup } from '@angular/forms'; import { FormService } from '../../../form/service/form.service'; @@ -106,19 +120,32 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { * In order to open the guacamole menu, we need to hit ctrl-alt-shift. There are * several possible keysysms for each key. */ - private readonly SHIFT_KEYS: Record = {0xFFE1: true, 0xFFE2: true}; + private readonly SHIFT_KEYS: Record = { + 0xFFE1: true, + 0xFFE2: true + }; private readonly ALT_KEYS: Record = { 0xFFE9: true, 0xFFEA: true, 0xFE03: true, 0xFFE7: true, 0xFFE8: true }; - private readonly CTRL_KEYS: Record = {0xFFE3: true, 0xFFE4: true}; - private readonly MENU_KEYS: Record = {...this.SHIFT_KEYS, ...this.ALT_KEYS, ...this.CTRL_KEYS}; + private readonly CTRL_KEYS: Record = { + 0xFFE3: true, + 0xFFE4: true + }; + private readonly MENU_KEYS: Record = { + ...this.SHIFT_KEYS, + ...this.ALT_KEYS, + ...this.CTRL_KEYS + }; /** * Keysym for detecting any END key presses, for the purpose of passing through * the Ctrl-Alt-Del sequence to a remote system. */ - private readonly END_KEYS: Record = {0xFF57: true, 0xFFB1: true}; + private readonly END_KEYS: Record = { + 0xFF57: true, + 0xFFB1: true + }; /** * Keysym for sending the DELETE key when the Ctrl-Alt-End hotkey @@ -253,7 +280,9 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { // Automatically track and cache the currently-focused client - this.guacEventService.on('guacClientFocused', ({newFocusedClient}) => { + this.guacEventService.on('guacClientFocused') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({newFocusedClient}) => { const oldFocusedClient = this.focusedClient; this.focusedClient = newFocusedClient; @@ -271,37 +300,41 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { // Opening the Guacamole menu after Ctrl+Alt+Shift, preventing those // keypresses from reaching any Guacamole client - this.guacEventService.on('guacBeforeKeydown', ({event, keyboard}) => { + this.guacEventService.on('guacBeforeKeydown') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event, keyboard}) => { - // Toggle menu if menu shortcut (Ctrl+Alt+Shift) is pressed - if (this.isMenuShortcutPressed(keyboard)) { + // Toggle menu if menu shortcut (Ctrl+Alt+Shift) is pressed + if (this.isMenuShortcutPressed(keyboard)) { - // Don't send this key event through to the client, and release - // all other keys involved in performing this shortcut - event.preventDefault(); - keyboard.reset(); + // Don't send this key event through to the client, and release + // all other keys involved in performing this shortcut + event.preventDefault(); + keyboard.reset(); - // Toggle the menu - // TODO: $scope.$apply(function() { - this.menu.shown.update(shown => !shown); - // }); + // Toggle the menu + this.menu.shown.update(shown => !shown); - } + } - // Prevent all keydown events while menu is open - else if (this.menu.shown()) - event.preventDefault(); + // Prevent all keydown events while menu is open + else if (this.menu.shown()) + event.preventDefault(); - }); + }); // Prevent all keyup events while menu is open - this.guacEventService.on('guacBeforeKeyup', ({event}) => { + this.guacEventService.on('guacBeforeKeyup') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event}) => { if (this.menu.shown()) event.preventDefault(); }); // Send Ctrl-Alt-Delete when Ctrl-Alt-End is pressed. - this.guacEventService.on('guacKeydown', ({event, keysym, keyboard}) => { + this.guacEventService.on('guacKeydown') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event, keysym, keyboard}) => { // If one of the End keys is pressed, and we have a one keysym from each // of Ctrl and Alt groups, send Ctrl-Alt-Delete. @@ -324,7 +357,9 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { }); // Update pressed keys as they are released - this.guacEventService.on('guacKeyup', ({event, keysym}) => { + this.guacEventService.on('guacKeyup') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event, keysym}) => { // Deal with substitute key presses if (this.substituteKeysPressed[keysym]) { @@ -347,7 +382,8 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { this.connectionParameters = this.formService.getFormGroup(this.focusedClient.forms); this.connectionParameters.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(value => this.menu.connectionParameters = value); - } else { + } + else { this.connectionParameters = new FormGroup({}); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts index 202077df16..5b42726c30 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-notification/guac-client-notification.component.ts @@ -18,7 +18,7 @@ */ import { - Component, + Component, DestroyRef, DoCheck, Input, KeyValueDiffer, @@ -28,6 +28,7 @@ import { SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { GuacFrontendEventArguments } from '../../../events/types/GuacFrontendEventArguments'; @@ -154,7 +155,8 @@ export class GuacClientNotificationComponent implements OnInit, OnChanges, DoChe private guacEventService: GuacEventService, private router: Router, private route: ActivatedRoute, - private differs: KeyValueDiffers) { + private differs: KeyValueDiffers, + private destroyRef: DestroyRef) { } ngOnInit(): void { @@ -180,9 +182,12 @@ export class GuacClientNotificationComponent implements OnInit, OnChanges, DoChe // Block internal handling of key events (by the client) if a // notification is visible - this.guacEventService.on('guacBeforeKeydown', ({event}) => this.preventDefaultDuringNotification(event)); - this.guacEventService.on('guacBeforeKeyup', ({event}) => this.preventDefaultDuringNotification(event)); - + this.guacEventService.on('guacBeforeKeydown') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event}) => this.preventDefaultDuringNotification(event)); + this.guacEventService.on('guacBeforeKeyup') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event}) => this.preventDefaultDuringNotification(event)); } /** diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts index 7db02c0375..bcbd93da6f 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts @@ -18,7 +18,7 @@ */ import { - Component, + Component, DestroyRef, ElementRef, Inject, Input, @@ -28,6 +28,7 @@ import { ViewChild, ViewEncapsulation } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { GuacEventService } from 'guacamole-frontend-lib'; import { GuacFrontendEventArguments @@ -140,6 +141,7 @@ export class GuacClientComponent implements OnInit, OnChanges { */ constructor(private managedClientService: ManagedClientService, private guacEventService: GuacEventService, + private destroyRef: DestroyRef, @Inject(DOCUMENT) private document: Document) { this.window = this.document.defaultView as Window; } @@ -168,38 +170,47 @@ export class GuacClientComponent implements OnInit, OnChanges { }); // Update remote clipboard if local clipboard changes - this.guacEventService.on('guacClipboard', ({data}) => { - this.managedClientService.setClipboard(this.managedClient, data); - }); + this.guacEventService.on('guacClipboard') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({data}) => { + this.managedClientService.setClipboard(this.managedClient, data); + }); // Translate local keydown events to remote keydown events if keyboard is enabled - this.guacEventService.on('guacKeydown', ({event, keysym}) => { - if (this.managedClient.clientProperties.focused) { - this.guacamoleClient?.sendKeyEvent(1, keysym); - event.preventDefault(); - } - }); + this.guacEventService.on('guacKeydown') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event, keysym}) => { + if (this.managedClient.clientProperties.focused) { + this.guacamoleClient?.sendKeyEvent(1, keysym); + event.preventDefault(); + } + }); // Translate local keyup events to remote keyup events if keyboard is enabled - this.guacEventService.on('guacKeyup', ({event, keysym}) => { - if (this.managedClient.clientProperties.focused) { - this.guacamoleClient?.sendKeyEvent(0, keysym); - event.preventDefault(); - } - }); + this.guacEventService.on('guacKeyup') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event, keysym}) => { + if (this.managedClient.clientProperties.focused) { + this.guacamoleClient?.sendKeyEvent(0, keysym); + event.preventDefault(); + } + }); // Universally handle all synthetic keydown events - this.guacEventService.on('guacSyntheticKeydown', ({keysym}) => { - if (this.managedClient.clientProperties.focused) - this.guacamoleClient?.sendKeyEvent(1, keysym); - }); + this.guacEventService.on('guacSyntheticKeydown') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({keysym}) => { + if (this.managedClient.clientProperties.focused) + this.guacamoleClient?.sendKeyEvent(1, keysym); + }); // Universally handle all synthetic keyup events - this.guacEventService.on('guacSyntheticKeyup', ({keysym}) => { - if (this.managedClient.clientProperties.focused) - this.guacamoleClient?.sendKeyEvent(0, keysym); - }); - + this.guacEventService.on('guacSyntheticKeyup') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({keysym}) => { + if (this.managedClient.clientProperties.focused) + this.guacamoleClient?.sendKeyEvent(0, keysym); + }); this.main.addEventListener('dragenter', this.notifyDragStart, false); this.main.addEventListener('dragover', this.notifyDragStart, false); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts index 8057dca6d3..4cd4dd92f2 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts @@ -93,9 +93,10 @@ export class ClipboardComponent implements OnInit, AfterViewInit, OnDestroy { ngOnInit(): void { // Update remote clipboard if local clipboard changes - this.guacEventService.on('guacClipboard', ({data}) => { - this.updateClipboardEditor(data); - }); + this.guacEventService.on('guacClipboard') + .subscribe(({data}) => { + this.updateClipboardEditor(data); + }); } ngAfterViewInit(): void { diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts index 1fb78b5cd5..929d97eb1c 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts @@ -200,45 +200,51 @@ export class LoginComponent implements OnInit, OnChanges { ngOnInit(): void { // Update UI to reflect in-progress auth status (clear any previous // errors, flag as pending) - this.guacEventService.on('guacLoginPending', () => { - this.submitted = true; - this.loginError = null; - }); + this.guacEventService.on('guacLoginPending') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.submitted = true; + this.loginError = null; + }); // Retry route upon success (entered values will be cleared only // after route change has succeeded as this can take time) - this.guacEventService.on('guacLogin', () => { - this.router.navigate([this.router.url], {onSameUrlNavigation: 'reload'}); - }); + this.guacEventService.on('guacLogin') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.router.navigate([this.router.url], {onSameUrlNavigation: 'reload'}); + }); // Reset upon failure - this.guacEventService.on('guacLoginFailed', ({error}) => { - - // Initial submission is complete and has failed - this.submitted = false; - - // Clear out passwords if the credentials were rejected for any reason - if (error.type !== Error.Type.INSUFFICIENT_CREDENTIALS) { - - // Flag generic error for invalid login - if (error.type === Error.Type.INVALID_CREDENTIALS) - this.loginError = { - key: 'LOGIN.ERROR_INVALID_LOGIN' - }; - - // Display error if anything else goes wrong - else - this.loginError = error.translatableMessage || null; - - // Reset all remaining fields to default values, but - // preserve any usernames - this.remainingFields.forEach((field) => { - if (field.type !== Field.Type.USERNAME && field.name in this.enteredValues) - this.enteredValues.get(field.name)?.setValue(this.DEFAULT_FIELD_VALUE); - }); - } + this.guacEventService.on('guacLoginFailed') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({error}) => { + + // Initial submission is complete and has failed + this.submitted = false; + + // Clear out passwords if the credentials were rejected for any reason + if (error.type !== Error.Type.INSUFFICIENT_CREDENTIALS) { + + // Flag generic error for invalid login + if (error.type === Error.Type.INVALID_CREDENTIALS) + this.loginError = { + key: 'LOGIN.ERROR_INVALID_LOGIN' + }; + + // Display error if anything else goes wrong + else + this.loginError = error.translatableMessage || null; + + // Reset all remaining fields to default values, but + // preserve any usernames + this.remainingFields.forEach((field) => { + if (field.type !== Field.Type.USERNAME && field.name in this.enteredValues) + this.enteredValues.get(field.name)?.setValue(this.DEFAULT_FIELD_VALUE); + }); + } - }); + }); // Reset state after authentication and routing have succeeded this.router.events.pipe( diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts index 340c117d77..14a5e4a9b6 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts @@ -113,9 +113,10 @@ export class PreferenceService { // Persist settings upon logout - this.guacEventService.on('guacLogout', () => { - this.save(); - }); + this.guacEventService.on('guacLogout') + .subscribe(() => { + this.save(); + }); } /** diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts index 9d851ff5c0..2c0b8f396a 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts @@ -94,23 +94,25 @@ export class SessionStorageFactory { let value: any = undefined; // Reset value and allow storage when the user is logged in - this.guacEventService.on('guacLogin', function userLoggedIn() { - enabled = true; - value = undefined; - }); + this.guacEventService.on('guacLogin') + .subscribe(() => { + enabled = true; + value = undefined; + }); // Reset value and disallow storage when the user is logged out - this.guacEventService.on('guacLogout', function userLoggedOut() { + this.guacEventService.on('guacLogout') + .subscribe(() => { - // Call destructor before storage is torn down - if (isDefined(value) && destructor) - destructor(value); + // Call destructor before storage is torn down + if (isDefined(value) && destructor) + destructor(value); - // Destroy storage - enabled = false; - value = undefined; + // Destroy storage + enabled = false; + value = undefined; - }); + }); // Return getter/setter for value return function sessionLocalGetterSetter(newValue: any) { diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts index 6b54b52e2d..55350e1fa3 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts @@ -19,11 +19,12 @@ import { AfterViewInit, - Component, + Component, DestroyRef, ElementRef, ViewChild, ViewEncapsulation } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { GuacEventService } from 'guacamole-frontend-lib'; import { GuacFrontendEventArguments @@ -133,7 +134,8 @@ export class TextInputComponent implements AfterViewInit { /** * Inject required services. */ - constructor(private guacEventService: GuacEventService) { + constructor(private guacEventService: GuacEventService, + private destroyRef: DestroyRef) { } ngAfterViewInit(): void { @@ -185,18 +187,22 @@ export class TextInputComponent implements AfterViewInit { }, false); // If the text input UI has focus, prevent keydown events - this.guacEventService.on('guacBeforeKeydown', ({event, keysym}) => { - // filterKeydown - if (this.hasFocus && !ALLOWED_KEYS[keysym]) - event.preventDefault(); - }); + this.guacEventService.on('guacBeforeKeydown') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event, keysym}) => { + // filterKeydown + if (this.hasFocus && !ALLOWED_KEYS[keysym]) + event.preventDefault(); + }); // If the text input UI has focus, prevent keyup events - this.guacEventService.on('guacBeforeKeyup', ({event, keysym}) => { - // filterKeyup - if (this.hasFocus && !ALLOWED_KEYS[keysym]) - event.preventDefault(); - }); + this.guacEventService.on('guacBeforeKeyup') + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({event, keysym}) => { + // filterKeyup + if (this.hasFocus && !ALLOWED_KEYS[keysym]) + event.preventDefault(); + }); // Attempt to focus initially this.target.focus(); From 54862715935c6b1bba03dec7e63a95b850248fd3 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 13:40:06 +0200 Subject: [PATCH 09/80] GUACAMOLE-1085: Switch to Firefox for karma tests, remove empty test files --- .../main/guacamole-frontend/package-lock.json | 81 +++++++++++-------- .../src/main/guacamole-frontend/package.json | 2 +- .../projects/guacamole-frontend/karma.conf.js | 4 +- .../src/app/app.component.spec.ts | 43 ---------- .../services/guac-translate.service.spec.ts | 5 +- .../checkbox-field.component.spec.ts | 40 --------- .../date-field/date-field.component.spec.ts | 40 --------- .../form-field/form-field.component.spec.ts | 40 --------- .../guac-input-color.component.spec.ts | 40 --------- .../language-field.component.spec.ts | 40 --------- .../number-field.component.spec.ts | 40 --------- .../password-field.component.spec.ts | 40 --------- .../redirect-field.component.spec.ts | 40 --------- ...minal-color-scheme-field.component.spec.ts | 40 --------- .../text-field/text-field.component.spec.ts | 40 --------- .../time-field/time-field.component.spec.ts | 40 --------- .../time-zone-field.component.spec.ts | 40 --------- .../form/service/color-picker.service.spec.ts | 35 -------- .../data-source-builder.service.spec.ts | 9 ++- .../guac-page-list.component.spec.ts | 9 ++- .../guac-section-tabs.component.spec.ts | 16 +++- .../player-display.component.spec.ts | 42 ---------- .../src/app/player/player.component.spec.ts | 42 ---------- .../src/app/player/player.module.ts | 4 +- .../app/rest/service/request.service.spec.ts | 6 +- .../text-input/guac-key/key.component.spec.ts | 4 + .../text-input.component.spec.ts | 40 --------- .../src/app/util/test-helper.ts | 4 +- 28 files changed, 93 insertions(+), 733 deletions(-) delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index 08fce17eb3..c5d81b93f8 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -37,8 +37,8 @@ "@types/lodash": "^4.14.194", "jasmine-core": "~4.5.0", "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.2.0", + "karma-firefox-launcher": "~2.1.2", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", "ng-packagr": "^16.1.0", @@ -7161,14 +7161,6 @@ "node": ">= 10" } }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "which": "^1.2.1" - } - }, "node_modules/karma-coverage": { "version": "2.2.0", "dev": true, @@ -7185,6 +7177,31 @@ "node": ">=10.0.0" } }, + "node_modules/karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "dependencies": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + } + }, + "node_modules/karma-firefox-launcher/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/karma-jasmine": { "version": "5.1.0", "dev": true, @@ -11270,17 +11287,6 @@ "node": ">=0.8.0" } }, - "node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -16327,13 +16333,6 @@ } } }, - "karma-chrome-launcher": { - "version": "3.1.1", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, "karma-coverage": { "version": "2.2.0", "dev": true, @@ -16346,6 +16345,27 @@ "minimatch": "^3.0.4" } }, + "karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "requires": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + }, + "dependencies": { + "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" + } + } + } + }, "karma-jasmine": { "version": "5.1.0", "dev": true, @@ -19026,13 +19046,6 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, - "which": { - "version": "1.3.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index 139b17180a..598aaa6f2e 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -38,7 +38,7 @@ "@types/lodash": "^4.14.194", "jasmine-core": "~4.5.0", "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", + "karma-firefox-launcher": "~2.1.2", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js index 7e8f887342..2ae528f5b2 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/karma.conf.js @@ -26,7 +26,7 @@ module.exports = function (config) { frameworks: ['jasmine', '@angular-devkit/build-angular'], plugins: [ require('karma-jasmine'), - require('karma-chrome-launcher'), + require('karma-firefox-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage'), require('@angular-devkit/build-angular/plugins/karma') @@ -53,7 +53,7 @@ module.exports = function (config) { ] }, reporters: ['progress', 'kjhtml'], - browsers: ['Chrome'], + browsers: ['Firefox'], restartOnFileChange: true }); }; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts deleted file mode 100644 index 23f4fa64b0..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; -import { AppComponent } from './app.component'; -import { NavigationModule } from "./navigation/navigation.module"; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - RouterTestingModule, - NavigationModule - ], - declarations: [ - AppComponent - ], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts index c0895b4e0d..3455f52624 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-translate.service.spec.ts @@ -18,18 +18,21 @@ */ import { TestBed } from '@angular/core/testing'; +import { TestScheduler } from 'rxjs/testing'; import { GuacTranslateService } from './guac-translate.service'; import { TRANSLOCO_MISSING_HANDLER, TranslocoService, TranslocoTestingModule } from '@ngneat/transloco'; import { GuacMissingHandler } from '../../locale/locale.module'; -import { testScheduler } from '../../util/test-helper'; +import { getTestScheduler } from '../../util/test-helper'; import { TranslationResult } from '../types/TranslationResult'; describe('GuacTranslateService', () => { let service: GuacTranslateService; let transloco: TranslocoService; + let testScheduler: TestScheduler; beforeEach(() => { + testScheduler = getTestScheduler(); TestBed.configureTestingModule({ imports: [ TranslocoTestingModule.forRoot({ diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts deleted file mode 100644 index 0e73d1833a..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/checkbox-field/checkbox-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { CheckboxFieldComponent } from './checkbox-field.component'; - -describe('CheckboxFieldComponent', () => { - let component: CheckboxFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [CheckboxFieldComponent] - }); - fixture = TestBed.createComponent(CheckboxFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts deleted file mode 100644 index 5cc419a462..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/date-field/date-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DateFieldComponent } from './date-field.component'; - -describe('DateFieldComponent', () => { - let component: DateFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [DateFieldComponent] - }); - fixture = TestBed.createComponent(DateFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts deleted file mode 100644 index fd7a0d1c9f..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field/form-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { FormFieldComponent } from './form-field.component'; - -describe('FormFieldComponent', () => { - let component: FormFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [FormFieldComponent] - }); - fixture = TestBed.createComponent(FormFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts deleted file mode 100644 index e357f8f255..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { GuacInputColorComponent } from './guac-input-color.component'; - -describe('GuacInputColorComponent', () => { - let component: GuacInputColorComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [GuacInputColorComponent] - }); - fixture = TestBed.createComponent(GuacInputColorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts deleted file mode 100644 index 56bdd81dcb..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/language-field/language-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LanguageFieldComponent } from './language-field.component'; - -describe('LanguageFieldComponent', () => { - let component: LanguageFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [LanguageFieldComponent] - }); - fixture = TestBed.createComponent(LanguageFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts deleted file mode 100644 index 153235b9f9..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/number-field/number-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { NumberFieldComponent } from './number-field.component'; - -describe('NumberFieldComponent', () => { - let component: NumberFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [NumberFieldComponent] - }); - fixture = TestBed.createComponent(NumberFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts deleted file mode 100644 index 1f07108c08..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { PasswordFieldComponent } from './password-field.component'; - -describe('PasswordFieldComponent', () => { - let component: PasswordFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [PasswordFieldComponent] - }); - fixture = TestBed.createComponent(PasswordFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts deleted file mode 100644 index d196352b6a..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/redirect-field/redirect-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { RedirectFieldComponent } from './redirect-field.component'; - -describe('RedirectFieldComponent', () => { - let component: RedirectFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [RedirectFieldComponent] - }); - fixture = TestBed.createComponent(RedirectFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts deleted file mode 100644 index 2c4158b398..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TerminalColorSchemeFieldComponent } from './terminal-color-scheme-field.component'; - -describe('TerminalColorSchemeFieldComponent', () => { - let component: TerminalColorSchemeFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [TerminalColorSchemeFieldComponent] - }); - fixture = TestBed.createComponent(TerminalColorSchemeFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts deleted file mode 100644 index 89011ef38e..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/text-field/text-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TextFieldComponent } from './text-field.component'; - -describe('TextFieldComponent', () => { - let component: TextFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [TextFieldComponent] - }); - fixture = TestBed.createComponent(TextFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts deleted file mode 100644 index 008ab27a11..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-field/time-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TimeFieldComponent } from './time-field.component'; - -describe('TimeFieldComponent', () => { - let component: TimeFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [TimeFieldComponent] - }); - fixture = TestBed.createComponent(TimeFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts deleted file mode 100644 index 3ca2a53283..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TimeZoneFieldComponent } from './time-zone-field.component'; - -describe('TimeZoneFieldComponent', () => { - let component: TimeZoneFieldComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [TimeZoneFieldComponent] - }); - fixture = TestBed.createComponent(TimeZoneFieldComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts deleted file mode 100644 index 5612aeba1d..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { ColorPickerService } from './color-picker.service'; - -describe('ColorPickerService', () => { - let service: ColorPickerService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(ColorPickerService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts index 7367ba0007..b194eff158 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/services/data-source-builder.service.spec.ts @@ -18,8 +18,9 @@ */ import { TestBed } from '@angular/core/testing'; +import { TestScheduler } from 'rxjs/internal/testing/TestScheduler'; +import { getTestScheduler } from '../../util/test-helper'; import { DataSourceBuilderService } from './data-source-builder.service'; -import { testScheduler } from '../../util/test-helper'; import { from, map, of } from 'rxjs'; import { SortOrder } from '../types/SortOrder'; import { PagerEvent } from '../components/guac-pager/guac-pager.component'; @@ -32,6 +33,7 @@ interface Person { describe('DataSourceBuilderService', () => { let service: DataSourceBuilderService; + let testScheduler: TestScheduler; const source: Person[] = [ {id: 1, name: 'John'}, {id: 2, name: 'Jane'}, @@ -46,6 +48,7 @@ describe('DataSourceBuilderService', () => { ]; beforeEach(() => { + testScheduler = getTestScheduler(); TestBed.configureTestingModule({}); service = TestBed.inject(DataSourceBuilderService); }); @@ -89,12 +92,12 @@ describe('DataSourceBuilderService', () => { const dataSource: DataSource = service.getBuilder() .source(source) - .filter(of('ji')) + .filter(of('ji'), ['name']) .build(); const length = dataSource.totalLength; - // TODO: implement correct filtering expectObservable(length).toBe('(a|)', {a: 2}); + expectObservable(length).toBe('(a|)', {a: 2}); }); }); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts index f1e4f5b000..1888c4d9d6 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts @@ -18,11 +18,12 @@ */ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { GuacPageListComponent } from './guac-page-list.component'; import { By } from "@angular/platform-browser"; import { SimpleChange } from "@angular/core"; import { LocaleModule } from "../../../locale/locale.module"; +import { HttpClientTestingModule } from "@angular/common/http/testing"; +import { RouterTestingModule } from "@angular/router/testing"; describe('PageListComponent', () => { let component: GuacPageListComponent; @@ -31,7 +32,11 @@ describe('PageListComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ declarations: [GuacPageListComponent], - imports: [LocaleModule] + imports: [ + HttpClientTestingModule, + RouterTestingModule, + LocaleModule + ] }); fixture = TestBed.createComponent(GuacPageListComponent); component = fixture.componentInstance; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts index 1de1b5a2f0..09a45225d9 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.spec.ts @@ -17,7 +17,9 @@ * under the License. */ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { TranslocoTestingModule } from '@ngneat/transloco'; import { GuacSectionTabsComponent } from './guac-section-tabs.component'; import { By } from '@angular/platform-browser'; @@ -30,7 +32,19 @@ describe('SectionTabsComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ declarations: [GuacSectionTabsComponent], - imports: [LocaleModule] + imports: [ + LocaleModule, + TranslocoTestingModule.forRoot({ + langs: { + en: { + 'TAB_1': 'TAB_1', + 'TAB_2': 'TAB_2', + 'TAB_3': 'TAB_3' + } + } + }), + HttpClientTestingModule, + ] }); fixture = TestBed.createComponent(GuacSectionTabsComponent); component = fixture.componentInstance; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts deleted file mode 100644 index 869ee12b12..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { PlayerDisplayComponent } from './player-display.component'; -import { ElementModule } from "../../element/element.module"; - -describe('PlayerDisplayComponent', () => { - let component: PlayerDisplayComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [PlayerDisplayComponent], - imports: [ElementModule], - }); - fixture = TestBed.createComponent(PlayerDisplayComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts deleted file mode 100644 index c4d905a207..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { PlayerComponent } from './player.component'; -import { PlayerModule } from "./player.module"; - -describe('PlayerComponent', () => { - let component: PlayerComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [PlayerComponent], - imports: [PlayerModule], - }); - fixture = TestBed.createComponent(PlayerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts index 1c313421b6..05a4617cea 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts @@ -19,13 +19,11 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { ElementModule } from 'guacamole-frontend-lib'; import { PlayerComponent } from './player.component'; import { PlayerDisplayComponent } from './player-display/player-display.component'; import { ProgressIndicatorComponent } from './progress-indicator/progress-indicator.component'; import { FormsModule } from "@angular/forms"; -import { ElementModule } from "../element/element.module"; - - @NgModule({ declarations: [ diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts index 71b0673982..2ef7f3dc06 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.spec.ts @@ -18,18 +18,20 @@ */ import { catchError, throwError } from 'rxjs'; +import { TestScheduler } from 'rxjs/testing'; +import { getTestScheduler } from '../../util/test-helper'; import { RequestService } from './request.service'; import { TestBed } from '@angular/core/testing'; - import { Error } from '../types/Error'; -import { testScheduler } from '../../util/test-helper'; import { HttpClientTestingModule } from '@angular/common/http/testing'; import Type = Error.Type; describe('RequestService', () => { let service: RequestService; + let testScheduler: TestScheduler; beforeEach(() => { + testScheduler = getTestScheduler(); TestBed.configureTestingModule({ imports: [HttpClientTestingModule], }); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts index ccfaf51c66..499541a7c5 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts @@ -23,6 +23,7 @@ import { GuacFrontendEventArguments } from '../../events/types/GuacFrontendEventArguments'; import { KeyComponent } from './key.component'; +import { TranslocoTestingModule } from "@ngneat/transloco"; describe('KeyComponent', () => { let component: KeyComponent; @@ -32,6 +33,9 @@ describe('KeyComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ declarations: [KeyComponent], + imports: [ + TranslocoTestingModule.forRoot({}) + ], }); fixture = TestBed.createComponent(KeyComponent); component = fixture.componentInstance; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts deleted file mode 100644 index 515d916289..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TextInputComponent } from './text-input.component'; - -describe('TextInputComponent', () => { - let component: TextInputComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [TextInputComponent] - }); - fixture = TestBed.createComponent(TextInputComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts index 3d05b1e98e..78eb457836 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/util/test-helper.ts @@ -17,12 +17,12 @@ * under the License. */ -import { TestScheduler } from 'rxjs/internal/testing/TestScheduler'; +import { TestScheduler } from 'rxjs/testing'; /** * Provides a TestScheduler that can be used for testing RxJS observables ("marble tests"). */ -export const testScheduler = new TestScheduler((actual, expected) => { +export const getTestScheduler = () => new TestScheduler((actual, expected) => { // asserting the two objects are equal - required // for TestScheduler assertions to work via your test framework // e.g. using chai. From 8b1ff1a19811a15ebfc9737a30fd98a3977d127f Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:05:06 +0200 Subject: [PATCH 10/80] GUACAMOLE-1085: Add Cypress e2e tests for the frontend --- .../src/main/guacamole-frontend/README.md | 6 +- .../main/guacamole-frontend/cypress.config.ts | 29 + .../cypress/e2e/login/login.cy.ts | 43 + .../cypress/support/auth.ts | 48 + .../guacamole-frontend/cypress/support/e2e.ts | 27 + .../guacamole-frontend/cypress/tsconfig.json | 16 + .../main/guacamole-frontend/package-lock.json | 40151 ++++++++-------- .../src/main/guacamole-frontend/package.json | 93 +- .../src/main/guacamole-frontend/tsconfig.json | 6 + 9 files changed, 21333 insertions(+), 19086 deletions(-) create mode 100644 guacamole/src/main/guacamole-frontend/cypress.config.ts create mode 100644 guacamole/src/main/guacamole-frontend/cypress/e2e/login/login.cy.ts create mode 100644 guacamole/src/main/guacamole-frontend/cypress/support/auth.ts create mode 100644 guacamole/src/main/guacamole-frontend/cypress/support/e2e.ts create mode 100644 guacamole/src/main/guacamole-frontend/cypress/tsconfig.json diff --git a/guacamole/src/main/guacamole-frontend/README.md b/guacamole/src/main/guacamole-frontend/README.md index 9180abc222..d292529243 100644 --- a/guacamole/src/main/guacamole-frontend/README.md +++ b/guacamole/src/main/guacamole-frontend/README.md @@ -40,7 +40,7 @@ package that implements end-to-end testing capabilities. instead of a `@:` prefix. - The 'import' module is not included in this first version. -- Additionally, the following files are not migrated as well: +- Additionally, the following files are also not migrated yet: - index/services/iconService.js - If the user navigates to a route without being authenticated, the user is redirected to the home page after authentication. @@ -48,6 +48,8 @@ package that implements end-to-end testing capabilities. The angular build creates a `3rdpartylicenses.txt` file, but I don't know if this is enough and where to put it. - Type declarations for guacamole-common-js (`guacamole-frontend-lib/src/lib/types/Guacamole.ts`) will be replaced by the package @types/guacamole-common-js once it is updated. +- I included some Cypress E2E Tests in the `cypress` folder. They are not integrated in the build process and I did not + include a proper configuration file because of the various possible testing setups. ## Possible discussion points regarding the implementation @@ -58,7 +60,7 @@ package that implements end-to-end testing capabilities. - `UserCredentials.getLink` - `UserCredentialService~getLink` -- To replace the `$parse` of AngularJS I used the npm package angular-expressions. +- To replace the `$parse` function of AngularJS I used the npm package angular-expressions. It is basically a copy of the AngularJS code as standalone module. If there is any problem with this package as a dependency, we have to invest more time to implement the parsing of the expressions ourselves or refactor the code to not use expressions at all. diff --git a/guacamole/src/main/guacamole-frontend/cypress.config.ts b/guacamole/src/main/guacamole-frontend/cypress.config.ts new file mode 100644 index 0000000000..7279cb7486 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/cypress.config.ts @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { defineConfig } from 'cypress'; + +/** + * Configuration for Cypress tests. + */ +export default defineConfig({ + e2e: { + baseUrl: "" + }, +}); diff --git a/guacamole/src/main/guacamole-frontend/cypress/e2e/login/login.cy.ts b/guacamole/src/main/guacamole-frontend/cypress/e2e/login/login.cy.ts new file mode 100644 index 0000000000..aec0ab20c6 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/cypress/e2e/login/login.cy.ts @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { login, passwordElement, usernameElement } from "../../support/auth"; + +describe('Login Page', () => { + + beforeEach(() => { + cy.visit(''); + }); + + it('should display an error with invalid credentials', () => { + login('invalid', 'invalid'); + + cy.get('.login-error').should('exist'); + + // Clear the password field but not the username field + usernameElement().should('have.value', 'invalid'); + passwordElement().should('have.value', ''); + }); + + it('should login with valid credentials', () => { + login('guacadmin', 'guacadmin'); + cy.get('guac-user-menu').should('contain.text', 'guacadmin'); + }); + +}); diff --git a/guacamole/src/main/guacamole-frontend/cypress/support/auth.ts b/guacamole/src/main/guacamole-frontend/cypress/support/auth.ts new file mode 100644 index 0000000000..afd8f8d044 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/cypress/support/auth.ts @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Selector for the password input element on the login page. + */ +export const passwordElement = () => cy.get('input[name="password"]'); + +/** + * Selector for the username input element on the login page. + */ +export const usernameElement = () => cy.get('input[name="username"]'); + +/** + * Selector for the submit button on the login page. + */ +export const submitButton = () => cy.get('input[type="submit"]'); + +/** + * Logs in with the given username and password. + * + * @param username + * The username to login with. + * + * @param password + * The password to login with. + */ +export const login = (username: string, password: string) => { + usernameElement().type(username); + passwordElement().type(password); + submitButton().eq(0).click(); +}; diff --git a/guacamole/src/main/guacamole-frontend/cypress/support/e2e.ts b/guacamole/src/main/guacamole-frontend/cypress/support/e2e.ts new file mode 100644 index 0000000000..bb3bae1f88 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/cypress/support/e2e.ts @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Cypress should not fail the test if an exception is thrown. + */ +Cypress.on('uncaught:exception', (err, runnable) => { + // returning false here prevents Cypress from + // failing the test + return false +}) diff --git a/guacamole/src/main/guacamole-frontend/cypress/tsconfig.json b/guacamole/src/main/guacamole-frontend/cypress/tsconfig.json new file mode 100644 index 0000000000..3a438a5ef1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/cypress/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "es5", + "dom" + ], + "types": [ + "cypress", + "node" + ] + }, + "include": [ + "**/*.ts" + ] +} diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index c5d81b93f8..7513533ab6 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -1,19172 +1,21247 @@ { - "name": "frontend", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "frontend", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^16.1.1", - "@angular/common": "^16.1.1", - "@angular/compiler": "^16.1.1", - "@angular/core": "^16.1.1", - "@angular/forms": "^16.1.1", - "@angular/platform-browser": "^16.1.1", - "@angular/platform-browser-dynamic": "^16.1.1", - "@angular/router": "^16.1.1", - "@ngneat/transloco": "^4.2.2", - "@ngneat/transloco-messageformat": "^4.1.0", - "@simonwep/pickr": "^1.8.2", - "angular-expressions": "^1.1.9", - "file-saver": "^2.0.5", - "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.1", - "@types/file-saver": "^2.0.5", - "@types/jasmine": "~4.3.0", - "@types/lodash": "^4.14.194", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-coverage": "~2.2.0", - "karma-firefox-launcher": "~2.1.2", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "ng-packagr": "^16.1.0", - "typescript": "~5.1.3" - } - }, - "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { - "version": "0.0.1", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^16.1.0", - "@angular/core": "^16.1.0" - } - }, - "../ngx-guacamole/dist/ngx-guacamole": { - "version": "0.0.1", - "extraneous": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^15.2.0", - "@angular/core": "^15.2.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.17.19" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "@angular/localize": "^16.1.0", - "@angular/platform-server": "^16.1.0", - "@angular/service-worker": "^16.1.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^16.1.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^16.1.1", + "@angular/common": "^16.1.1", + "@angular/compiler": "^16.1.1", + "@angular/core": "^16.1.1", + "@angular/forms": "^16.1.1", + "@angular/platform-browser": "^16.1.1", + "@angular/platform-browser-dynamic": "^16.1.1", + "@angular/router": "^16.1.1", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.1", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "cypress": "^12.15.0", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-coverage": "~2.2.0", + "karma-firefox-launcher": "~2.1.2", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } }, - "karma": { - "optional": true + "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { + "version": "0.0.0-watch+1687434580562", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + } }, - "ng-packagr": { - "optional": true + "../ngx-guacamole/dist/ngx-guacamole": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^15.2.0", + "@angular/core": "^15.2.0" + } }, - "protractor": { - "optional": true + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/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 - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - } - }, - "node_modules/@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/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 - }, - "node_modules/@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "dependencies": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler": "16.1.1", - "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.1.1", - "@angular/common": "16.1.1", - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/compiler": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1" - } - }, - "node_modules/@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "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": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@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-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/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/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@messageformat/core": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "node_modules/@messageformat/date-skeleton": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/@messageformat/number-skeleton": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@messageformat/parser": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "moo": "^0.5.1" - } - }, - "node_modules/@messageformat/runtime": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "make-plural": "^7.0.0" - } - }, - "node_modules/@ngneat/transloco": { - "version": "4.2.2", - "license": "MIT", - "dependencies": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-messageformat": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "@ngneat/transloco": ">=4.2.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-utils": { - "version": "3.0.5", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "typescript": ">=4.9.3 <5.2", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@simonwep/pickr": { - "version": "1.8.2", - "license": "MIT", - "dependencies": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/file-saver": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.194", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.16.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abab": { - "version": "2.0.6", - "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 - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/angular-expressions": { - "version": "1.1.9", - "license": "Unlicense" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "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/base64id": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "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", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "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.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.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, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.8.0", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "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, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "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, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js": { - "version": "3.30.2", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.1.3", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "node_modules/custom-event": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/date-format": { - "version": "4.0.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" + "node_modules/@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "@angular/localize": "^16.1.0", + "@angular/platform-server": "^16.1.0", + "@angular/service-worker": "^16.1.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.1.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/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 + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/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 + }, + "node_modules/@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.1", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1" + } + }, + "node_modules/@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.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.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/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/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@messageformat/core": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "node_modules/@messageformat/date-skeleton": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@messageformat/number-skeleton": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/@messageformat/parser": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "moo": "^0.5.1" + } + }, + "node_modules/@messageformat/runtime": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "make-plural": "^7.0.0" + } + }, + "node_modules/@ngneat/transloco": { + "version": "4.2.2", + "license": "MIT", + "dependencies": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-messageformat": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "@ngneat/transloco": ">=4.2.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.194", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abab": { + "version": "2.0.6", + "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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/angular-expressions": { + "version": "1.1.9", + "license": "Unlicense" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "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/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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 + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "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, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "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/base64id": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "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 + }, + "node_modules/body-parser": { + "version": "1.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "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.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.8.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "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, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js": { + "version": "3.30.2", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress": { + "version": "12.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", + "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^14.0.0 || ^16.0.0 || >=18.0.0" + } + }, + "node_modules/cypress/node_modules/@types/node": { + "version": "14.18.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", + "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "dev": true + }, + "node_modules/cypress/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/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/cypress/node_modules/chalk/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/cypress/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/cypress/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/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/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/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/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, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cypress/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/cypress/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/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-format": { + "version": "4.0.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "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, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "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, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/guacamole-frontend-lib": { + "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "link": true + }, + "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 + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/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/inquirer/node_modules/chalk": { + "version": "4.1.2", + "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/inquirer/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/inquirer/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "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-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jstz": { + "version": "2.1.1", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/karma": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "dependencies": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + } + }, + "node_modules/karma-firefox-launcher/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/karma-jasmine": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/less": { + "version": "4.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "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/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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/license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "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/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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/log-update/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/log-update/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/log-update/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, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-plural": { + "version": "7.3.0", + "license": "Unicode-DFS-2016" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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 + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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 + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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 + }, + "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, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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 + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "license": "BSD-3-Clause" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanopop": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/needle": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "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/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "dependencies": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.17.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "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 + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "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/ora/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "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/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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 + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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 + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "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, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "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, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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 + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/replace-in-file": { + "version": "6.3.5", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/replace-in-file/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "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/replace-in-file/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/replace-in-file/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/replace-in-file/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/replace-in-file/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.21.5", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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/safe-identifier": { + "version": "0.4.2", + "license": "ISC" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "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": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/tar/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 + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "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 + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "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, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vite": { + "version": "4.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "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/wrap-ansi-cjs": { + "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "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", + "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", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/zone.js": { + "version": "0.13.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + } } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "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, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "requires": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild": "0.17.19", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "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" + } + }, + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + } + }, + "@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "requires": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + } + }, + "@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.5", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "dev": true + }, + "@babel/core": { + "version": "7.21.8", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "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 + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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" + } + }, + "@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" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true + }, + "@cypress/request": { + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.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" + } + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@messageformat/core": { + "version": "3.1.0", + "requires": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "@messageformat/date-skeleton": { + "version": "1.0.1" + }, + "@messageformat/number-skeleton": { + "version": "1.2.0" + }, + "@messageformat/parser": { + "version": "5.0.0", + "requires": { + "moo": "^0.5.1" + } + }, + "@messageformat/runtime": { + "version": "3.0.1", + "requires": { + "make-plural": "^7.0.0" + } + }, + "@ngneat/transloco": { + "version": "4.2.2", + "requires": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-messageformat": { + "version": "4.1.0", + "requires": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-utils": { + "version": "3.0.5", + "requires": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true + }, + "@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "@simonwep/pickr": { + "version": "1.8.2", + "requires": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "dev": true + }, + "@types/cors": { + "version": "2.8.13", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.37.0", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/file-saver": { + "version": "2.0.5", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "4.3.1", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/lodash": { + "version": "4.14.194", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "18.16.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true + }, + "abab": { + "version": "2.0.6", + "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.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.2", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "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", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "angular-expressions": { + "version": "1.1.9" + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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 + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "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": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "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 + }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "babel-loader": { + "version": "9.1.2", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "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 + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "base64id": { + "version": "2.0.0", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bl": { + "version": "4.1.0", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.20.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer": { + "version": "5.7.1", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "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.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.3", + "dev": true + }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "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", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.8.0" + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cli-width": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4" + }, + "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", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "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": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "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" + } + }, + "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", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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" + }, + "connect": { + "version": "3.7.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "core-js": { + "version": "3.30.2" + }, + "core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "8.1.3", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1" + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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 + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "dev": true + }, + "cypress": { + "version": "12.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", + "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "dev": true, + "requires": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "14.18.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", + "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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 + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "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" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-format": { + "version": "4.0.14", + "dev": true + }, + "dayjs": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", + "dev": true + }, "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/guacamole-frontend-lib": { - "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "link": true - }, - "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 - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/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/inquirer/node_modules/chalk": { - "version": "4.1.2", - "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/inquirer/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/inquirer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "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-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jstz": { - "version": "2.1.1", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/karma": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "dependencies": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - } - }, - "node_modules/karma-firefox-launcher/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/karma-jasmine": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/less": { - "version": "4.1.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "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/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "di": { + "version": "0.0.1", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serialize": { + "version": "2.2.1", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0" + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "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": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "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" + } }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "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", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "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/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-plural": { - "version": "7.3.0", - "license": "Unicode-DFS-2016" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "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 - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect/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 - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/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 - }, - "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, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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 - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moo": { - "version": "0.5.2", - "license": "BSD-3-Clause" - }, - "node_modules/mrmime": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanopop": { - "version": "2.3.0", - "license": "MIT" - }, - "node_modules/needle": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "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/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "dependencies": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "bin": { - "ng-packagr": "cli/main.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "optionalDependencies": { - "esbuild": "^0.17.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "tslib": "^2.3.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/ng-packagr/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "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==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "dev": true, - "license": "MIT", - "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 - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "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/ora/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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 - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.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 - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "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, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "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 - }, - "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 - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/replace-in-file": { - "version": "6.3.5", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/replace-in-file/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/replace-in-file/node_modules/chalk": { - "version": "4.1.2", - "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/replace-in-file/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/replace-in-file/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/replace-in-file/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/replace-in-file/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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/restore-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.21.5", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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/safe-identifier": { - "version": "0.4.2", - "license": "ISC" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true + "engine.io": { + "version": "6.4.2", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + } + }, + "engine.io-parser": { + "version": "5.0.6", + "dev": true + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "ent": { + "version": "2.2.0", + "dev": true + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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": "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 + }, + "errno": { + "version": "0.1.8", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "1.2.1", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true }, - "sass": { - "optional": true + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "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, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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/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/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "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/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/tar/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 - }, - "node_modules/terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } }, - "esbuild": { - "optional": true + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "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 - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "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==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "4.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-saver": { + "version": "2.0.5" + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2" + }, + "flatted": { + "version": "3.2.7", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "dev": true + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "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", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.2.0", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "13.1.4", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "dev": true + }, + "guacamole-frontend-lib": { + "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "requires": { + "tslib": "^2.3.0" + } + }, + "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 + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0" + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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" + } + } + } + }, + "html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.2.4", + "dev": true + }, + "ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "image-size": { + "version": "0.5.5", + "dev": true, + "optional": true + }, + "immutable": { + "version": "4.3.0", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0" + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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 + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true + }, + "injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } + }, + "inquirer": { + "version": "8.2.4", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "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" + } + } + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true }, - "less": { - "optional": true + "is-arrayish": { + "version": "0.2.1" }, - "sass": { - "optional": true + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } }, - "stylus": { - "optional": true + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } }, - "sugarss": { - "optional": true + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true + "is-core-module": { + "version": "2.12.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "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/wrap-ansi-cjs": { - "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "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", - "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", - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.11.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/zone.js": { - "version": "0.13.0", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "requires": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild": "0.17.19", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "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 - } - } + "is-docker": { + "version": "2.2.1", + "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" - } + "is-extglob": { + "version": "2.1.1", + "dev": true }, - "semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "is-fullwidth-code-point": { + "version": "3.0.0" }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, - "@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - } - }, - "@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "dependencies": { - "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" - } + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } }, - "semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "requires": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.22.5", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "dev": true - }, - "@babel/core": { - "version": "7.21.8", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "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 - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@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" - } - }, - "@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" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "dev": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true - }, - "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "dev": true, - "optional": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "is-interactive": { + "version": "1.0.0" + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "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-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0" + }, + "is-what": { + "version": "3.14.1", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "jasmine-core": { + "version": "4.5.0", + "dev": true }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } + "jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jstz": { + "version": "2.1.1" + }, + "karma": { + "version": "6.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "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.9", + "dev": true + } + } + }, + "karma-coverage": { + "version": "2.2.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + } + }, + "karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "requires": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "karma-jasmine": { + "version": "5.1.0", + "dev": true, + "requires": { + "jasmine-core": "^4.1.0" + } + }, + "karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "requires": {} + }, + "karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "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.6", + "dev": true + }, + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true + }, + "less": { + "version": "4.1.3", + "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", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mime": { + "version": "1.6.0", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "11.1.0", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.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" + } + }, + "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 + }, + "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", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "log4js": { + "version": "6.9.1", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + } }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true - } - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@messageformat/core": { - "version": "3.1.0", - "requires": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "@messageformat/date-skeleton": { - "version": "1.0.1" - }, - "@messageformat/number-skeleton": { - "version": "1.2.0" - }, - "@messageformat/parser": { - "version": "5.0.0", - "requires": { - "moo": "^0.5.1" - } - }, - "@messageformat/runtime": { - "version": "3.0.1", - "requires": { - "make-plural": "^7.0.0" - } - }, - "@ngneat/transloco": { - "version": "4.2.2", - "requires": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-messageformat": { - "version": "4.1.0", - "requires": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-utils": { - "version": "3.0.5", - "requires": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "requires": {} - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "dependencies": { "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "requires": { - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1" - } - }, - "@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "jsonc-parser": "3.2.0" - } - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true - }, - "@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - } - }, - "@simonwep/pickr": { - "version": "1.8.2", - "requires": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true - }, - "@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.0", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "make-plural": { + "version": "7.3.0" + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, + "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 }, "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/cookie": { - "version": "0.4.1", - "dev": true - }, - "@types/cors": { - "version": "2.8.13", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.37.0", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "dev": true - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/file-saver": { - "version": "2.0.5", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "4.3.1", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/lodash": { - "version": "4.14.194", - "dev": true - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "18.16.0", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "requires": {} - }, - "@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true - }, - "abab": { - "version": "2.0.6", - "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.8", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.2", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "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", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.12.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "angular-expressions": { - "version": "1.1.9" - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "babel-loader": { - "version": "9.1.2", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "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 - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - } - }, - "balanced-match": { - "version": "1.0.2" - }, - "base64-js": { - "version": "1.5.1" - }, - "base64id": { - "version": "2.0.0", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "bl": { - "version": "4.1.0", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.20.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moo": { + "version": "0.5.2" + }, + "mrmime": { + "version": "1.0.1", + "dev": true }, "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "buffer": { - "version": "5.7.1", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "dev": true - }, - "cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "version": "2.1.2", + "dev": true }, - "glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true + "mute-stream": { + "version": "0.0.8", + "dev": true }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0" - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "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.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.3", - "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", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.8.0" - }, - "cli-width": { - "version": "3.0.0", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4" - }, - "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", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "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" - } - }, - "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", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true + "nanoid": { + "version": "3.3.6", + "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" - } + "nanopop": { + "version": "2.3.0" }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "needle": { + "version": "3.2.0", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.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 - } - } - }, - "concat-map": { - "version": "0.0.1" - }, - "connect": { - "version": "3.7.0", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "negotiator": { + "version": "0.6.3", + "dev": true }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "copy-anything": { - "version": "2.0.6", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - } - } - }, - "core-js": { - "version": "3.30.2" - }, - "core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "8.1.3", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1" + "neo-async": { + "version": "2.6.2", + "dev": true }, - "js-yaml": { - "version": "4.1.0", - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.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" - } + "ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "requires": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild": "^0.17.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + } + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } }, - "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" - } + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true }, - "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-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "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 + "node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "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" + } + } + } }, - "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" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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 - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "dev": true - }, - "date-format": { - "version": "4.0.14", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.4", - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "di": { - "version": "0.0.1", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-serialize": { - "version": "2.2.1", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0" - }, - "emojis-list": { - "version": "3.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "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": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "engine.io": { - "version": "6.4.2", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - } - }, - "engine.io-parser": { - "version": "5.0.6", - "dev": true - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "ent": { - "version": "2.2.0", - "dev": true - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "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": "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 - }, - "errno": { - "version": "0.1.8", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "1.2.1", - "dev": true - }, - "esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1" - }, - "escape-html": { - "version": "1.0.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "dev": true - }, - "events": { - "version": "3.3.0", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "dev": true + }, + "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.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "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", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.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" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "requires": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "requires": { + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.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 + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "4.0.1", + "dev": true, + "optional": true + }, + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "requires": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "requires": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "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" + } }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "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 + } + } }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "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" - } + "prr": { + "version": "1.0.1", + "dev": true, + "optional": true }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "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" + } + }, + "punycode": { + "version": "2.3.0", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "dev": true + }, + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } + "version": "2.5.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-saver": { - "version": "2.0.5" - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } }, - "ms": { - "version": "2.0.0", - "dev": true + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2" - }, - "flatted": { - "version": "3.2.7", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "dev": true - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0" - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5" - }, - "get-intrinsic": { - "version": "1.2.0", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "dev": true - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "13.1.4", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "dev": true - }, - "guacamole-frontend-lib": { - "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "requires": { - "tslib": "^2.3.0" - } - }, - "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 - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0" - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "version": "3.6.2", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "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 + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } }, - "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" - } - } - } - }, - "html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1" - }, - "ignore": { - "version": "5.2.4", - "dev": true - }, - "ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "requires": { - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "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": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "dev": true + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "replace-in-file": { + "version": "6.3.5", + "requires": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "image-size": { - "version": "0.5.5", - "dev": true, - "optional": true - }, - "immutable": { - "version": "4.3.0", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { "resolve-from": { - "version": "4.0.0" - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "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 - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true - }, - "injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "inquirer": { - "version": "8.2.4", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "version": "5.0.0", + "dev": true }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + } + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "restore-cursor": { + "version": "3.1.0", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "dev": true + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.21.5", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-async": { + "version": "2.4.1", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-identifier": { + "version": "0.4.2" + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "requires": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "dev": true, + "optional": true + }, + "schema-utils": { + "version": "4.0.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-core-module": { - "version": "2.12.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0" - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0" - }, - "is-what": { - "version": "3.14.1", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.10", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jasmine-core": { - "version": "4.5.0", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "json5": { - "version": "2.2.3", - "dev": true - }, - "jsonc-parser": { - "version": "3.2.0", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "jstz": { - "version": "2.1.1" - }, - "karma": { - "version": "6.4.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "serialize-javascript": { + "version": "6.0.1", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "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" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "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": "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 + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "slash": { + "version": "4.0.0", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.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" + } + }, + "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 + } + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socket.io": { + "version": "4.6.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "requires": { + "ws": "~8.11.0" + } + }, + "socket.io-parser": { + "version": "4.2.3", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } }, "source-map": { - "version": "0.6.1", - "dev": true + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true }, - "tmp": { - "version": "0.2.1", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "source-map-js": { + "version": "1.0.2", + "dev": true }, - "yargs": { - "version": "16.2.0", - "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" - } + "source-map-loader": { + "version": "4.0.1", + "dev": true, + "requires": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } }, - "yargs-parser": { - "version": "20.2.9", - "dev": true - } - } - }, - "karma-coverage": { - "version": "2.2.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - } - }, - "karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "requires": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - }, - "dependencies": { - "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" - } - } - } - }, - "karma-jasmine": { - "version": "5.1.0", - "dev": true, - "requires": { - "jasmine-core": "^4.1.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "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.6", - "dev": true - }, - "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "less": { - "version": "4.1.3", - "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", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, - "semver": { - "version": "5.7.1", - "dev": true, - "optional": true + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, - "source-map": { - "version": "0.6.1", - "dev": true, - "optional": true - } - } - }, - "less-loader": { - "version": "11.1.0", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "loader-runner": { - "version": "4.3.0", - "dev": true - }, - "loader-utils": { - "version": "3.2.1", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1" - }, - "log-symbols": { - "version": "4.1.0", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "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", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } }, - "color-name": { - "version": "1.1.4" + "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", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } }, - "has-flag": { - "version": "4.0.0" + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + }, + "streamroller": { + "version": "3.1.5", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true }, "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log4js": { - "version": "6.9.1", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - } - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.30.0", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - } - } - }, - "make-plural": { - "version": "7.3.0" - }, - "media-typer": { - "version": "0.3.0", - "dev": true - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0" - }, - "mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - } - }, - "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 - }, - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "dev": true - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "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 - } - } - }, - "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", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "symbol-observable": { + "version": "4.0.0", + "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 - } - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "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 - } - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "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 + } + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "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", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "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 - } - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moo": { - "version": "0.5.2" - }, - "mrmime": { - "version": "1.0.1", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "mute-stream": { - "version": "0.0.8", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "dev": true - }, - "nanopop": { - "version": "2.3.0" - }, - "needle": { - "version": "3.2.0", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } + "terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } }, - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "negotiator": { - "version": "0.6.3", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "dev": true - }, - "ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "requires": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild": "^0.17.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } - } - }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "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" - } - } - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true - }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "requires": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "dev": true - }, - "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.4.1", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "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", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.4.1", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "text-table": { + "version": "0.2.0", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true }, - "color-name": { - "version": "1.1.4" + "through": { + "version": "2.3.8", + "dev": true }, - "has-flag": { - "version": "4.0.0" + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.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" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - } - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "requires": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "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" - } - }, - "parse-node-version": { - "version": "1.0.1", - "dev": true - }, - "parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "requires": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "requires": { - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parseurl": { - "version": "1.3.3", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.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 - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0" - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "pify": { - "version": "4.0.1", - "dev": true, - "optional": true - }, - "piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "requires": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "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", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "requires": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "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" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "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 - } - } - }, - "prr": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "punycode": { - "version": "2.3.0", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "dev": true - }, - "qs": { - "version": "6.11.0", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true - }, - "raw-body": { - "version": "2.5.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "requires": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "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", + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "dev": true + }, + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } }, - "glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.2", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "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": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "dev": true - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "replace-in-file": { - "version": "6.3.5", - "requires": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "type-fest": { + "version": "0.21.3", + "dev": true }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "typed-assert": { + "version": "1.0.9", + "dev": true }, - "color-name": { - "version": "1.1.4" + "typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true }, - "has-flag": { - "version": "4.0.0" + "ua-parser-js": { + "version": "0.7.35", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "require-directory": { - "version": "2.1.1" - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "dev": true - }, - "resolve": { - "version": "1.22.2", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - }, - "resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true }, - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "3.21.5", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "run-async": { - "version": "2.4.1", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.1", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1" - }, - "safe-identifier": { - "version": "0.4.2" - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true - }, - "sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "requires": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "dev": true, - "optional": true - }, - "schema-utils": { - "version": "4.0.1", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.3.8", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "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" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "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 + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "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" - } + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true + "universalify": { + "version": "0.1.2", + "dev": true }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } + "unpipe": { + "version": "1.0.0", + "dev": true }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "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 }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } }, - "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.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "dev": true - }, - "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": "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 - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7" - }, - "sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - } - }, - "slash": { - "version": "4.0.0", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socket.io": { - "version": "4.6.1", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - } - }, - "socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "requires": { - "ws": "~8.11.0" - } - }, - "socket.io-parser": { - "version": "4.2.3", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "dev": true - }, - "source-map-loader": { - "version": "4.0.1", - "dev": true, - "requires": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "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", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "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", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "statuses": { - "version": "1.5.0", - "dev": true - }, - "streamroller": { - "version": "3.1.5", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "symbol-observable": { - "version": "4.0.0", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" } - } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "util-deprecate": { + "version": "1.0.2" }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "utils-merge": { + "version": "1.0.1", + "dev": true }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "through": { - "version": "2.3.8", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "dev": true - }, - "tree-kill": { - "version": "1.2.2", - "dev": true - }, - "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-assert": { - "version": "1.0.9", - "dev": true - }, - "typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.35", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2" - }, - "utils-merge": { - "version": "1.0.1", - "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==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "vary": { - "version": "1.1.2", - "dev": true - }, - "vite": { - "version": "4.3.9", - "dev": true, - "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - } - }, - "void-elements": { - "version": "2.0.1", - "dev": true - }, - "watchpack": { - "version": "2.4.0", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "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" - } - }, - "wcwidth": { - "version": "1.0.1", - "requires": { - "defaults": "^1.0.3" - } - }, - "webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} + "vary": { + "version": "1.1.2", + "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } + }, + "vite": { + "version": "4.3.9", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "void-elements": { + "version": "2.0.1", + "dev": true + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "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" + } + }, + "wcwidth": { + "version": "1.0.1", + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "dependencies": { "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + } + } + }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true + }, + "webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "requires": { + "typed-assert": "^1.0.8" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "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 + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@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" + }, + "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" + } + }, + "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 + } + } + }, + "wrappy": { + "version": "1.0.2" }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "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 - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "version": "8.11.0", + "dev": true, + "requires": {} }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } }, - "color-name": { - "version": "1.1.4" - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@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" - }, - "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" - } + "y18n": { + "version": "5.0.8" }, - "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" - } + "yallist": { + "version": "3.1.1", + "dev": true }, - "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 + "yargs": { + "version": "17.7.2", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "zone.js": { + "version": "0.13.0", + "requires": { + "tslib": "^2.3.0" + } } - } - }, - "wrappy": { - "version": "1.0.2" - }, - "ws": { - "version": "8.11.0", - "dev": true, - "requires": {} - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "^0.2.2" - } - }, - "y18n": { - "version": "5.0.8" - }, - "yallist": { - "version": "3.1.1", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1" - }, - "zone.js": { - "version": "0.13.0", - "requires": { - "tslib": "^2.3.0" - } } - } } diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index 598aaa6f2e..4c91b94558 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -1,48 +1,49 @@ { - "name": "frontend", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "test": "ng test" - }, - "private": true, - "dependencies": { - "@angular/animations": "^16.1.1", - "@angular/common": "^16.1.1", - "@angular/compiler": "^16.1.1", - "@angular/core": "^16.1.1", - "@angular/forms": "^16.1.1", - "@angular/platform-browser": "^16.1.1", - "@angular/platform-browser-dynamic": "^16.1.1", - "@angular/router": "^16.1.1", - "@ngneat/transloco": "^4.2.2", - "@ngneat/transloco-messageformat": "^4.1.0", - "@simonwep/pickr": "^1.8.2", - "angular-expressions": "^1.1.9", - "file-saver": "^2.0.5", - "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.1", - "@types/file-saver": "^2.0.5", - "@types/jasmine": "~4.3.0", - "@types/lodash": "^4.14.194", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-firefox-launcher": "~2.1.2", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "ng-packagr": "^16.1.0", - "typescript": "~5.1.3" - } + "name": "frontend", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^16.1.1", + "@angular/common": "^16.1.1", + "@angular/compiler": "^16.1.1", + "@angular/core": "^16.1.1", + "@angular/forms": "^16.1.1", + "@angular/platform-browser": "^16.1.1", + "@angular/platform-browser-dynamic": "^16.1.1", + "@angular/router": "^16.1.1", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.1", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "cypress": "^12.15.0", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-coverage": "~2.2.0", + "karma-firefox-launcher": "~2.1.2", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } } diff --git a/guacamole/src/main/guacamole-frontend/tsconfig.json b/guacamole/src/main/guacamole-frontend/tsconfig.json index f02d27c63f..f11f914659 100644 --- a/guacamole/src/main/guacamole-frontend/tsconfig.json +++ b/guacamole/src/main/guacamole-frontend/tsconfig.json @@ -1,6 +1,12 @@ /* To learn more about this file see: https://angular.io/config/tsconfig. */ { "compileOnSave": false, + "exclude": [ + " ./cypress.config.ts", + "node_modules", + "cypress", + "**/*.spec.ts" + ], "compilerOptions": { "baseUrl": "./", "outDir": "./dist/out-tsc", From ae22c9fec30c852654f8a04746614b1df0eb92b2 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 15:28:51 +0200 Subject: [PATCH 11/80] GUACAMOLE-1085: fix: reset password field after login failed --- .../app/login/components/login/login.component.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts index 929d97eb1c..4d47455150 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts @@ -18,9 +18,7 @@ */ import { Component, DestroyRef, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; -import { - GuacFrontendEventArguments -} from '../../../events/types/GuacFrontendEventArguments'; +import { GuacFrontendEventArguments } from '../../../events/types/GuacFrontendEventArguments'; import { TranslatableMessage } from '../../../rest/types/TranslatableMessage'; import { Field } from '../../../rest/types/Field'; import { AuthenticationService } from '../../../auth/service/authentication.service'; @@ -239,8 +237,8 @@ export class LoginComponent implements OnInit, OnChanges { // Reset all remaining fields to default values, but // preserve any usernames this.remainingFields.forEach((field) => { - if (field.type !== Field.Type.USERNAME && field.name in this.enteredValues) - this.enteredValues.get(field.name)?.setValue(this.DEFAULT_FIELD_VALUE); + if (field.type !== Field.Type.USERNAME && this.enteredValues.get(field.name) !== null) + this.enteredValues.get(field.name)!.setValue(this.DEFAULT_FIELD_VALUE); }); } @@ -255,12 +253,6 @@ export class LoginComponent implements OnInit, OnChanges { this.submitted = false; }); - // TODO: // Reset state after authentication and routing have succeeded - // this.gaucEventService.on('$routeChangeSuccess', () => { - // this.enteredValues = {}; - // this.submitted = false; - // }); } - } From e04a30c874ab7cc273a8ebb1aa120337257a7d4c Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 17:32:25 +0200 Subject: [PATCH 12/80] GUACAMOLE-1085: Add ESLint to the frontend project --- .../main/guacamole-frontend/.eslintrc.json | 49 + .../src/main/guacamole-frontend/angular.json | 262 +- .../main/guacamole-frontend/package-lock.json | 46291 +++++++++------- .../src/main/guacamole-frontend/package.json | 11 +- .../guacamole-frontend/.eslintrc.json | 37 + 5 files changed, 25478 insertions(+), 21172 deletions(-) create mode 100644 guacamole/src/main/guacamole-frontend/.eslintrc.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/.eslintrc.json diff --git a/guacamole/src/main/guacamole-frontend/.eslintrc.json b/guacamole/src/main/guacamole-frontend/.eslintrc.json new file mode 100644 index 0000000000..25092c9690 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/.eslintrc.json @@ -0,0 +1,49 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "guac", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "guac", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], + "rules": { + "@angular-eslint/template/elements-content": "off" + } + } + ] +} diff --git a/guacamole/src/main/guacamole-frontend/angular.json b/guacamole/src/main/guacamole-frontend/angular.json index 46ceacb79a..b116075dee 100644 --- a/guacamole/src/main/guacamole-frontend/angular.json +++ b/guacamole/src/main/guacamole-frontend/angular.json @@ -1,125 +1,137 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "guacamole-frontend": { - "projectType": "application", - "schematics": {}, - "root": "projects/guacamole-frontend", - "sourceRoot": "projects/guacamole-frontend/src", - "prefix": "guac", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/guacamole-frontend", - "index": "projects/guacamole-frontend/src/index.html", - "main": "projects/guacamole-frontend/src/main.ts", - "polyfills": [ - "zone.js" - ], - "tsConfig": "projects/guacamole-frontend/tsconfig.app.json", - "assets": [ - { - "glob": "**/*", - "input": "projects/guacamole-frontend/src/images", - "output": "images" - }, - { - "glob": "**/*", - "input": "projects/guacamole-frontend/src/fonts", - "output": "fonts" - }, - { - "glob": "**/*.json", - "input": "projects/guacamole-frontend/src/translations", - "output": "translations" - }, - { - "glob": "**/*.json", - "input": "./node_modules/guacamole-frontend-lib/assets/layouts", - "output": "layouts" - } - ], - "styles": [ - "projects/guacamole-frontend/src/styles.css" - ], - "scripts": [ - "./node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" - ], - "preserveSymlinks": true - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1.1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "9kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "browserTarget": "guacamole-frontend:build:production" - }, - "development": { - "browserTarget": "guacamole-frontend:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "guacamole-frontend:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "polyfills": [ - "zone.js", - "zone.js/testing" - ], - "tsConfig": "projects/guacamole-frontend/tsconfig.spec.json", - "assets": [ - "projects/guacamole-frontend/src/favicon.ico", - "projects/guacamole-frontend/src/assets" - ], - "styles": [ - "projects/guacamole-frontend/src/styles.css" - ], - "scripts": [ - "node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" - ], - "karmaConfig": "projects/guacamole-frontend/karma.conf.js" - } - } - } - } - }, - "cli": { - "analytics": false - } -} +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "guacamole-frontend": { + "projectType": "application", + "schematics": {}, + "root": "projects/guacamole-frontend", + "sourceRoot": "projects/guacamole-frontend/src", + "prefix": "guac", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/guacamole-frontend", + "index": "projects/guacamole-frontend/src/index.html", + "main": "projects/guacamole-frontend/src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "projects/guacamole-frontend/tsconfig.app.json", + "assets": [ + { + "glob": "**/*", + "input": "projects/guacamole-frontend/src/images", + "output": "images" + }, + { + "glob": "**/*", + "input": "projects/guacamole-frontend/src/fonts", + "output": "fonts" + }, + { + "glob": "**/*.json", + "input": "projects/guacamole-frontend/src/translations", + "output": "translations" + }, + { + "glob": "**/*.json", + "input": "./node_modules/guacamole-frontend-lib/assets/layouts", + "output": "layouts" + } + ], + "styles": [ + "projects/guacamole-frontend/src/styles.css" + ], + "scripts": [ + "./node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" + ], + "preserveSymlinks": true + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1.1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "9kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "guacamole-frontend:build:production" + }, + "development": { + "browserTarget": "guacamole-frontend:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "guacamole-frontend:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "projects/guacamole-frontend/tsconfig.spec.json", + "assets": [ + "projects/guacamole-frontend/src/favicon.ico", + "projects/guacamole-frontend/src/assets" + ], + "styles": [ + "projects/guacamole-frontend/src/styles.css" + ], + "scripts": [ + "node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" + ], + "karmaConfig": "projects/guacamole-frontend/karma.conf.js" + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "projects/guacamole-frontend/**/*.ts", + "projects/guacamole-frontend/**/*.html" + ] + } + } + } + } + }, + "cli": { + "analytics": false, + "schematicCollections": [ + "@angular-eslint/schematics" + ] + } +} diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index 7513533ab6..2153db0658 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -1,21247 +1,25446 @@ { - "name": "frontend", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "frontend", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^16.1.1", - "@angular/common": "^16.1.1", - "@angular/compiler": "^16.1.1", - "@angular/core": "^16.1.1", - "@angular/forms": "^16.1.1", - "@angular/platform-browser": "^16.1.1", - "@angular/platform-browser-dynamic": "^16.1.1", - "@angular/router": "^16.1.1", - "@ngneat/transloco": "^4.2.2", - "@ngneat/transloco-messageformat": "^4.1.0", - "@simonwep/pickr": "^1.8.2", - "angular-expressions": "^1.1.9", - "file-saver": "^2.0.5", - "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.1", - "@types/file-saver": "^2.0.5", - "@types/jasmine": "~4.3.0", - "@types/lodash": "^4.14.194", - "cypress": "^12.15.0", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-coverage": "~2.2.0", - "karma-firefox-launcher": "~2.1.2", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "ng-packagr": "^16.1.0", - "typescript": "~5.1.3" - } - }, - "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { - "version": "0.0.0-watch+1687434580562", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^16.1.0", - "@angular/core": "^16.1.0" - } - }, - "../ngx-guacamole/dist/ngx-guacamole": { - "version": "0.0.1", - "extraneous": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^15.2.0", - "@angular/core": "^15.2.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.17.19" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "@angular/localize": "^16.1.0", - "@angular/platform-server": "^16.1.0", - "@angular/service-worker": "^16.1.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^16.1.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/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 - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - } - }, - "node_modules/@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/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 - }, - "node_modules/@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "dependencies": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler": "16.1.1", - "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.1.1", - "@angular/common": "16.1.1", - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/compiler": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1" - } - }, - "node_modules/@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "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": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@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-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^16.1.1", + "@angular/common": "^16.1.1", + "@angular/compiler": "^16.1.1", + "@angular/core": "^16.1.1", + "@angular/forms": "^16.1.1", + "@angular/platform-browser": "^16.1.1", + "@angular/platform-browser-dynamic": "^16.1.1", + "@angular/router": "^16.1.1", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular-eslint/builder": "16.0.3", + "@angular-eslint/eslint-plugin": "16.0.3", + "@angular-eslint/eslint-plugin-template": "16.0.3", + "@angular-eslint/schematics": "16.0.3", + "@angular-eslint/template-parser": "16.0.3", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.1", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "@typescript-eslint/eslint-plugin": "5.59.7", + "@typescript-eslint/parser": "5.59.7", + "cypress": "^12.15.0", + "eslint": "^8.40.0", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-coverage": "~2.2.0", + "karma-firefox-launcher": "~2.1.2", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.1.0", + "typescript": "~5.1.3" + } + }, + "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { + "version": "0.0.0-watch+1687434580562", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + } + }, + "../ngx-guacamole/dist/ngx-guacamole": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^15.2.0", + "@angular/core": "^15.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "@angular/localize": "^16.1.0", + "@angular/platform-server": "^16.1.0", + "@angular/service-worker": "^16.1.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.1.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "karma": { + "optional": true }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "ng-packagr": { + "optional": true }, - "node_modules/@babel/plugin-transform-runtime/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" - } + "protractor": { + "optional": true }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/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/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/request/node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/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/@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@messageformat/core": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "node_modules/@messageformat/date-skeleton": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/@messageformat/number-skeleton": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@messageformat/parser": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "moo": "^0.5.1" - } - }, - "node_modules/@messageformat/runtime": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "make-plural": "^7.0.0" - } - }, - "node_modules/@ngneat/transloco": { - "version": "4.2.2", - "license": "MIT", - "dependencies": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-messageformat": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "@ngneat/transloco": ">=4.2.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-utils": { - "version": "3.0.5", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "typescript": ">=4.9.3 <5.2", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@simonwep/pickr": { - "version": "1.8.2", - "license": "MIT", - "dependencies": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/file-saver": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.194", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.16.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abab": { - "version": "2.0.6", - "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 - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/angular-expressions": { - "version": "1.1.9", - "license": "Unlicense" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "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/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "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, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/babel-loader": { - "version": "9.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "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/base64id": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "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", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "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 - }, - "node_modules/body-parser": { - "version": "1.20.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "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.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.8.0", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "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, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "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, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "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, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js": { - "version": "3.30.2", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.1.3", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "node_modules/custom-event": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cypress": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^14.0.0 || ^16.0.0 || >=18.0.0" - } - }, - "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", - "dev": true - }, - "node_modules/cypress/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/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/cypress/node_modules/chalk/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/cypress/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/cypress/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/cypress/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cypress/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/cypress/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/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/cypress/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/cypress/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, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/cypress/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/cypress/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/cypress/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/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/date-format": { - "version": "4.0.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/dayjs": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "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, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/executable/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "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, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/guacamole-frontend-lib": { - "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "link": true - }, - "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 - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/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/inquirer/node_modules/chalk": { - "version": "4.1.2", - "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/inquirer/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/inquirer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "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-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/jstz": { - "version": "2.1.1", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/karma": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "dependencies": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - } - }, - "node_modules/karma-firefox-launcher/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/karma-jasmine": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, - "node_modules/less": { - "version": "4.1.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "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/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "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", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "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/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/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/log-update/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/log-update/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/log-update/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, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-plural": { - "version": "7.3.0", - "license": "Unicode-DFS-2016" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "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 - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect/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 - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/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 - }, - "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, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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 - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moo": { - "version": "0.5.2", - "license": "BSD-3-Clause" - }, - "node_modules/mrmime": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanopop": { - "version": "2.3.0", - "license": "MIT" - }, - "node_modules/needle": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "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/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "dependencies": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "bin": { - "ng-packagr": "cli/main.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "optionalDependencies": { - "esbuild": "^0.17.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "tslib": "^2.3.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/ng-packagr/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "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==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "dev": true, - "license": "MIT", - "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 - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "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/ora/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, - "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/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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 - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.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 - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "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, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "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, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "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 - }, - "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 - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/replace-in-file": { - "version": "6.3.5", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/replace-in-file/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/replace-in-file/node_modules/chalk": { - "version": "4.1.2", - "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/replace-in-file/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/replace-in-file/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/replace-in-file/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/replace-in-file/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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/restore-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.21.5", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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/safe-identifier": { - "version": "0.4.2", - "license": "ISC" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "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, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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/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/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "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/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "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": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/tar/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 - }, - "node_modules/terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "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 - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "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, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "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==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/vite": { - "version": "4.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "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/wrap-ansi-cjs": { - "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "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", - "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", - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.11.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/zone.js": { - "version": "0.13.0", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "requires": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild": "0.17.19", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "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" - } - }, - "semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, - "@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - } - }, - "@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "dependencies": { - "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" - } - }, - "semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "requires": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.22.5", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "dev": true - }, - "@babel/core": { - "version": "7.21.8", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "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 - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@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" - } - }, - "@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" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "dev": true - }, - "@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "lodash.once": "^4.1.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" - } - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true - }, - "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "dev": true, - "optional": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true - } - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@messageformat/core": { - "version": "3.1.0", - "requires": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "@messageformat/date-skeleton": { - "version": "1.0.1" - }, - "@messageformat/number-skeleton": { - "version": "1.2.0" - }, - "@messageformat/parser": { - "version": "5.0.0", - "requires": { - "moo": "^0.5.1" - } - }, - "@messageformat/runtime": { - "version": "3.0.1", - "requires": { - "make-plural": "^7.0.0" - } - }, - "@ngneat/transloco": { - "version": "4.2.2", - "requires": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-messageformat": { - "version": "4.1.0", - "requires": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-utils": { - "version": "3.0.5", - "requires": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "requires": {} - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "requires": { - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1" - } - }, - "@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "jsonc-parser": "3.2.0" - } - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true - }, - "@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - } - }, - "@simonwep/pickr": { - "version": "1.8.2", - "requires": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true - }, - "@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/cookie": { - "version": "0.4.1", - "dev": true - }, - "@types/cors": { - "version": "2.8.13", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.37.0", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "dev": true - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/file-saver": { - "version": "2.0.5", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "4.3.1", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/lodash": { - "version": "4.14.194", - "dev": true - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "18.16.0", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "requires": {} - }, - "@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true - }, - "abab": { - "version": "2.0.6", - "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.8", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.2", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "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", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.12.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "angular-expressions": { - "version": "1.1.9" - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "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": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "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 - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "babel-loader": { - "version": "9.1.2", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "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 - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - } - }, - "balanced-match": { - "version": "1.0.2" - }, - "base64-js": { - "version": "1.5.1" - }, - "base64id": { - "version": "2.0.0", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "bl": { - "version": "4.1.0", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "body-parser": { - "version": "1.20.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "buffer": { - "version": "5.7.1", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "dev": true - }, - "cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } - }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0" - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "dev": true - }, - "check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "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.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.3", - "dev": true - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "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", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.8.0" - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "cli-width": { - "version": "3.0.0", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4" - }, - "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", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "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": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "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" - } - }, - "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", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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" - }, - "connect": { - "version": "3.7.0", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "copy-anything": { - "version": "2.0.6", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - } - } - }, - "core-js": { - "version": "3.30.2" - }, - "core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "8.1.3", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1" - }, - "js-yaml": { - "version": "4.1.0", - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.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.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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 - }, - "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" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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 - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "dev": true - }, - "cypress": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", - "dev": true, - "requires": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "@types/node": { - "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", - "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.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "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" - } - } - } - }, - "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 - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "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 - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "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" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-format": { - "version": "4.0.14", - "dev": true - }, - "dayjs": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.4", - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "di": { - "version": "0.0.1", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-serialize": { - "version": "2.2.1", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0" - }, - "emojis-list": { - "version": "3.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "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": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "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" - } - }, - "engine.io": { - "version": "6.4.2", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - } - }, - "engine.io-parser": { - "version": "5.0.6", - "dev": true - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "ent": { - "version": "2.2.0", - "dev": true - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "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": "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 - }, - "errno": { - "version": "0.1.8", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "1.2.1", - "dev": true - }, - "esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1" - }, - "escape-html": { - "version": "1.0.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "dev": true - }, - "events": { - "version": "3.3.0", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "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" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-saver": { - "version": "2.0.5" - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2" - }, - "flatted": { - "version": "3.2.7", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "dev": true - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "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", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0" - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5" - }, - "get-intrinsic": { - "version": "1.2.0", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "requires": { - "async": "^3.2.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.3", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "dev": true - }, - "global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - } - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "13.1.4", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "dev": true - }, - "guacamole-frontend-lib": { - "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "requires": { - "tslib": "^2.3.0" - } - }, - "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 - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0" - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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" - } - } - } - }, - "html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1" - }, - "ignore": { - "version": "5.2.4", - "dev": true - }, - "ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "requires": { - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "image-size": { - "version": "0.5.5", - "dev": true, - "optional": true - }, - "immutable": { - "version": "4.3.0", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0" - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "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 - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true - }, - "injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "inquirer": { - "version": "8.2.4", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "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" - } - } - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.12.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-interactive": { - "version": "1.0.0" - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0" - }, - "is-what": { - "version": "3.14.1", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.10", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jasmine-core": { - "version": "4.5.0", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "dev": true - }, - "jsonc-parser": { - "version": "3.2.0", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "jstz": { - "version": "2.1.1" - }, - "karma": { - "version": "6.4.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "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.9", - "dev": true - } - } - }, - "karma-coverage": { - "version": "2.2.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - } - }, - "karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "requires": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - }, - "dependencies": { - "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" - } - } - } - }, - "karma-jasmine": { - "version": "5.1.0", - "dev": true, - "requires": { - "jasmine-core": "^4.1.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "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.6", - "dev": true - }, - "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true - }, - "less": { - "version": "4.1.3", - "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", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "dev": true, - "optional": true - } - } - }, - "less-loader": { - "version": "11.1.0", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, - "loader-runner": { - "version": "4.3.0", - "dev": true - }, - "loader-utils": { - "version": "3.2.1", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.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" - } - }, - "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 - }, - "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", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "log4js": { - "version": "6.9.1", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - } - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.30.0", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - } - } - }, - "make-plural": { - "version": "7.3.0" - }, - "media-typer": { - "version": "0.3.0", - "dev": true - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0" - }, - "mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - } - }, - "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 - }, - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "dev": true - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "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", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "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", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moo": { - "version": "0.5.2" - }, - "mrmime": { - "version": "1.0.1", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "mute-stream": { - "version": "0.0.8", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "dev": true - }, - "nanopop": { - "version": "2.3.0" - }, - "needle": { - "version": "3.2.0", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "negotiator": { - "version": "0.6.3", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "dev": true - }, - "ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "requires": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild": "^0.17.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } - } - }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "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" - } - } - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true - }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "requires": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "dev": true - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/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 + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-eslint/builder": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", + "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "16.2.2", + "nx": "16.2.2" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", + "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", + "dev": true + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", + "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", + "dev": true, + "dependencies": { + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", + "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "aria-query": "5.1.3", + "axobject-query": "3.1.1" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", + "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", + "dev": true, + "dependencies": { + "@angular-eslint/eslint-plugin": "16.0.3", + "@angular-eslint/eslint-plugin-template": "16.0.3", + "@nx/devkit": "16.2.2", + "ignore": "5.2.4", + "nx": "16.2.2", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1" + }, + "peerDependencies": { + "@angular/cli": ">= 16.0.0 < 17.0.0" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", + "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "eslint-scope": "^7.0.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@angular-eslint/utils": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", + "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/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 + }, + "node_modules/@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.1", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1" + } + }, + "node_modules/@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.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.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/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/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@messageformat/core": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "node_modules/@messageformat/date-skeleton": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@messageformat/number-skeleton": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/@messageformat/parser": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "moo": "^0.5.1" + } + }, + "node_modules/@messageformat/runtime": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "make-plural": "^7.0.0" + } + }, + "node_modules/@ngneat/transloco": { + "version": "4.2.2", + "license": "MIT", + "dependencies": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-messageformat": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "@ngneat/transloco": ">=4.2.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", + "dev": true, + "dependencies": { + "@nx/devkit": "16.2.2" + } + }, + "node_modules/@nrwl/tao": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", + "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", + "dev": true, + "dependencies": { + "nx": "16.2.2" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "16.2.2", + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.3.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 15 <= 17" + } + }, + "node_modules/@nx/devkit/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nx/devkit/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/@nx/devkit/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/@nx/devkit/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 + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", + "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", + "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", + "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", + "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", + "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", + "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", + "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", + "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", + "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.194", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", + "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", + "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", + "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", + "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", + "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", + "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", + "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", + "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/angular-expressions": { + "version": "1.1.9", + "license": "Unlicense" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "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/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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 + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "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, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "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/base64id": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "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 + }, + "node_modules/body-parser": { + "version": "1.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "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.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.8.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "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, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js": { + "version": "3.30.2", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress": { + "version": "12.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", + "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^14.0.0 || ^16.0.0 || >=18.0.0" + } + }, + "node_modules/cypress/node_modules/@types/node": { + "version": "14.18.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", + "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "dev": true + }, + "node_modules/cypress/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/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/cypress/node_modules/chalk/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/cypress/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/cypress/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/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/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/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/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, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cypress/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/cypress/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/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-format": { + "version": "4.0.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "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, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/es-module-lexer": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/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/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/eslint/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/eslint/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/eslint/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/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==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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==", + "dev": true + }, + "node_modules/eslint/node_modules/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==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/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==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "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, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/guacamole-frontend-lib": { + "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "link": true + }, + "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 + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/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/inquirer/node_modules/chalk": { + "version": "4.1.2", + "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/inquirer/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/inquirer/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "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": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jake/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/jake/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/jake/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/jake/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/jasmine-core": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jstz": { + "version": "2.1.1", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/karma": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "dependencies": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + } + }, + "node_modules/karma-firefox-launcher/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/karma-jasmine": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/less": { + "version": "4.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "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/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "on-finished": { - "version": "2.4.1", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "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/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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/log-update/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/log-update/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/log-update/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, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-plural": { + "version": "7.3.0", + "license": "Unicode-DFS-2016" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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 + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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 + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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 + }, + "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, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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 + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "license": "BSD-3-Clause" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanopop": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/needle": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "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/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "dependencies": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.17.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nx": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", + "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nrwl/tao": "16.2.2", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "16.2.2", + "@nx/nx-darwin-x64": "16.2.2", + "@nx/nx-linux-arm-gnueabihf": "16.2.2", + "@nx/nx-linux-arm64-gnu": "16.2.2", + "@nx/nx-linux-arm64-musl": "16.2.2", + "@nx/nx-linux-x64-gnu": "16.2.2", + "@nx/nx-linux-x64-musl": "16.2.2", + "@nx/nx-win32-arm64-msvc": "16.2.2", + "@nx/nx-win32-x64-msvc": "16.2.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/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/nx/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/nx/node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nx/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/nx/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/nx/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/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/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/nx/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/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, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/nx/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/nx/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/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/nx/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/nx/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/nx/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/nx/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 + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "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 + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "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/ora/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "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/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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 + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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 + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "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, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "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, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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 + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/replace-in-file": { + "version": "6.3.5", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/replace-in-file/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "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/replace-in-file/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/replace-in-file/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/replace-in-file/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/replace-in-file/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.21.5", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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/safe-identifier": { + "version": "0.4.2", + "license": "ISC" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true }, - "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 + "sass": { + "optional": true }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "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": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/tar/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 + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "onetime": { - "version": "5.1.2", - "requires": { - "mimic-fn": "^2.1.0" - } + "esbuild": { + "optional": true }, - "open": { - "version": "8.4.2", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "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 + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "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, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "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 + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vite": { + "version": "4.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true }, - "ora": { - "version": "5.4.1", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } + "less": { + "optional": true }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true + "sass": { + "optional": true }, - "ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "stylus": { + "optional": true }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "sugarss": { + "optional": true }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "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" - } + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "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/wrap-ansi-cjs": { + "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "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", + "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", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.13.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "requires": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild": "0.17.19", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "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 + } + } }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "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" + } }, - "p-try": { - "version": "2.2.0", - "dev": true + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "requires": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + } + }, + "@angular-eslint/builder": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", + "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", + "dev": true, + "requires": { + "@nx/devkit": "16.2.2", + "nx": "16.2.2" + } + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", + "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", + "dev": true + }, + "@angular-eslint/eslint-plugin": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", + "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", + "dev": true, + "requires": { + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + } + }, + "@angular-eslint/eslint-plugin-template": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", + "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "aria-query": "5.1.3", + "axobject-query": "3.1.1" + } + }, + "@angular-eslint/schematics": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", + "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", + "dev": true, + "requires": { + "@angular-eslint/eslint-plugin": "16.0.3", + "@angular-eslint/eslint-plugin-template": "16.0.3", + "@nx/devkit": "16.2.2", + "ignore": "5.2.4", + "nx": "16.2.2", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1" + }, + "dependencies": { + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, + "@angular-eslint/template-parser": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", + "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "eslint-scope": "^7.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "@angular-eslint/utils": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", + "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + } + }, + "@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "dependencies": { + "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" + } }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "parse-json": { - "version": "5.2.0", - "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" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "requires": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + } + }, + "@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.5", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "dev": true + }, + "@babel/core": { + "version": "7.21.8", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "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 + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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" + } + }, + "@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" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true + }, + "@cypress/request": { + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.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" + } + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "parse-node-version": { - "version": "1.0.1", - "dev": true + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "requires": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, - "parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "requires": { - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, - "parseurl": { - "version": "1.3.3", - "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==", + "dev": true }, - "path-exists": { - "version": "4.0.0", - "dev": true + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true }, - "path-is-absolute": { - "version": "1.0.1" + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true }, - "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 + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, - "path-parse": { - "version": "1.0.7", - "dev": true + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } }, - "path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true - } - } + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@messageformat/core": { + "version": "3.1.0", + "requires": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "@messageformat/date-skeleton": { + "version": "1.0.1" + }, + "@messageformat/number-skeleton": { + "version": "1.2.0" + }, + "@messageformat/parser": { + "version": "5.0.0", + "requires": { + "moo": "^0.5.1" + } + }, + "@messageformat/runtime": { + "version": "3.0.1", + "requires": { + "make-plural": "^7.0.0" + } + }, + "@ngneat/transloco": { + "version": "4.2.2", + "requires": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-messageformat": { + "version": "4.1.0", + "requires": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-utils": { + "version": "3.0.5", + "requires": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@nrwl/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", + "dev": true, + "requires": { + "@nx/devkit": "16.2.2" + } + }, + "@nrwl/tao": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", + "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", + "dev": true, + "requires": { + "nx": "16.2.2" + } + }, + "@nx/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", + "dev": true, + "requires": { + "@nrwl/devkit": "16.2.2", + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.3.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "dependencies": { + "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" + } }, - "path-type": { - "version": "4.0.0" + "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" + } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "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 + } + } + }, + "@nx/nx-darwin-arm64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", + "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", + "dev": true, + "optional": true + }, + "@nx/nx-darwin-x64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", + "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-arm-gnueabihf": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", + "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-arm64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", + "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-arm64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", + "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-x64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", + "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-x64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", + "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", + "dev": true, + "optional": true + }, + "@nx/nx-win32-arm64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", + "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", + "dev": true, + "optional": true + }, + "@nx/nx-win32-x64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", + "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "requires": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true + }, + "@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "@simonwep/pickr": { + "version": "1.8.2", + "requires": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "picocolors": { - "version": "1.0.0", - "dev": true + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "dev": true + }, + "@types/cors": { + "version": "2.8.13", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.37.0", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/file-saver": { + "version": "2.0.5", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "4.3.1", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/lodash": { + "version": "4.14.194", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "18.16.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", + "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", + "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", + "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", + "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", + "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", + "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } }, - "picomatch": { - "version": "2.3.1", - "dev": true + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", + "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", + "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.7", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true + }, + "@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "requires": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + } + }, + "@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } + } + }, + "abab": { + "version": "2.0.6", + "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.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.2", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "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", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "angular-expressions": { + "version": "1.1.9" + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "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 + }, + "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 + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "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": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "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 + }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } }, - "pify": { - "version": "4.0.1", - "dev": true, - "optional": true + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + } + } + }, + "axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "babel-loader": { + "version": "9.1.2", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "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 + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "base64id": { + "version": "2.0.0", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bl": { + "version": "4.1.0", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.20.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer": { + "version": "5.7.1", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } }, - "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true }, - "postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "requires": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - } + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "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.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.3", + "dev": true + }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "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", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.8.0" + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cli-width": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4" + }, + "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", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "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": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "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" + } + }, + "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", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} + "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" + } }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } + "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" + }, + "connect": { + "version": "3.7.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "core-js": { + "version": "3.30.2" + }, + "core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "8.1.3", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1" }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.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" + } }, - "postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "requires": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "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" + } }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true + "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 }, - "proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "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 }, - "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 + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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 + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "dev": true + }, + "cypress": { + "version": "12.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", + "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "dev": true, + "requires": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "14.18.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", + "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "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" + } }, - "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" + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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" + } } + } }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "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 - } - } + "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" + } }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "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 }, - "prr": { - "version": "1.0.1", - "dev": true, - "optional": true + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } }, - "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" - } + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "punycode": { - "version": "2.3.0", - "dev": true + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, - "qjobs": { - "version": "1.2.0", - "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 }, - "qs": { - "version": "6.11.0", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true }, - "queue-microtask": { - "version": "1.2.3", - "dev": true + "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" + } }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "range-parser": { - "version": "1.2.1", - "dev": true + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } }, - "raw-body": { - "version": "2.5.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-format": { + "version": "4.0.14", + "dev": true + }, + "dayjs": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-equal": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "di": { + "version": "0.0.1", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serialize": { + "version": "2.2.1", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0" + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "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": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "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" + } + }, + "engine.io": { + "version": "6.4.2", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + } + }, + "engine.io-parser": { + "version": "5.0.6", + "dev": true + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "ent": { + "version": "2.2.0", + "dev": true + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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": "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 + }, + "errno": { + "version": "0.1.8", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "es-module-lexer": { + "version": "1.2.1", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "requires": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } - }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true - }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } + "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" + } }, - "read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true - } - } + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "readable-stream": { - "version": "3.6.2", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.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" + } }, - "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 + "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 }, - "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 + "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==", + "dev": true }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } + "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==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } }, - "regex-parser": { - "version": "2.2.11", - "dev": true + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "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 }, - "replace-in-file": { - "version": "6.3.5", - "requires": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } + "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==", + "dev": true }, - "require-directory": { - "version": "2.1.1" + "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==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } }, - "require-from-string": { - "version": "2.0.2", - "dev": true + "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" + } }, - "requires-port": { - "version": "1.0.0", - "dev": true + "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==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } }, - "resolve": { - "version": "1.22.2", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.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" + } }, - "resolve-from": { - "version": "5.0.0", - "dev": true + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true }, - "resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "source-map": { - "version": "0.6.1", - "dev": true - } - } + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } }, - "restore-cursor": { - "version": "3.1.0", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "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" + } }, - "reusify": { - "version": "1.0.4", - "dev": true + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } }, - "rfdc": { - "version": "1.3.0", - "dev": true + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } }, - "rollup": { - "version": "3.21.5", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-saver": { + "version": "2.0.5" + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "run-async": { - "version": "2.4.1", - "dev": true + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } + "ms": { + "version": "2.0.0", + "dev": true }, - "rxjs": { - "version": "7.8.1", - "requires": { - "tslib": "^2.1.0" - } + "on-finished": { + "version": "2.3.0", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2" + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "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", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.2.0", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "13.1.4", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "guacamole-frontend-lib": { + "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "requires": { + "tslib": "^2.3.0" + } + }, + "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 + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, "safe-buffer": { - "version": "5.2.1" + "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 }, - "safe-identifier": { - "version": "0.4.2" - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true - }, - "sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } + "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" + } + } + } + }, + "html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.2.4", + "dev": true + }, + "ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "requires": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - } + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "image-size": { + "version": "0.5.5", + "dev": true, + "optional": true + }, + "immutable": { + "version": "4.3.0", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0" + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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 + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true + }, + "injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } + }, + "inquirer": { + "version": "8.2.4", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "sax": { - "version": "1.2.4", - "dev": true, - "optional": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "schema-utils": { - "version": "4.0.1", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.12.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-interactive": { + "version": "1.0.0" + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "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.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0" + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "is-what": { + "version": "3.14.1", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { "semver": { - "version": "7.3.8", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "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" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "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" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "dev": true - }, - "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": "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 - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7" - }, - "sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - } - }, - "slash": { - "version": "4.0.0", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.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" - } - }, - "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 - } - } + "version": "6.3.0", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "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" + } }, - "socket.io": { - "version": "4.6.1", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "requires": { - "ws": "~8.11.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" + } }, - "socket.io-parser": { - "version": "4.2.3", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } + "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 }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } + "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 }, - "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.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" + } + } + } + }, + "jasmine-core": { + "version": "4.5.0", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jstz": { + "version": "2.1.1" + }, + "karma": { + "version": "6.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "dev": true - }, - "source-map-loader": { - "version": "4.0.1", - "dev": true, - "requires": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } + "version": "0.6.1", + "dev": true }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } }, - "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", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } + "yargs": { + "version": "16.2.0", + "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" + } }, - "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", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } + "yargs-parser": { + "version": "20.2.9", + "dev": true + } + } + }, + "karma-coverage": { + "version": "2.2.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + } + }, + "karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "requires": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "karma-jasmine": { + "version": "5.1.0", + "dev": true, + "requires": { + "jasmine-core": "^4.1.0" + } + }, + "karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "requires": {} + }, + "karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "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.6", + "dev": true + }, + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true + }, + "less": { + "version": "4.1.3", + "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", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } }, - "sprintf-js": { - "version": "1.0.3", - "dev": true + "mime": { + "version": "1.6.0", + "dev": true, + "optional": true }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "semver": { + "version": "5.7.1", + "dev": true, + "optional": true }, - "ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "11.1.0", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "statuses": { - "version": "1.5.0", - "dev": true + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "streamroller": { - "version": "3.1.5", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - } + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } + "color-name": { + "version": "1.1.4" }, - "string-width": { - "version": "4.2.3", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "has-flag": { + "version": "4.0.0" }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.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" + } }, - "strip-ansi": { - "version": "6.0.1", - "requires": { - "ansi-regex": "^5.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" + } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "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 }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "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", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "log4js": { + "version": "6.9.1", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + } + }, + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.0", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "make-plural": { + "version": "7.3.0" + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, + "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 + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "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 + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "symbol-observable": { - "version": "4.0.0", - "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 + } + } + }, + "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", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "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 + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "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 - } - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "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 + } + } + }, + "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", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moo": { + "version": "0.5.2" + }, + "mrmime": { + "version": "1.0.1", + "dev": true + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "dev": true + }, + "nanopop": { + "version": "2.3.0" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "needle": { + "version": "3.2.0", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "requires": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild": "^0.17.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + } + } + }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nx": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", + "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", + "dev": true, + "requires": { + "@nrwl/tao": "16.2.2", + "@nx/nx-darwin-arm64": "16.2.2", + "@nx/nx-darwin-x64": "16.2.2", + "@nx/nx-linux-arm-gnueabihf": "16.2.2", + "@nx/nx-linux-arm64-gnu": "16.2.2", + "@nx/nx-linux-arm64-musl": "16.2.2", + "@nx/nx-linux-x64-gnu": "16.2.2", + "@nx/nx-linux-x64-musl": "16.2.2", + "@nx/nx-win32-arm64-msvc": "16.2.2", + "@nx/nx-win32-x64-msvc": "16.2.2", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "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" + } }, - "text-table": { - "version": "0.2.0", - "dev": true + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "through": { - "version": "2.3.8", - "dev": true + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "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" + } }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } + "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" + } }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true + "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 }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } }, - "toidentifier": { - "version": "1.0.1", - "dev": true + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "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", - "punycode": "^2.1.1" - } + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "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" + } }, - "tree-kill": { - "version": "1.2.2", - "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 }, - "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, - "tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } + "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" + } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "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" + } }, - "type-fest": { - "version": "0.21.3", - "dev": true + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, - "type-is": { - "version": "1.6.18", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } + "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" + } }, - "typed-assert": { - "version": "1.0.9", - "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" + } }, - "typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } }, - "ua-parser-js": { - "version": "0.7.35", - "dev": true + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "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 + } + } + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "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.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "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.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "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", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "color-name": { + "version": "1.1.4" }, - "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } + "has-flag": { + "version": "4.0.0" }, - "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.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" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "requires": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "requires": { + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.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 + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "4.0.1", + "dev": true, + "optional": true + }, + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "requires": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "requires": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true }, - "universalify": { - "version": "0.1.2", - "dev": true + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "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" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "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 + } + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "prr": { + "version": "1.0.1", + "dev": true, + "optional": true + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "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" + } + }, + "punycode": { + "version": "2.3.0", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "dev": true + }, + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "unpipe": { - "version": "1.0.0", - "dev": true + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true }, - "update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.2", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "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": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "replace-in-file": { + "version": "6.3.5", + "requires": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "util-deprecate": { - "version": "1.0.2" + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "utils-merge": { - "version": "1.0.1", - "dev": true + "color-name": { + "version": "1.1.4" }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "has-flag": { + "version": "4.0.0" }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } }, - "validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.21.5", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-async": { + "version": "2.4.1", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-identifier": { + "version": "0.4.2" + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "requires": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "dev": true, + "optional": true + }, + "schema-utils": { + "version": "4.0.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "vary": { - "version": "1.1.2", - "dev": true + "yallist": { + "version": "4.0.0", + "dev": true + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "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 }, - "vite": { - "version": "4.3.9", - "dev": true, - "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "void-elements": { - "version": "2.0.1", - "dev": true + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "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" + } }, - "watchpack": { - "version": "2.4.0", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true }, - "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" - } + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } }, - "wcwidth": { - "version": "1.0.1", - "requires": { - "defaults": "^1.0.3" - } + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, - "webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } + "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.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "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": "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 + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "slash": { + "version": "4.0.0", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.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" + } }, - "webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "dependencies": { - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - } - } + "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" + } }, - "webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "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 + } + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socket.io": { + "version": "4.6.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "requires": { + "ws": "~8.11.0" + } + }, + "socket.io-parser": { + "version": "4.2.3", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "source-map-loader": { + "version": "4.0.1", + "dev": true, + "requires": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "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", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "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", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, + "streamroller": { + "version": "3.1.5", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "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==", + "dev": true + }, + "strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + } + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "symbol-observable": { + "version": "4.0.0", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } } + } }, - "webpack-sources": { - "version": "3.2.3", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "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 + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } + "json-schema-traverse": { + "version": "0.4.1", + "dev": true }, - "wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "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", + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "dev": true + }, + "tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "requires": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-assert": { + "version": "1.0.9", + "dev": true + }, + "typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.35", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "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 + }, + "update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1", + "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==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } + }, + "vite": { + "version": "4.3.9", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "void-elements": { + "version": "2.0.1", + "dev": true + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "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" + } + }, + "wcwidth": { + "version": "1.0.1", + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "wrap-ansi": { - "version": "7.0.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - } - } + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@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" - }, - "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" - } - }, - "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 - } - } + "json-schema-traverse": { + "version": "0.4.1", + "dev": true }, - "wrappy": { - "version": "1.0.2" + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } }, "ws": { - "version": "8.11.0", - "dev": true, - "requires": {} - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "^0.2.2" - } - }, - "y18n": { - "version": "5.0.8" - }, - "yallist": { - "version": "3.1.1", - "dev": true + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + } + } + }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true + }, + "webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "requires": { + "typed-assert": "^1.0.8" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "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 + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } }, - "yargs": { - "version": "17.7.2", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } }, - "yargs-parser": { - "version": "21.1.1" + "color-name": { + "version": "1.1.4" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@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" + }, + "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" + } }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.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" + } }, - "zone.js": { - "version": "0.13.0", - "requires": { - "tslib": "^2.3.0" - } + "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 } + } + }, + "wrappy": { + "version": "1.0.2" + }, + "ws": { + "version": "8.11.0", + "dev": true, + "requires": {} + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, + "y18n": { + "version": "5.0.8" + }, + "yallist": { + "version": "3.1.1", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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.13.0", + "requires": { + "tslib": "^2.3.0" + } } + } } diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index 4c91b94558..0dcb41d836 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -5,7 +5,8 @@ "ng": "ng", "start": "ng serve", "build": "ng build", - "test": "ng test" + "test": "ng test", + "lint": "ng lint" }, "private": true, "dependencies": { @@ -31,12 +32,20 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^16.1.0", + "@angular-eslint/builder": "16.0.3", + "@angular-eslint/eslint-plugin": "16.0.3", + "@angular-eslint/eslint-plugin-template": "16.0.3", + "@angular-eslint/schematics": "16.0.3", + "@angular-eslint/template-parser": "16.0.3", "@angular/cli": "~16.1.0", "@angular/compiler-cli": "^16.1.1", "@types/file-saver": "^2.0.5", "@types/jasmine": "~4.3.0", "@types/lodash": "^4.14.194", + "@typescript-eslint/eslint-plugin": "5.59.7", + "@typescript-eslint/parser": "5.59.7", "cypress": "^12.15.0", + "eslint": "^8.40.0", "jasmine-core": "~4.5.0", "karma": "~6.4.0", "karma-coverage": "~2.2.0", diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/.eslintrc.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/.eslintrc.json new file mode 100644 index 0000000000..f1fc44d98d --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/.eslintrc.json @@ -0,0 +1,37 @@ +{ + "extends": "../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "guac", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "guac", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} From d64df772bfecc3bf2b316dc31fe5eb3201febff6 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 17:33:29 +0200 Subject: [PATCH 13/80] GUACAMOLE-1085: Fix some linter errors --- .../guacamole-frontend/src/app/app.component.ts | 6 +++--- .../src/app/auth/service/authentication.service.ts | 2 +- .../client-page/client-page.component.ts | 8 ++++---- .../guac-client-user-count.component.ts | 6 +++--- .../guac-client-zoom/guac-client-zoom.component.ts | 2 +- .../guac-client/guac-client.component.ts | 10 +++++----- .../client/services/guac-client-manager.service.ts | 2 +- .../app/client/services/managed-client.service.ts | 6 +++--- .../client/services/managed-filesystem.service.ts | 2 +- .../src/app/client/types/ManagedClientState.ts | 14 +++++++------- .../components/clipboard/clipboard.component.ts | 4 ++-- .../app/clipboard/services/clipboard.service.ts | 6 +++--- .../email-field/email-field.component.ts | 2 +- .../form-field-base/form-field-base.component.ts | 4 ++-- .../src/app/form/components/form/form.component.ts | 6 +++--- .../guac-input-color/guac-input-color.component.ts | 2 +- .../password-field/password-field.component.ts | 6 +++--- .../terminal-color-scheme-field.component.ts | 4 ++-- .../time-zone-field/time-zone-field.component.ts | 10 +++++----- .../src/app/form/service/color-picker.service.ts | 2 +- .../src/app/form/service/form.service.ts | 4 ++-- .../src/app/form/types/ColorScheme.spec.ts | 8 ++++---- .../src/app/form/types/ColorScheme.ts | 2 +- .../guac-group-list/guac-group-list.component.ts | 8 ++++---- .../src/app/group-list/types/GroupListItem.ts | 6 +++--- .../src/app/history/guac-history.service.spec.ts | 2 +- .../src/app/history/guac-history.service.ts | 8 ++++---- .../guac-recent-connections.component.ts | 2 +- .../src/app/index/services/style-loader.service.ts | 2 +- .../components/guac-pager/guac-pager.component.ts | 14 +++++++------- .../src/app/list/types/FilterToken.ts | 2 +- .../src/app/list/types/SortOrder.ts | 2 +- .../locale/service/translation-loader.service.ts | 2 +- .../app/login/components/login/login.component.ts | 6 +++--- .../identifier-set-editor.component.ts | 5 ++--- .../location-chooser/location-chooser.component.ts | 2 +- .../manage-user-group.component.ts | 4 ++-- .../manage-user/manage-user.component.ts | 4 ++-- .../src/app/manage/services/user-page.service.ts | 2 +- .../src/app/manage/types/HistoryEntryWrapper.ts | 2 +- .../components/guac-menu/guac-menu.component.ts | 8 ++++---- .../guac-page-list.component.spec.ts | 10 +++++----- .../guac-page-list/guac-page-list.component.ts | 10 +++++----- .../guac-section-tabs.component.ts | 2 +- .../src/app/navigation/types/ClientIdentifier.ts | 4 ---- .../services/guac-notification.service.ts | 2 +- .../player-display/player-display.component.ts | 6 +++--- .../src/app/player/player.component.ts | 10 +++++----- .../src/app/player/player.module.ts | 2 +- .../progress-indicator.component.ts | 2 +- .../src/app/rest/service/permission.service.ts | 10 +++++----- .../src/app/rest/service/request.service.ts | 4 ++-- .../src/app/rest/types/ConnectionGroup.ts | 2 +- .../guacamole-frontend/src/app/rest/types/Form.ts | 2 +- .../src/app/rest/types/PermissionFlagSet.ts | 2 +- .../src/app/rest/types/PermissionSet.ts | 2 +- .../guac-settings-connection-history.component.ts | 2 +- .../guac-settings-sessions.component.ts | 12 ++++++------ .../guac-settings-user-groups.component.ts | 6 +++--- .../guac-settings-users.component.ts | 6 +++--- .../app/settings/services/preference.service.ts | 2 +- .../src/app/storage/local-storage.service.ts | 4 ++-- .../app/storage/session-storage-factory.service.ts | 2 +- .../app/text-input/guac-key/key.component.spec.ts | 2 +- .../src/app/text-input/guac-key/key.component.ts | 6 +++--- .../guac-text-input/text-input.component.ts | 8 ++++---- 66 files changed, 157 insertions(+), 162 deletions(-) diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts index 95d17aa2e9..bffb9b8332 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/app.component.ts @@ -69,7 +69,7 @@ import { ApplicationState } from './util/ApplicationState'; * the client-side view can recognize that a user's session has expired * absent any action taken by the user. */ -const SESSION_VALIDITY_RECHECK_INTERVAL: number = 15000; +const SESSION_VALIDITY_RECHECK_INTERVAL = 15000; /** * Name of the file that contains additional styles provided by extensions. @@ -101,7 +101,7 @@ export class AppComponent implements OnInit, AfterViewChecked { /** * Whether the user has selected to log back in after having logged out. */ - reAuthenticating: boolean = false; + reAuthenticating = false; /** * The credentials that the authentication service is has already accepted, @@ -362,7 +362,7 @@ export class AppComponent implements OnInit, AfterViewChecked { private hasActiveTunnel(): boolean { const clients = this.guacClientManager.getManagedClients(); - for (let id in clients) { + for (const id in clients) { switch (clients[id].clientState.connectionState) { case ManagedClientState.ConnectionState.CONNECTING: diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts index 775e1c5b5b..bcdcedf31d 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/auth/service/authentication.service.ts @@ -34,7 +34,7 @@ import { catchError, from, map, Observable, of, switchMap, throwError } from 'rx * The unique identifier of the local storage key which stores the latest * authentication token. */ -const AUTH_TOKEN_STORAGE_KEY: string = 'GUAC_AUTH_TOKEN'; +const AUTH_TOKEN_STORAGE_KEY = 'GUAC_AUTH_TOKEN'; /** * A service for authenticating a user against the REST API. Invoking the diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts index 7739b5140c..9a098eea29 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.ts @@ -68,7 +68,7 @@ import findKey from 'lodash/findKey'; import intersection from 'lodash/intersection'; import isEmpty from 'lodash/isEmpty'; import pull from 'lodash/pull'; -import { filter, pairwise, startWith, Subscription, tap } from 'rxjs'; +import { filter, pairwise, startWith, tap } from 'rxjs'; import { ConnectionGroup } from '../../../rest/types/ConnectionGroup'; import { SharingProfile } from '../../../rest/types/SharingProfile'; import { ManagedClientState } from '../../types/ManagedClientState'; @@ -408,7 +408,7 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { * The client to apply parameter changes to. */ applyParameterChanges(client: ManagedClient | null): void { - for (let name in this.menu.connectionParameters) { + for (const name in this.menu.connectionParameters) { const value = this.menu.connectionParameters[name]; if (client) this.managedClientService.setArgument(client, name, value); @@ -452,7 +452,7 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { * Whether the specified client should be added (false) or removed * (true). */ - addRemoveClient(id: string, remove: boolean = false): void { + addRemoveClient(id: string, remove = false): void { // Deconstruct current path into corresponding client IDs const ids = ManagedClientGroup.getClientIdentifiers(this.groupId); @@ -905,7 +905,7 @@ export class ClientPageComponent implements OnInit, OnChanges, OnDestroy { canShareConnection(): boolean { // If there is at least one sharing profile, the connection can be shared - for (let dummy in this.sharingProfiles) + for (const dummy in this.sharingProfiles) return true; // Otherwise, sharing is not possible diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts index 8f62a7f7fb..2d340815de 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-user-count/guac-client-user-count.component.ts @@ -230,7 +230,7 @@ export class GuacClientUserCountComponent implements AfterViewInit, OnChanges, D this.userCounts = {}; this.oldClient = this.client; - for (let username in this.client.users) { + for (const username in this.client.users) { const connections = this.client.users[username]; const count = Object.keys(connections).length; this.userCounts[username] = count; @@ -242,7 +242,7 @@ export class GuacClientUserCountComponent implements AfterViewInit, OnChanges, D // Display join/leave notifications for users who are currently // connected but whose connection counts have changed - for (let username in this.client.users) { + for (const username in this.client.users) { const connections = this.client.users[username]; const count = Object.keys(connections).length; @@ -258,7 +258,7 @@ export class GuacClientUserCountComponent implements AfterViewInit, OnChanges, D } // Display leave notifications for users who are no longer connected - for (let username in this.userCounts) { + for (const username in this.userCounts) { const count = this.userCounts[username]; if (!this.client.users[username]) { this.notifyUserLeft(username); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts index 0016d8c1e2..c3d80222d7 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client-zoom/guac-client-zoom.component.ts @@ -59,7 +59,7 @@ export class GuacClientZoomComponent { zoomSet(): void { // this.menu.autoFit = false; // this.client.clientProperties.autoFit = false; - }; + } /** * Resets the client autofit setting to false. diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts index bcbd93da6f..1fce95e02a 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/guac-client/guac-client.component.ts @@ -61,7 +61,7 @@ export class GuacClientComponent implements OnInit, OnChanges { /** * Whether the local, hardware mouse cursor is in use. */ - private localCursor: boolean = false; + private localCursor = false; /** * The current Guacamole client instance. @@ -567,14 +567,14 @@ export class GuacClientComponent implements OnInit, OnChanges { * client display that was centered within the pinch at the time the * gesture began. */ - private initialCenterX: number = 0; + private initialCenterX = 0; /** * If a pinch gesture is in progress, the Y coordinate of the point on the * client display that was centered within the pinch at the time the * gesture began. */ - private initialCenterY: number = 0; + private initialCenterY = 0; /** * Zoom and pan client via pinch gestures. @@ -629,7 +629,7 @@ export class GuacClientComponent implements OnInit, OnChanges { * dragged a file over the Guacamole connection but has not yet * dropped it). */ - dropPending: boolean = false; + dropPending = false; /** * Displays a visual indication that dropping the file currently @@ -648,7 +648,7 @@ export class GuacClientComponent implements OnInit, OnChanges { this.dropPending = true; // }); - }; + } /** * Removes the visual indication that dropping the file currently diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts index 6d7ad6ff92..74d32b0fdd 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/guac-client-manager.service.ts @@ -330,7 +330,7 @@ export class GuacClientManagerService { const managedClients: Record = this.storedManagedClients(); // Disconnect each managed client - for (let id in managedClients) + for (const id in managedClients) managedClients[id].client.disconnect(); // Clear managed clients and client groups diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts index d22a19136c..121c101e1d 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-client.service.ts @@ -703,7 +703,7 @@ export class ManagedClientService { * set. */ sendArguments(managedClient: ManagedClient, values: Record | null): void { - for (let name in values) { + for (const name in values) { const value = values[name]; const stream = managedClient.client.createArgumentValueStream('text/plain', name); @@ -730,7 +730,7 @@ export class ManagedClientService { const model: Record = {}; - for (let argumentName in client.arguments) { + for (const argumentName in client.arguments) { const managedArgument = client.arguments[argumentName]; model[managedArgument.name] = managedArgument.value; @@ -787,7 +787,7 @@ export class ManagedClientService { isShared(client: ManagedClient): boolean { // The connection is shared if at least one share link exists - for (let dummy in client.shareLinks) + for (const dummy in client.shareLinks) return true; // No share links currently exist diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts index fde2e8763e..bd4fc7cf91 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/services/managed-filesystem.service.ts @@ -89,7 +89,7 @@ export class ManagedFilesystemService { // For each received stream name const mimetypes = reader.getJSON(); - for (let name in mimetypes) { + for (const name in mimetypes) { // Assert prefix is correct if (name.substring(0, expectedPrefix.length) !== expectedPrefix) diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts index 10e7d672de..50ddc65cd4 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/types/ManagedClientState.ts @@ -71,14 +71,14 @@ export class ManagedClientState { * * @type String */ - IDLE: "IDLE", + IDLE: 'IDLE', /** * The Guacamole connection is being established. * * @type String */ - CONNECTING: "CONNECTING", + CONNECTING: 'CONNECTING', /** * The Guacamole connection has been successfully established, and the @@ -86,7 +86,7 @@ export class ManagedClientState { * * @type String */ - WAITING: "WAITING", + WAITING: 'WAITING', /** * The Guacamole connection has been successfully established, and @@ -94,7 +94,7 @@ export class ManagedClientState { * * @type String */ - CONNECTED: "CONNECTED", + CONNECTED: 'CONNECTED', /** * The Guacamole connection has terminated successfully. No errors are @@ -102,7 +102,7 @@ export class ManagedClientState { * * @type String */ - DISCONNECTED: "DISCONNECTED", + DISCONNECTED: 'DISCONNECTED', /** * The Guacamole connection has terminated due to an error reported by @@ -110,7 +110,7 @@ export class ManagedClientState { * * @type String */ - CLIENT_ERROR: "CLIENT_ERROR", + CLIENT_ERROR: 'CLIENT_ERROR', /** * The Guacamole connection has terminated due to an error reported by @@ -118,7 +118,7 @@ export class ManagedClientState { * * @type String */ - TUNNEL_ERROR: "TUNNEL_ERROR" + TUNNEL_ERROR: 'TUNNEL_ERROR' } /** diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts index 4cd4dd92f2..9e16e4a7a1 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/components/clipboard/clipboard.component.ts @@ -73,7 +73,7 @@ export class ClipboardComponent implements OnInit, AfterViewInit, OnDestroy { type: 'text/plain', data: this.element.nativeElement.value })); - }; + } /** * Updates the contents of the clipboard editor to the given data. @@ -89,7 +89,7 @@ export class ClipboardComponent implements OnInit, AfterViewInit, OnDestroy { } // Ignore other data types for now - }; + } ngOnInit(): void { // Update remote clipboard if local clipboard changes diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts index eae72ebf4f..34e942fa73 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/clipboard/services/clipboard.service.ts @@ -112,7 +112,7 @@ export class ClipboardService { */ private stopEventPropagation(e: Event) { e.stopPropagation(); - }; + } /** * Pushes the current selection range to the selection stack such that it @@ -132,7 +132,7 @@ export class ClipboardService { if (selection.getRangeAt && selection.rangeCount) this.selectionStack.push(selection.getRangeAt(0)); - }; + } /** * Pops a selection range off the selection stack restoring the document's @@ -154,7 +154,7 @@ export class ClipboardService { selection.removeAllRanges(); selection.addRange(range); - }; + } /** * Selects all nodes within the given element. This will replace the diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts index ae98ce1359..e7699b5162 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/email-field/email-field.component.ts @@ -37,7 +37,7 @@ export class EmailFieldComponent extends FormFieldBaseComponent implements OnCha /** * TOOD: To which value is this a reference in the AngularJS code? */ - readOnly: boolean = false; + readOnly = false; /** * Apply disabled state to typed form control. diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts index a3d1e867b8..f2873eba28 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts @@ -108,12 +108,12 @@ export abstract class FormFieldBaseComponent { * Whether this field should be rendered as disabled. By default, * form fields are enabled. */ - @Input() disabled: boolean = false; + @Input() disabled = false; /** * Whether this field should be focused. */ - @Input() focused: boolean = false; + @Input() focused = false; /** * An ID value which is reasonably likely to be unique relative to diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts index c876639021..ca68028172 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form/form.component.ts @@ -62,13 +62,13 @@ export class FormComponent implements OnChanges { * fields/forms which match properties defined within the given * model object. By default, all fields will be shown. */ - @Input() modelOnly: boolean = false + @Input() modelOnly = false /** * Whether the contents of the form should be rendered as disabled. * By default, form fields are enabled. */ - @Input() disabled: boolean = false; + @Input() disabled = false; /** * The name of the field to be focused, if any. @@ -132,7 +132,7 @@ export class FormComponent implements OnChanges { // Produce set of forms from any given content if (changes['content']) { - let content: Form[] | Form | Field[] | Field = changes['content'].currentValue; + const content: Form[] | Form | Field[] | Field = changes['content'].currentValue; // Transform content to always be an array of forms this.forms = this.formService.asFormArray(content); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts index 5d8771ea33..ebf1aeeeac 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/guac-input-color/guac-input-color.component.ts @@ -114,6 +114,6 @@ export class GuacInputColorComponent { }).catch(() => { // Do nothing if the user cancels the dialog }); - }; + } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts index d13693f37d..055af62416 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/password-field/password-field.component.ts @@ -17,7 +17,7 @@ * under the License. */ -import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core'; +import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core'; import { FormFieldBaseComponent } from '../form-field-base/form-field-base.component'; /** @@ -43,7 +43,7 @@ export class PasswordFieldComponent extends FormFieldBaseComponent implements On * * @default 'password' */ - passwordInputType: string = 'password'; + passwordInputType = 'password'; /** * Apply disabled state to form control. @@ -92,6 +92,6 @@ export class PasswordFieldComponent extends FormFieldBaseComponent implements On else this.passwordInputType = 'password'; - }; + } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts index 8d60438013..4061ce7dfd 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/terminal-color-scheme-field/terminal-color-scheme-field.component.ts @@ -28,7 +28,7 @@ import includes from 'lodash/includes'; * The string value which is assigned to selectedColorScheme if a custom * color scheme is selected. */ -const CUSTOM_COLOR_SCHEME: string = 'custom'; +const CUSTOM_COLOR_SCHEME = 'custom'; /** * The palette indices of all colors which are considered low-intensity. @@ -88,7 +88,7 @@ export class TerminalColorSchemeFieldComponent extends FormFieldBaseComponent im * * @default false */ - detailsShown: boolean = false; + detailsShown = false; /** * Form group which contains the form controls for the custom color scheme. diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts index 2e2a94e458..cc5604319f 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/time-zone-field/time-zone-field.component.ts @@ -156,7 +156,7 @@ export class TimeZoneFieldComponent extends FormFieldBaseComponent implements On const regions = ['']; // Add each available region - for (let region in this.timeZones) + for (const region in this.timeZones) regions.push(region); return regions; @@ -169,13 +169,13 @@ export class TimeZoneFieldComponent extends FormFieldBaseComponent implements On const regions: Record = {}; // For each available region - for (let region in this.timeZones) { + for (const region in this.timeZones) { // Get time zones within that region const timeZonesInRegion = this.timeZones[region]; // For each of those time zones - for (let timeZoneName in timeZonesInRegion) { + for (const timeZoneName in timeZonesInRegion) { // Get corresponding ID const timeZoneID = timeZonesInRegion[timeZoneName]; @@ -196,7 +196,7 @@ export class TimeZoneFieldComponent extends FormFieldBaseComponent implements On const defaultTimeZone: Record = {}; // For each available region - for (let region in this.timeZones) { + for (const region in this.timeZones) { // Get time zones within that region const timeZonesInRegion = this.timeZones[region]; @@ -206,7 +206,7 @@ export class TimeZoneFieldComponent extends FormFieldBaseComponent implements On let defaultZoneID: string | undefined = undefined; // For each of those time zones - for (let timeZoneName in timeZonesInRegion) { + for (const timeZoneName in timeZonesInRegion) { // Get corresponding ID const timeZoneID = timeZonesInRegion[timeZoneName]; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts index ee7e13cb26..cf72f45303 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/color-picker.service.ts @@ -284,7 +284,7 @@ export class ColorPickerService { // Replace all color swatches with the palette of colors given while (this.pickr.removeSwatch(0)) { } - for (let color of palette) { + for (const color of palette) { this.pickr.addSwatch(color); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts index d9bdb3fc00..6e43aea10e 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts @@ -265,9 +265,9 @@ export class FormService { const formGroup = new FormGroup({}); for (let i = 0; i < forms.length; i++) { - let form = forms[i]; + const form = forms[i]; - for (let field of form.fields) { + for (const field of form.fields) { formGroup.addControl(field.name, new FormControl('')); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts index 168435c02b..3f71bd637b 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.spec.ts @@ -17,7 +17,7 @@ * under the License. */ -import { ColorScheme } from "./ColorScheme"; +import { ColorScheme } from './ColorScheme'; describe('ColorScheme', () => { @@ -32,12 +32,12 @@ describe('ColorScheme', () => { }); it('convert hex to x11 and back', () => { - let hex = '#A01212'; - let x11 = colorScheme.fromHexColor(hex); + const hex = '#A01212'; + const x11 = colorScheme.fromHexColor(hex); expect(x11).toBe('rgb:A0/12/12'); - let hex2 = colorScheme.toHexColor(x11 as string); + const hex2 = colorScheme.toHexColor(x11 as string); expect(hex2).toEqual(hex); }); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts index 98632cc96d..f2c5cf43eb 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/ColorScheme.ts @@ -244,7 +244,7 @@ export class ColorScheme { + 'foreground: ' + scheme.fromHexColor(scheme.foreground) + ';'; // Add color definitions for each palette entry - for (let index in scheme.colors) + for (const index in scheme.colors) str += '\ncolor' + index + ': ' + scheme.fromHexColor(scheme.colors[index]) + ';'; return str; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts index b45d72b098..5042abadf2 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/components/guac-group-list/guac-group-list.component.ts @@ -81,7 +81,7 @@ export class GuacGroupListComponent implements OnInit, OnChanges { * be shown. If false (the default), only the descendants of the * given connection group will be listed. */ - @Input() showRootGroup: boolean = false; + @Input() showRootGroup = false; /** * The maximum number of connections or groups to show per page. @@ -210,7 +210,7 @@ export class GuacGroupListComponent implements OnInit, OnChanges { if (this.connectionGroups) { // Add each provided connection group - for (let dataSource in this.connectionGroups) { + for (const dataSource in this.connectionGroups) { const connectionGroup = this.connectionGroups[dataSource]; let rootItem: GroupListItem; @@ -252,10 +252,10 @@ export class GuacGroupListComponent implements OnInit, OnChanges { .then((activeConnectionMap) => { // Within each data source, count each active connection by identifier - for (let dataSource in activeConnectionMap) { + for (const dataSource in activeConnectionMap) { const activeConnections = activeConnectionMap[dataSource]; - for (let connectionID in activeConnections) { + for (const connectionID in activeConnections) { const activeConnection = activeConnections[connectionID]; // If counter already exists, increment diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts index e9dbc33e90..c7edde9013 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/group-list/types/GroupListItem.ts @@ -225,7 +225,7 @@ export class GroupListItem { */ static fromConnection(dataSource: string, connection: Connection, - includeSharingProfiles: boolean = true, + includeSharingProfiles = true, countActiveConnections?: (dataSource: string, connection: Connection) => number): GroupListItem { const children: GroupListItem[] = []; @@ -312,8 +312,8 @@ export class GroupListItem { */ static fromConnectionGroup(dataSource: string, connectionGroup: ConnectionGroup, - includeConnections: boolean = true, - includeSharingProfiles: boolean = true, + includeConnections = true, + includeSharingProfiles = true, countActiveConnections?: (dataSource: string, connection: Connection) => number, countActiveConnectionGroups?: (dataSource: string, connectionGroup: ConnectionGroup) => number): GroupListItem { diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts index 3a58bbc44d..94eb47e284 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.spec.ts @@ -20,7 +20,7 @@ import { TestBed } from '@angular/core/testing'; import { GuacHistoryService } from './guac-history.service'; -import { LocalStorageService } from "../storage/local-storage.service"; +import { LocalStorageService } from '../storage/local-storage.service'; describe('GuacHistoryService Unit-Test', () => { let service: GuacHistoryService; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts index 048fcc7d0b..54e301d370 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/history/guac-history.service.ts @@ -18,11 +18,11 @@ */ import { Injectable } from '@angular/core'; -import { LocalStorageService } from "../storage/local-storage.service"; -import { HistoryEntry } from "./HistoryEntry"; +import { LocalStorageService } from '../storage/local-storage.service'; +import { HistoryEntry } from './HistoryEntry'; // The parameter name for getting the history from local storage -const GUAC_HISTORY_STORAGE_KEY = "GUAC_HISTORY"; +const GUAC_HISTORY_STORAGE_KEY = 'GUAC_HISTORY'; /** * The number of entries to allow before removing old entries based on the @@ -86,6 +86,6 @@ export class GuacHistoryService { // Save updated history this.localStorageService.setItem(GUAC_HISTORY_STORAGE_KEY, this.recentConnections); - }; + } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts index 4f577d84a2..a67e37f699 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/home/components/guac-recent-connections/guac-recent-connections.component.ts @@ -145,7 +145,7 @@ export class GuacRecentConnectionsComponent implements OnChanges { this.visibleObjects = {}; if (rootGroups) { - for (let dataSource in rootGroups) { + for (const dataSource in rootGroups) { const rootGroup = rootGroups[dataSource]; this.addVisibleConnectionGroup(dataSource, rootGroup); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts index 1cc53b5367..ab18e02440 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/index/services/style-loader.service.ts @@ -18,7 +18,7 @@ */ import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core'; -import { DOCUMENT } from "@angular/common"; +import { DOCUMENT } from '@angular/common'; const STYLE_ELEMENT_ID = 'loaded-style-'; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts index 8fad637a73..d1657ca3e4 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/components/guac-pager/guac-pager.component.ts @@ -24,13 +24,13 @@ import { BehaviorSubject } from 'rxjs'; * The default size of a page, if not provided via the pageSize * attribute. */ -const DEFAULT_PAGE_SIZE: number = 10; +const DEFAULT_PAGE_SIZE = 10; /** * The default maximum number of page choices to provide, if a * value is not provided via the pageCount attribute. */ -const DEFAULT_PAGE_COUNT: number = 11; +const DEFAULT_PAGE_COUNT = 11; /** * Event data emitted by GuacPagerComponent when the user selects a @@ -95,29 +95,29 @@ export class GuacPagerComponent implements OnChanges { /** * The number of the first selectable page. */ - firstPage: number = 1; + firstPage = 1; /** * The number of the page immediately before the currently-selected * page. */ - previousPage: number = 1; + previousPage = 1; /** * The number of the currently-selected page. */ - currentPage: number = 1; + currentPage = 1; /** * The number of the page immediately after the currently-selected * page. */ - nextPage: number = 1; + nextPage = 1; /** * The number of the last selectable page. */ - lastPage: number = 1; + lastPage = 1; /** * An array of relevant page numbers that the user may want to jump diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts index 20b94d888a..9cca6f1a0d 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/FilterToken.ts @@ -180,7 +180,7 @@ export class FilterToken { const popToken = (): FilterToken | null => { // Attempt to find a matching token - for (let type in FilterToken.Types) { + for (const type in FilterToken.Types) { // Get matching function for current type const matcher = FilterToken.Types[type]; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts index 4bb410c744..32e0486d49 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/list/types/SortOrder.ts @@ -72,7 +72,7 @@ export class SortOrder { * Whether the property should be sorted in descending order. By * default, all properties are sorted in ascending order. */ - reorder(name: string, descending: boolean = false): void { + reorder(name: string, descending = false): void { // Build ascending and descending predicate components const ascendingName = name; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts index 27b01c42f2..0c1258ff40 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/locale/service/translation-loader.service.ts @@ -69,7 +69,7 @@ export class TranslationLoaderService implements TranslocoLoader { */ private replaceValues(obj: any): void { if (typeof obj === 'object') { - for (let key in obj) { + for (const key in obj) { if (typeof obj[key] === 'string' && obj[key].startsWith('@:')) { obj[key] = `{{${obj[key].substring(2)}}}`; } else if (typeof obj[key] === 'object') { diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts index 4d47455150..201b236adb 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/login/components/login/login.component.ts @@ -91,7 +91,7 @@ export class LoginComponent implements OnInit, OnChanges { * reset to false once the attempt has been fully processed, including * rerouting the user to the requested page if the attempt succeeded. */ - submitted: boolean = false; + submitted = false; /** * The field that is most relevant to the user. @@ -118,7 +118,7 @@ export class LoginComponent implements OnInit, OnChanges { isContinuation(): boolean { // The login is continuing if any parameter values are provided - for (let name in this.values?.controls) + for (const name in this.values?.controls) return true; return false; @@ -173,7 +173,7 @@ export class LoginComponent implements OnInit, OnChanges { catchError(this.requestService.IGNORE) ) .subscribe() - }; + } /** * Returns the field most relevant to the user given the current state diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts index 25938c1603..8c656316cf 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/identifier-set-editor/identifier-set-editor.component.ts @@ -18,7 +18,6 @@ */ import { - ChangeDetectionStrategy, Component, Input, OnChanges, @@ -33,7 +32,7 @@ import sortedIndexOf from 'lodash/sortedIndexOf'; import { FilterService } from '../../../list/services/filter.service'; import { SortService } from '../../../list/services/sort.service'; import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; -import { BehaviorSubject, skip } from 'rxjs'; +import { BehaviorSubject } from 'rxjs'; import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; import { DataSource } from '../../../list/types/DataSource'; @@ -115,7 +114,7 @@ export class IdentifierSetEditorComponent implements OnInit, OnChanges { * Initially, only an abbreviated list of identifiers currently present * is shown. */ - expanded: boolean = false; + expanded = false; /** * Map of identifiers to boolean flags indicating whether that diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts index da5e96e9ac..c770b0e15f 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/location-chooser/location-chooser.component.ts @@ -57,7 +57,7 @@ export class LocationChooserComponent implements OnInit, OnChanges { /** * Whether the group list menu is currently open. */ - menuOpen: boolean = false; + menuOpen = false; /** * The human-readable name of the currently-chosen connection diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts index ed64e6eab1..2e7aa10f79 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user-group/manage-user-group.component.ts @@ -260,14 +260,14 @@ export class ManageUserGroupComponent implements OnInit { // Add the identifiers of all modifiable user groups this.availableGroups = []; - for (let groupIdentifier in userGroups) { + for (const groupIdentifier in userGroups) { const userGroup = userGroups[groupIdentifier]; this.availableGroups.push(userGroup.identifier!); } // Add the identifiers of all modifiable users this.availableUsers = []; - for (let username in users) { + for (const username in users) { const user = users[username]; this.availableUsers.push(user.username); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts index 686d0de26b..43179af98a 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/components/manage-user/manage-user.component.ts @@ -84,7 +84,7 @@ export class ManageUserComponent implements OnInit { * not to collide with any user that does not represent the current user * within the permission set. */ - selfUsername: string = ''; + selfUsername = ''; /** * All user accounts associated with the same username as the account being @@ -227,7 +227,7 @@ export class ManageUserComponent implements OnInit { // Add the identifiers of all modifiable user groups const availableGroups: string[] = []; - for (let groupIdentifier in userGroups) { + for (const groupIdentifier in userGroups) { const userGroup = userGroups[groupIdentifier]; availableGroups.push(userGroup.identifier!); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts index 902fc34a0e..b8c3000bf6 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/services/user-page.service.ts @@ -164,7 +164,7 @@ export class UserPageService { // Determine whether a connection or balancing group should serve as // the home page - for (let dataSource in rootGroups) { + for (const dataSource in rootGroups) { this.addClientPages(clientPages, dataSource, rootGroups[dataSource]); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts index bbb5afc0b8..3d42341fc3 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/manage/types/HistoryEntryWrapper.ts @@ -42,7 +42,7 @@ export class HistoryEntryWrapper { * given translation string as the VALUE and UNIT substitution * variables respectively. */ - durationText: string = 'MANAGE_CONNECTION.TEXT_HISTORY_DURATION'; + durationText = 'MANAGE_CONNECTION.TEXT_HISTORY_DURATION'; /** * Creates a new HistoryEntryWrapper. diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts index 8e20936f2c..196b5f1c5f 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-menu/guac-menu.component.ts @@ -18,7 +18,7 @@ */ import { Component, ElementRef, Inject, Input, OnInit, ViewEncapsulation } from '@angular/core'; -import { DOCUMENT } from "@angular/common"; +import { DOCUMENT } from '@angular/common'; @Component({ selector: 'guac-menu', @@ -30,14 +30,14 @@ export class GuacMenuComponent implements OnInit { /** * The string which should be rendered as the menu title. */ - @Input() menuTitle: string = ''; + @Input() menuTitle = ''; /** * Whether the menu should remain open while the user interacts * with the contents of the menu. By default, the menu will close * if the user clicks within the menu contents. */ - @Input() interactive: boolean = false; + @Input() interactive = false; /** * The outermost element of the guacMenu directive. @@ -47,7 +47,7 @@ export class GuacMenuComponent implements OnInit { /** * Whether the contents of the menu are currently shown. */ - menuShown: boolean = false; + menuShown = false; constructor(@Inject(DOCUMENT) private document: Document, private elementRef: ElementRef) { this.element = elementRef.nativeElement; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts index 1888c4d9d6..bf5d79c432 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.spec.ts @@ -19,11 +19,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { GuacPageListComponent } from './guac-page-list.component'; -import { By } from "@angular/platform-browser"; -import { SimpleChange } from "@angular/core"; -import { LocaleModule } from "../../../locale/locale.module"; -import { HttpClientTestingModule } from "@angular/common/http/testing"; -import { RouterTestingModule } from "@angular/router/testing"; +import { By } from '@angular/platform-browser'; +import { SimpleChange } from '@angular/core'; +import { LocaleModule } from '../../../locale/locale.module'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { RouterTestingModule } from '@angular/router/testing'; describe('PageListComponent', () => { let component: GuacPageListComponent; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts index a61b0fe577..157542179d 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-page-list/guac-page-list.component.ts @@ -41,7 +41,7 @@ export class GuacPageListComponent implements OnInit, OnChanges { /** * The URL of the currently-displayed page. */ - currentURL: string = ''; + currentURL = ''; /** * The names associated with the current page, if the current page @@ -114,7 +114,7 @@ export class GuacPageListComponent implements OnInit, OnChanges { * The sorting weight to use for the page if it does not * already have an associated weight. */ - addPage(page: PageDefinition, weight: number = 0): void { + addPage(page: PageDefinition, weight = 0): void { // Pull all names for page const names = this.getPageNames(page); @@ -194,7 +194,7 @@ export class GuacPageListComponent implements OnInit, OnChanges { const pages: PageDefinition[] = []; // Convert contents of level to a flat array of pages - for (let key in level) { + for (const key in level) { const page = level[key]; pages.push(page); @@ -216,7 +216,7 @@ export class GuacPageListComponent implements OnInit, OnChanges { // Determine current page name this.currentPageName = []; - for (let page of pages) { + for (const page of pages) { // If page is current page, store its names if (this.isCurrentPage(page)) @@ -235,7 +235,7 @@ export class GuacPageListComponent implements OnInit, OnChanges { // Determine relevancy by counting the number of pages let pageCount = 0; - for (let name in level) { + for (const name in level) { // Level is relevant if it has two or more pages if (++pageCount === 2) diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts index 6a86401a93..1a2653e86f 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/components/guac-section-tabs/guac-section-tabs.component.ts @@ -134,5 +134,5 @@ export class GuacSectionTabsComponent { */ isSelected(name: string): boolean { return this.current === name; - }; + } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts index da691b1554..df2640d5f7 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/navigation/types/ClientIdentifier.ts @@ -17,10 +17,6 @@ * under the License. */ -import { inject } from '@angular/core'; -import { DOCUMENT } from '@angular/common'; -import { AuthenticationService } from '../../auth/service/authentication.service'; - /** * Uniquely identifies a particular connection or connection * group within Guacamole. This object can be converted to/from a string to diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts index 1c2afe0677..eef540c203 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/notification/services/guac-notification.service.ts @@ -99,7 +99,7 @@ export class GuacNotificationService { * // To hide the status message * guacNotification.showStatus(false); */ - showStatus(status: Notification | Boolean | Object): void { + showStatus(status: Notification | boolean | Object): void { if (!this.storedStatus() || !status) this.storedStatus(status); } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts index 76aa7957fa..ff73d797ac 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player-display/player-display.component.ts @@ -73,8 +73,8 @@ export class PlayerDisplayComponent implements AfterViewInit, OnChanges { if (!this.display) return; - var displayWidth = this.display.getWidth(); - var displayHeight = this.display.getHeight(); + const displayWidth = this.display.getWidth(); + const displayHeight = this.display.getHeight(); // Ignore if the provided display is not at least 1x1 pixels if (!displayWidth || !displayHeight) @@ -84,7 +84,7 @@ export class PlayerDisplayComponent implements AfterViewInit, OnChanges { this.display.scale(Math.min(this.element.nativeElement.offsetWidth / displayWidth, this.element.nativeElement.offsetHeight / displayHeight)); - }; + } ngOnChanges(changes: SimpleChanges): void { diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts index 41bcd3ef30..64e57b656b 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.component.ts @@ -86,7 +86,7 @@ export class PlayerComponent implements OnChanges, OnDestroy { * in progress, this will be the desired playback position of the * pending request. */ - playbackPosition: number = 0; + playbackPosition = 0; /** * The key of the translation string that describes the operation @@ -101,7 +101,7 @@ export class PlayerComponent implements OnChanges, OnDestroy { * completion. If no such operation is running, this value has no * meaning. */ - operationProgress: number = 0; + operationProgress = 0; /** * The position within the recording of the current seek operation, in @@ -115,14 +115,14 @@ export class PlayerComponent implements OnChanges, OnDestroy { * in progress if the user is attempting to change the current playback * position (the user is manipulating the playback position slider). */ - pendingSeekRequest: boolean = false; + pendingSeekRequest = false; /** * Whether playback should be resumed (play() should be invoked on the * recording) once the current seek request is complete. This value * only has meaning if a seek request is pending. */ - resumeAfterSeekRequest: boolean = false; + resumeAfterSeekRequest = false; /** * The operation that should be performed when the cancel button is @@ -261,7 +261,7 @@ export class PlayerComponent implements OnChanges, OnDestroy { else this.recording.play(); } - }; + } ngOnChanges(changes: SimpleChanges) { if (changes['src']) { diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts index 05a4617cea..a69f72b3db 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/player.module.ts @@ -23,7 +23,7 @@ import { ElementModule } from 'guacamole-frontend-lib'; import { PlayerComponent } from './player.component'; import { PlayerDisplayComponent } from './player-display/player-display.component'; import { ProgressIndicatorComponent } from './progress-indicator/progress-indicator.component'; -import { FormsModule } from "@angular/forms"; +import { FormsModule } from '@angular/forms'; @NgModule({ declarations: [ diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts index b44da7dc84..154c0c0c58 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/player/progress-indicator/progress-indicator.component.ts @@ -40,7 +40,7 @@ export class ProgressIndicatorComponent implements OnChanges { * The current progress of the operation as a percentage. This value is * automatically updated as this.progress changes. */ - percentage: number = 0; + percentage = 0; /** * The CSS transform which should be applied to the bar portion of the diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts index cf4a4058b8..d325449d03 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/permission.service.ts @@ -141,7 +141,7 @@ export class PermissionService { * An observable which will emit a {@link PermissionSet} upon * success. */ - getPermissions(dataSource: string, identifier: string, group: boolean = false): Observable { + getPermissions(dataSource: string, identifier: string, group = false): Observable { // Retrieve user/group permissions // TODO: cache : cacheService.users, @@ -178,7 +178,7 @@ export class PermissionService { * The URL for the REST resource representing the user or group having * the given identifier. */ - private getPermissionsResourceURL(dataSource: string, identifier: string, group: boolean = false): string { + private getPermissionsResourceURL(dataSource: string, identifier: string, group = false): string { // Create base URL for data source const base = 'api/session/data/' + encodeURIComponent(dataSource); @@ -249,7 +249,7 @@ export class PermissionService { }); }); - }; + } /** * Adds patches for modifying the permissions associated with specific @@ -274,7 +274,7 @@ export class PermissionService { private addObjectPatchOperations(patch: PermissionPatch[], operation: PermissionPatch.Operation, path: string, permissions: Record): void { // Add object permission operations to patch - for (let identifier in permissions) { + for (const identifier in permissions) { permissions[identifier].forEach(function addObjectPatch(type) { patch.push({ op: operation, @@ -333,5 +333,5 @@ export class PermissionService { // TODO: this.cacheService.users.removeAll(); }) ); - }; + } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts index 7b2eb3976f..65c8aa77af 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/service/request.service.ts @@ -18,11 +18,11 @@ */ import { Injectable } from '@angular/core'; -import { GuacEventService } from "guacamole-frontend-lib"; +import { GuacEventService } from 'guacamole-frontend-lib'; import { Observable, of, throwError } from 'rxjs'; import { GuacFrontendEventArguments -} from "../../events/types/GuacFrontendEventArguments"; +} from '../../events/types/GuacFrontendEventArguments'; import { LogService } from '../../util/log.service'; import { Error } from '../types/Error'; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts index 6a6bc4ceef..7893438635 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/ConnectionGroup.ts @@ -104,7 +104,7 @@ export class ConnectionGroup { * The reserved identifier which always represents the root connection * group. */ - static ROOT_IDENTIFIER: string = 'ROOT'; + static ROOT_IDENTIFIER = 'ROOT'; /** * All valid connection group types. diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts index 5bc602d313..38d2207a5a 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Form.ts @@ -17,7 +17,7 @@ * under the License. */ -import { Field } from "./Field"; +import { Field } from './Field'; /** * The object returned by REST API calls when representing the data diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts index 17e83de8f1..c95404bd13 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionFlagSet.ts @@ -219,7 +219,7 @@ export class PermissionFlagSet { private static addObjectPermissions(permMap: Record, flagMap: Record>): void { // For each defined identifier in the permission map - for (let identifier in permMap) { + for (const identifier in permMap) { // Pull the permission array and loop through each permission const permissions = permMap[identifier]; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts index abe74a9fee..83ae2de6fb 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/PermissionSet.ts @@ -106,7 +106,7 @@ export class PermissionSet { private static containsPermission(permMap: Record, type: PermissionSet.ObjectPermissionType): boolean { // Search all identifiers for given permission - for (let identifier in permMap) { + for (const identifier in permMap) { // If permission is granted, then no further searching is necessary if (permMap[identifier].indexOf(type) !== -1) diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts index f36e69e8ee..519bc0b6a8 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-connection-history/guac-settings-connection-history.component.ts @@ -81,7 +81,7 @@ export class GuacSettingsConnectionHistoryComponent implements OnInit { /** * The search terms to use when filtering the history records. */ - searchString: string = ''; + searchString = ''; /** * TODO: Document diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts index 585c64ae4e..2d6a359d5b 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-sessions/guac-settings-sessions.component.ts @@ -168,7 +168,7 @@ export class GuacSettingsSessionsComponent implements OnInit { this.allConnections = {}; // Load connections from each received root group - for (let dataSource in rootGroups) { + for (const dataSource in rootGroups) { const rootGroup = rootGroups[dataSource]; this.allConnections[dataSource] = {}; this.addDescendantConnections(dataSource, rootGroup); @@ -268,9 +268,9 @@ export class GuacSettingsSessionsComponent implements OnInit { // Wrap all active connections for sake of display this.wrappers = []; - for (let dataSource in this.allActiveConnections) { + for (const dataSource in this.allActiveConnections) { const activeConnections = this.allActiveConnections[dataSource]; - for (let identifier in activeConnections) { + for (const identifier in activeConnections) { const activeConnection = activeConnections[identifier]; // Retrieve corresponding connection @@ -342,7 +342,7 @@ export class GuacSettingsSessionsComponent implements OnInit { const deletionRequests: Observable[] = []; // Perform deletion for each relevant data source - for (let dataSource in this.allSelectedWrappers) { + for (const dataSource in this.allSelectedWrappers) { const selectedWrappers = this.allSelectedWrappers[dataSource]; // Delete sessions, if any are selected @@ -423,8 +423,8 @@ export class GuacSettingsSessionsComponent implements OnInit { canDeleteSessions(): boolean { // We can delete sessions if at least one is selected - for (let dataSource in this.allSelectedWrappers) { - for (let identifier in this.allSelectedWrappers[dataSource]) + for (const dataSource in this.allSelectedWrappers) { + for (const identifier in this.allSelectedWrappers[dataSource]) return true; } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts index d0c96ba7eb..a1cfb8e21e 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-user-groups/guac-settings-user-groups.component.ts @@ -30,7 +30,7 @@ import keys from 'lodash/keys'; import { UserGroup } from '../../../rest/types/UserGroup'; import { Router } from '@angular/router'; import { NonNullableProperties } from '../../../util/utility-types'; -import { BehaviorSubject, of } from 'rxjs'; +import { BehaviorSubject } from 'rxjs'; import { DataSourceBuilderService } from '../../../list/services/data-source-builder.service'; import { DataSource } from '../../../list/types/DataSource'; import { GuacPagerComponent } from '../../../list/components/guac-pager/guac-pager.component'; @@ -249,7 +249,7 @@ export class GuacSettingsUserGroupsComponent implements OnInit { return true; // For each data source - for (let dataSource in this.permissions) { + for (const dataSource in this.permissions) { // Retrieve corresponding permission set const permissionSet = (this.permissions)[dataSource]; @@ -288,7 +288,7 @@ export class GuacSettingsUserGroupsComponent implements OnInit { // For each user group in each data source this.dataSources.forEach(dataSource => { - for (let userGroupIdentifier in userGroups[dataSource]) { + for (const userGroupIdentifier in userGroups[dataSource]) { const userGroup = userGroups[dataSource][userGroupIdentifier]; // Do not add the same user group twice diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts index 831cd65acf..a7ee6447e2 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/components/guac-settings-users/guac-settings-users.component.ts @@ -82,7 +82,7 @@ export class GuacSettingsUsersComponent implements OnInit { * The name of the new user to create, if any, when user creation * is requested via newUser(). */ - newUsername: string = ''; + newUsername = ''; /** * Map of data source identifiers to all permissions associated @@ -203,7 +203,7 @@ export class GuacSettingsUsersComponent implements OnInit { // For each user in each data source this.dataSources.forEach(dataSource => { - for (let username in allUsers[dataSource]) { + for (const username in allUsers[dataSource]) { const user = allUsers[dataSource][username]; // Do not add the same user twice @@ -320,7 +320,7 @@ export class GuacSettingsUsersComponent implements OnInit { return true; // For each data source - for (let dataSource in this.permissions) { + for (const dataSource in this.permissions) { // Retrieve corresponding permission set const permissionSet = this.permissions[dataSource]; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts index 14a5e4a9b6..d540953b92 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/settings/services/preference.service.ts @@ -34,7 +34,7 @@ import { Preferences } from '../types/Preferences'; /** * The storage key of Guacamole preferences within local storage. */ -const GUAC_PREFERENCES_STORAGE_KEY: string = 'GUAC_PREFERENCES'; +const GUAC_PREFERENCES_STORAGE_KEY = 'GUAC_PREFERENCES'; /** * A service for setting and retrieving browser-local preferences. Preferences diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts index 5ff1fa1b5d..9cd68fe222 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/local-storage.service.ts @@ -89,7 +89,7 @@ export class LocalStorageService { } catch (ignore) { } - }; + } /** * Retrieves the value currently stored within localStorage for the item @@ -126,6 +126,6 @@ export class LocalStorageService { // No value defined for given key return null; - }; + } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts index 2c0b8f396a..5fd72a2820 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/storage/session-storage-factory.service.ts @@ -138,7 +138,7 @@ export class SessionStorageFactory { }; - }; + } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts index 499541a7c5..858ca18ba9 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.spec.ts @@ -23,7 +23,7 @@ import { GuacFrontendEventArguments } from '../../events/types/GuacFrontendEventArguments'; import { KeyComponent } from './key.component'; -import { TranslocoTestingModule } from "@ngneat/transloco"; +import { TranslocoTestingModule } from '@ngneat/transloco'; describe('KeyComponent', () => { let component: KeyComponent; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts index ace1c2e7af..439a87d1cb 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-key/key.component.ts @@ -52,14 +52,14 @@ export class KeyComponent implements OnChanges { * * @default false */ - @Input() sticky: boolean = false; + @Input() sticky = false; /** * Whether this key is currently pressed. * * @default false */ - @Input() pressed: boolean = false; + @Input() pressed = false; @Output() pressedChange = new EventEmitter(); constructor(private guacEventService: GuacEventService) { @@ -90,7 +90,7 @@ export class KeyComponent implements OnChanges { // Prevent loss of focus due to interaction with buttons event.preventDefault(); - }; + } ngOnChanges(changes: SimpleChanges): void { // Send keyup/keydown when pressed state is altered diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts index 55350e1fa3..56186e9719 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/text-input/guac-text-input/text-input.component.ts @@ -100,13 +100,13 @@ export class TextInputComponent implements AfterViewInit { * Whether the "Alt" key is currently pressed within the text input * interface. */ - altPressed: boolean = false; + altPressed = false; /** * Whether the "Ctrl" key is currently pressed within the text * input interface. */ - ctrlPressed: boolean = false; + ctrlPressed = false; /** * ElementRef to the text area input target. @@ -123,13 +123,13 @@ export class TextInputComponent implements AfterViewInit { * attribute has no effect, but any bound property will be updated * as focus is gained or lost. */ - hasFocus: boolean = false; + hasFocus = false; /** * Whether composition is currently active within the text input * target element, such as when an IME is in use. */ - composingText: boolean = false; + composingText = false; /** * Inject required services. From 904706e6954348e5f6e7fc3da3fa08cfe9e00f4e Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 20:09:18 +0200 Subject: [PATCH 14/80] GUACAMOLE-1085: Add Module Federation to app --- .../src/main/guacamole-frontend/angular.json | 26 ++- .../main/guacamole-frontend/package-lock.json | 179 ++++++++++++++++-- .../src/main/guacamole-frontend/package.json | 5 +- .../src/assets/mf.manifest.json | 3 + .../guacamole-frontend/src/bootstrap.ts | 29 +++ .../projects/guacamole-frontend/src/main.ts | 14 +- .../guacamole-frontend/tsconfig.app.json | 23 ++- .../guacamole-frontend/webpack.config.js | 28 +++ .../guacamole-frontend/webpack.prod.config.js | 20 ++ .../src/main/guacamole-frontend/tsconfig.json | 1 - 10 files changed, 280 insertions(+), 48 deletions(-) create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/bootstrap.ts create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.config.js create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.prod.config.js diff --git a/guacamole/src/main/guacamole-frontend/angular.json b/guacamole/src/main/guacamole-frontend/angular.json index b116075dee..45cc7095ce 100644 --- a/guacamole/src/main/guacamole-frontend/angular.json +++ b/guacamole/src/main/guacamole-frontend/angular.json @@ -11,7 +11,7 @@ "prefix": "guac", "architect": { "build": { - "builder": "@angular-devkit/build-angular:browser", + "builder": "ngx-build-plus:browser", "options": { "outputPath": "dist/guacamole-frontend", "index": "projects/guacamole-frontend/src/index.html", @@ -48,7 +48,9 @@ "scripts": [ "./node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" ], - "preserveSymlinks": true + "preserveSymlinks": true, + "extraWebpackConfig": "projects/guacamole-frontend/webpack.config.js", + "commonChunk": false }, "configurations": { "production": { @@ -64,7 +66,8 @@ "maximumError": "9kb" } ], - "outputHashing": "all" + "outputHashing": "all", + "extraWebpackConfig": "projects/guacamole-frontend/webpack.prod.config.js" }, "development": { "buildOptimizer": false, @@ -78,21 +81,28 @@ "defaultConfiguration": "production" }, "serve": { - "builder": "@angular-devkit/build-angular:dev-server", + "builder": "ngx-build-plus:dev-server", "configurations": { "production": { - "browserTarget": "guacamole-frontend:build:production" + "browserTarget": "guacamole-frontend:build:production", + "extraWebpackConfig": "projects/guacamole-frontend/webpack.prod.config.js" }, "development": { "browserTarget": "guacamole-frontend:build:development" } }, - "defaultConfiguration": "development" + "defaultConfiguration": "development", + "options": { + "port": 4200, + "publicHost": "http://localhost:4200", + "extraWebpackConfig": "projects/guacamole-frontend/webpack.config.js" + } }, "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", + "builder": "ngx-build-plus:extract-i18n", "options": { - "browserTarget": "guacamole-frontend:build" + "browserTarget": "guacamole-frontend:build", + "extraWebpackConfig": "projects/guacamole-frontend/webpack.config.js" } }, "test": { diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index 2153db0658..c8b0f1091d 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "frontend", "version": "0.0.0", "dependencies": { + "@angular-architects/module-federation": "^16.0.4", "@angular/animations": "^16.1.1", "@angular/common": "^16.1.1", "@angular/compiler": "^16.1.1", @@ -51,11 +52,12 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", "ng-packagr": "^16.1.0", + "ngx-build-plus": "^16.0.0", "typescript": "~5.1.3" } }, "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { - "version": "0.0.0-watch+1687434580562", + "version": "0.0.1", "dependencies": { "tslib": "^2.3.0" }, @@ -87,6 +89,37 @@ "node": ">=6.0.0" } }, + "node_modules/@angular-architects/module-federation": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", + "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", + "dependencies": { + "@angular-architects/module-federation-runtime": "16.0.4", + "callsite": "^1.0.0", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "word-wrap": "^1.2.3" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser-dynamic": ">=16.0.0", + "rxjs": ">=6.6.3" + } + }, + "node_modules/@angular-architects/module-federation-runtime": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", + "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser-dynamic": ">=16.0.0" + } + }, "node_modules/@angular-devkit/architect": { "version": "0.1601.0", "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", @@ -5455,6 +5488,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "engines": { + "node": "*" + } + }, "node_modules/callsites": { "version": "3.1.0", "license": "MIT", @@ -6823,7 +6864,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -6833,7 +6873,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -10985,6 +11024,21 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/ngx-build-plus": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", + "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", + "dev": true, + "dependencies": { + "@angular-devkit/build-angular": "^16.0.0", + "@schematics/angular": "^16.0.0", + "webpack-merge": "^5.0.0" + }, + "peerDependencies": { + "@angular-devkit/build-angular": "^16.0.0", + "rxjs": ">= 6.0.0" + } + }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -11006,6 +11060,25 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -12976,7 +13049,7 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/sass": { @@ -13078,7 +13151,6 @@ }, "node_modules/semver": { "version": "7.3.8", - "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -13092,7 +13164,6 @@ }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -13103,7 +13174,6 @@ }, "node_modules/semver/node_modules/yallist": { "version": "4.0.0", - "dev": true, "license": "ISC" }, "node_modules/send": { @@ -14101,6 +14171,11 @@ "node": ">=0.8" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/tree-kill": { "version": "1.2.2", "dev": true, @@ -14538,6 +14613,11 @@ "defaults": "^1.0.3" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, "node_modules/webpack": { "version": "5.86.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", @@ -14825,6 +14905,15 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -14895,7 +14984,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -15100,6 +15188,26 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, + "@angular-architects/module-federation": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", + "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", + "requires": { + "@angular-architects/module-federation-runtime": "16.0.4", + "callsite": "^1.0.0", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "word-wrap": "^1.2.3" + } + }, + "@angular-architects/module-federation-runtime": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", + "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", + "requires": { + "tslib": "^2.0.0" + } + }, "@angular-devkit/architect": { "version": "0.1601.0", "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", @@ -18732,6 +18840,11 @@ "get-intrinsic": "^1.0.2" } }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==" + }, "callsites": { "version": "3.1.0" }, @@ -19707,7 +19820,6 @@ "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": { "iconv-lite": "^0.6.2" @@ -19717,7 +19829,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -22652,6 +22763,17 @@ } } }, + "ngx-build-plus": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", + "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", + "dev": true, + "requires": { + "@angular-devkit/build-angular": "^16.0.0", + "@schematics/angular": "^16.0.0", + "webpack-merge": "^5.0.0" + } + }, "nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -22669,6 +22791,14 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -24010,7 +24140,7 @@ }, "safer-buffer": { "version": "2.1.2", - "dev": true + "devOptional": true }, "sass": { "version": "1.63.2", @@ -24065,21 +24195,18 @@ }, "semver": { "version": "7.3.8", - "dev": true, "requires": { "lru-cache": "^6.0.0" }, "dependencies": { "lru-cache": { "version": "6.0.0", - "dev": true, "requires": { "yallist": "^4.0.0" } }, "yallist": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" } } }, @@ -24815,6 +24942,11 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "tree-kill": { "version": "1.2.2", "dev": true @@ -25086,6 +25218,11 @@ "defaults": "^1.0.3" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, "webpack": { "version": "5.86.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", @@ -25259,6 +25396,15 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -25316,8 +25462,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { "version": "7.0.0", diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index 0dcb41d836..52e8a6808d 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -6,10 +6,12 @@ "start": "ng serve", "build": "ng build", "test": "ng test", - "lint": "ng lint" + "lint": "ng lint", + "run:all": "node node_modules/@angular-architects/module-federation/src/server/mf-dev-server.js" }, "private": true, "dependencies": { + "@angular-architects/module-federation": "^16.0.4", "@angular/animations": "^16.1.1", "@angular/common": "^16.1.1", "@angular/compiler": "^16.1.1", @@ -53,6 +55,7 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.0.0", "ng-packagr": "^16.1.0", + "ngx-build-plus": "^16.0.0", "typescript": "~5.1.3" } } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json new file mode 100644 index 0000000000..360c4a8d71 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json @@ -0,0 +1,3 @@ +{ + "mfe1": "http://localhost:3000/remoteEntry.js" +} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/bootstrap.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/bootstrap.ts new file mode 100644 index 0000000000..9966db5900 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/bootstrap.ts @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ViewEncapsulation } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + + +platformBrowserDynamic().bootstrapModule(AppModule, { + defaultEncapsulation: ViewEncapsulation.None +}) + .catch(err => console.error(err)); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts index 573bb708e5..52164f3c84 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts @@ -17,13 +17,9 @@ * under the License. */ -import { ViewEncapsulation } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { initFederation } from '@angular-architects/module-federation'; -import { AppModule } from './app/app.module'; - - -platformBrowserDynamic().bootstrapModule(AppModule, { - defaultEncapsulation: ViewEncapsulation.None -}) - .catch(err => console.error(err)); +initFederation('/assets/mf.manifest.json') + .catch(err => console.error(err)) + .then(_ => import('./bootstrap')) + .catch(err => console.error(err)); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json index e4e0762dbc..6d515c16c8 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/tsconfig.app.json @@ -1,14 +1,13 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ { - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts" - ], - "include": [ - "src/**/*.d.ts" - ] + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.config.js b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.config.js new file mode 100644 index 0000000000..865b8b19a1 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.config.js @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const {shareAll, withModuleFederationPlugin} = require('@angular-architects/module-federation/webpack'); + +module.exports = withModuleFederationPlugin({ + + shared: { + ...shareAll({singleton: true, strictVersion: true, requiredVersion: 'auto'}), + }, + +}); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.prod.config.js b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.prod.config.js new file mode 100644 index 0000000000..95295c5b59 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/webpack.prod.config.js @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +module.exports = require('./webpack.config'); diff --git a/guacamole/src/main/guacamole-frontend/tsconfig.json b/guacamole/src/main/guacamole-frontend/tsconfig.json index f11f914659..d76e9be4c0 100644 --- a/guacamole/src/main/guacamole-frontend/tsconfig.json +++ b/guacamole/src/main/guacamole-frontend/tsconfig.json @@ -1,4 +1,3 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "compileOnSave": false, "exclude": [ From 2ea40e1803191e0e1f6fa78f3a1aeee27cf68bb3 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 21:24:50 +0200 Subject: [PATCH 15/80] GUACAMOLE-1085: Move the form field service to the extension library --- .../package-lock.json | 125 +- .../src/lib/form/FormField.ts | 54 + .../src/lib/form/FormFieldComponentData.ts | 67 + .../src/lib/form/field-type.service.ts | 63 + ...acamole-frontend-ext-lib.component.spec.ts | 40 - .../guacamole-frontend-ext-lib.component.ts | 34 - .../lib/guacamole-frontend-ext-lib.module.ts | 35 - ...guacamole-frontend-ext-lib.service.spec.ts | 35 - .../lib/guacamole-frontend-ext-lib.service.ts | 28 - .../src/public-api.ts | 6 +- .../main/guacamole-frontend/package-lock.json | 50799 ++++++++-------- .../src/main/guacamole-frontend/package.json | 1 + .../form-field-base.component.ts | 3 +- .../src/app/form/service/form.service.ts | 191 +- .../src/app/form/types/FieldType.ts | 46 - .../src/app/rest/types/Field.ts | 3 +- 16 files changed, 25795 insertions(+), 25735 deletions(-) create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts create mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json b/guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json index 2940142863..9dee34374a 100644 --- a/guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json +++ b/guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json @@ -302,12 +302,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.1.tgz", + "integrity": "sha512-s8LFr0m4ILEpJuQj78fCWKocnRleA3MWJU1Q5LZloCcUB8fdDvaPNCt5s0VWC2Sp+4OCxJaSN3kjjcFbCYFvTA==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.1.0", + "@angular-devkit/core": "16.1.1", "jsonc-parser": "3.2.0", "magic-string": "0.30.0", "ora": "5.4.1", @@ -319,6 +319,32 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", + "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, "node_modules/@angular/animations": { "version": "16.1.1", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", @@ -334,15 +360,15 @@ } }, "node_modules/@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.1.tgz", + "integrity": "sha512-QrTgMqMnamteZu2x3JhLMo6wBjI05zMr9RQfMHWq4UrUpTqBcHAMqJIKSSbvrtuRbolLrQyLorwxzlmEOfEmbQ==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", + "@angular-devkit/architect": "0.1601.1", + "@angular-devkit/core": "16.1.1", + "@angular-devkit/schematics": "16.1.1", + "@schematics/angular": "16.1.1", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -367,6 +393,47 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1601.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.1.tgz", + "integrity": "sha512-LUHaxdAZrvh++7/R+/hzVY5moEVVTjd30b25SNNYcNJsWox1Yh9idu1AvtEuZR/A8Jj+sbHnuw0176GsJ78stg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", + "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, "node_modules/@angular/common": { "version": "16.1.1", "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", @@ -3112,13 +3179,13 @@ } }, "node_modules/@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.1.tgz", + "integrity": "sha512-mJo7FxH3dekG7m4hHW5PyWbiCUaU+DSW93j+cikEksda+Qt6NaEX0hM0W3DjH7O+BnEg6dbAEd2GDSN/0XQghw==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", + "@angular-devkit/core": "16.1.1", + "@angular-devkit/schematics": "16.1.1", "jsonc-parser": "3.2.0" }, "engines": { @@ -3127,6 +3194,32 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", + "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, "node_modules/@sigstore/protobuf-specs": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts new file mode 100644 index 0000000000..80913ce911 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * An interface for the object returned by REST API calls when representing the data + * associated with a field or configuration parameter. + */ +export interface FormField { + + /** + * The name which uniquely identifies this parameter. + */ + name: string; + + /** + * The type string defining which values this parameter may contain, + * as well as what properties are applicable. + */ + type: string; + + /** + * All possible legal values for this parameter. + */ + options?: string[]; + + /** + * A message which can be translated using the translation service, + * consisting of a translation key and optional set of substitution + * variables. + */ + translatableMessage?: unknown; + + /** + * The URL to which the user should be redirected when a field of type + * REDIRECT is displayed. + */ + redirectUrl?: string; +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts new file mode 100644 index 0000000000..b42aba0670 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { FormField } from "./FormField"; +import { FormControl } from "@angular/forms"; + +/** + * An interface which defines the basic properties of a form field component. + * Used by the form service to generate form field components. + */ +export interface FormFieldComponentData { + + /** + * The translation namespace of the translation strings that will + * be generated for this field. This namespace is absolutely + * required. If this namespace is omitted, all generated + * translation strings will be placed within the MISSING_NAMESPACE + * namespace, as a warning. + */ + namespace: string | undefined; + + /** + * The field to display. + */ + field: FormField; + + /** + * The form control which contains this fields current value. When this + * field changes, the property will be updated accordingly. + */ + control?: FormControl; + + /** + * Whether this field should be rendered as disabled. By default, + * form fields are enabled. + */ + disabled: boolean; + + /** + * Whether this field should be focused. + */ + focused: boolean; + + /** + * An ID value which is reasonably likely to be unique relative to + * other elements on the page. This ID should be used to associate + * the relevant input element with the label provided by the + * guacFormField component, if there is such an input element. + */ + fieldId?: string; +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts new file mode 100644 index 0000000000..17665d730f --- /dev/null +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Injectable, Type } from '@angular/core'; +import { FormFieldComponentData } from "./FormFieldComponentData"; + +/** + * Service for managing all registered field types. + */ +@Injectable({ + providedIn: 'root' +}) +export class FieldTypeService { + + /** + * Map of all registered field type definitions by name. + */ + private fieldTypes: Record> = {}; + + /** + * Registers a new field type under the given name. + * + * @param fieldTypeName + * The name which uniquely identifies the field type being registered. + * + * @param component + * The component type to associate with the given name. + */ + registerFieldType(fieldTypeName: string, component: Type): void { + + // Store field type + this.fieldTypes[fieldTypeName] = component; + + } + + /** + * Returns the component associated with the given name, if any. + * + * @param fieldTypeName + * The name which uniquely identifies the field type to retrieve. + */ + getComponent(fieldTypeName: string): Type | null { + return this.fieldTypes[fieldTypeName] || null; + } + + +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts deleted file mode 100644 index cff796fefc..0000000000 --- a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { GuacamoleFrontendExtLibComponent } from './guacamole-frontend-ext-lib.component'; - -describe('GuacamoleFrontendExtLibComponent', () => { - let component: GuacamoleFrontendExtLibComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [GuacamoleFrontendExtLibComponent] - }); - fixture = TestBed.createComponent(GuacamoleFrontendExtLibComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts deleted file mode 100644 index 59bd1b47e2..0000000000 --- a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Component } from '@angular/core'; - -@Component({ - selector: 'guac-guacamole-frontend-ext-lib', - template: ` -

      - guacamole-frontend-ext-lib works! -

      - `, - styles: [ - ] -}) -export class GuacamoleFrontendExtLibComponent { - -} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts deleted file mode 100644 index d6555b5b6d..0000000000 --- a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.module.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { NgModule } from '@angular/core'; -import { GuacamoleFrontendExtLibComponent } from './guacamole-frontend-ext-lib.component'; - - - -@NgModule({ - declarations: [ - GuacamoleFrontendExtLibComponent - ], - imports: [ - ], - exports: [ - GuacamoleFrontendExtLibComponent - ] -}) -export class GuacamoleFrontendExtLibModule { } diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts deleted file mode 100644 index 9e04f8d400..0000000000 --- a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { TestBed } from '@angular/core/testing'; - -import { GuacamoleFrontendExtLibService } from './guacamole-frontend-ext-lib.service'; - -describe('GuacamoleFrontendExtLibService', () => { - let service: GuacamoleFrontendExtLibService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(GuacamoleFrontendExtLibService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts deleted file mode 100644 index cad79c1cd9..0000000000 --- a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/guacamole-frontend-ext-lib.service.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Injectable } from '@angular/core'; - -@Injectable({ - providedIn: 'root' -}) -export class GuacamoleFrontendExtLibService { - - constructor() { } -} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts index fa688b1524..484716e9da 100644 --- a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts +++ b/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts @@ -21,6 +21,6 @@ * Public API Surface of guacamole-frontend-ext-lib */ -export * from './lib/guacamole-frontend-ext-lib.service'; -export * from './lib/guacamole-frontend-ext-lib.component'; -export * from './lib/guacamole-frontend-ext-lib.module'; +export * from './lib/form/FormField'; +export * from './lib/form/FormFieldComponentData'; +export * from './lib/form/field-type.service'; diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index c8b0f1091d..36c96bcd46 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -1,25591 +1,25612 @@ { - "name": "frontend", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "frontend", - "version": "0.0.0", - "dependencies": { - "@angular-architects/module-federation": "^16.0.4", - "@angular/animations": "^16.1.1", - "@angular/common": "^16.1.1", - "@angular/compiler": "^16.1.1", - "@angular/core": "^16.1.1", - "@angular/forms": "^16.1.1", - "@angular/platform-browser": "^16.1.1", - "@angular/platform-browser-dynamic": "^16.1.1", - "@angular/router": "^16.1.1", - "@ngneat/transloco": "^4.2.2", - "@ngneat/transloco-messageformat": "^4.1.0", - "@simonwep/pickr": "^1.8.2", - "angular-expressions": "^1.1.9", - "file-saver": "^2.0.5", - "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "jstz": "^2.1.1", - "lodash": "^4.17.21", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular-eslint/builder": "16.0.3", - "@angular-eslint/eslint-plugin": "16.0.3", - "@angular-eslint/eslint-plugin-template": "16.0.3", - "@angular-eslint/schematics": "16.0.3", - "@angular-eslint/template-parser": "16.0.3", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.1", - "@types/file-saver": "^2.0.5", - "@types/jasmine": "~4.3.0", - "@types/lodash": "^4.14.194", - "@typescript-eslint/eslint-plugin": "5.59.7", - "@typescript-eslint/parser": "5.59.7", - "cypress": "^12.15.0", - "eslint": "^8.40.0", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-coverage": "~2.2.0", - "karma-firefox-launcher": "~2.1.2", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "ng-packagr": "^16.1.0", - "ngx-build-plus": "^16.0.0", - "typescript": "~5.1.3" - } - }, - "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { - "version": "0.0.1", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^16.1.0", - "@angular/core": "^16.1.0" - } - }, - "../ngx-guacamole/dist/ngx-guacamole": { - "version": "0.0.1", - "extraneous": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^15.2.0", - "@angular/core": "^15.2.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-architects/module-federation": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", - "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", - "dependencies": { - "@angular-architects/module-federation-runtime": "16.0.4", - "callsite": "^1.0.0", - "node-fetch": "^2.6.7", - "semver": "^7.3.5", - "word-wrap": "^1.2.3" - }, - "peerDependencies": { - "@angular/common": ">=16.0.0", - "@angular/core": ">=16.0.0", - "@angular/platform-browser-dynamic": ">=16.0.0", - "rxjs": ">=6.6.3" - } - }, - "node_modules/@angular-architects/module-federation-runtime": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", - "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": ">=16.0.0", - "@angular/core": ">=16.0.0", - "@angular/platform-browser-dynamic": ">=16.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.17.19" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "@angular/localize": "^16.1.0", - "@angular/platform-server": "^16.1.0", - "@angular/service-worker": "^16.1.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^16.1.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@angular-architects/module-federation": "^16.0.4", + "@angular/animations": "^16.1.1", + "@angular/common": "^16.1.1", + "@angular/compiler": "^16.1.1", + "@angular/core": "^16.1.1", + "@angular/forms": "^16.1.1", + "@angular/platform-browser": "^16.1.1", + "@angular/platform-browser-dynamic": "^16.1.1", + "@angular/router": "^16.1.1", + "@ngneat/transloco": "^4.2.2", + "@ngneat/transloco-messageformat": "^4.1.0", + "@simonwep/pickr": "^1.8.2", + "angular-expressions": "^1.1.9", + "file-saver": "^2.0.5", + "guacamole-frontend-ext-lib": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", + "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "jstz": "^2.1.1", + "lodash": "^4.17.21", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.0", + "@angular-eslint/builder": "16.0.3", + "@angular-eslint/eslint-plugin": "16.0.3", + "@angular-eslint/eslint-plugin-template": "16.0.3", + "@angular-eslint/schematics": "16.0.3", + "@angular-eslint/template-parser": "16.0.3", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "^16.1.1", + "@types/file-saver": "^2.0.5", + "@types/jasmine": "~4.3.0", + "@types/lodash": "^4.14.194", + "@typescript-eslint/eslint-plugin": "5.59.7", + "@typescript-eslint/parser": "5.59.7", + "cypress": "^12.15.0", + "eslint": "^8.40.0", + "jasmine-core": "~4.5.0", + "karma": "~6.4.0", + "karma-coverage": "~2.2.0", + "karma-firefox-launcher": "~2.1.2", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "ng-packagr": "^16.1.0", + "ngx-build-plus": "^16.0.0", + "typescript": "~5.1.3" + } }, - "karma": { - "optional": true + "../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib": { + "version": "0.0.1", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + } }, - "ng-packagr": { - "optional": true + "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { + "version": "0.0.1", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + } }, - "protractor": { - "optional": true + "../ngx-guacamole/dist/ngx-guacamole": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^15.2.0", + "@angular/core": "^15.2.0" + } }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/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 - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-eslint/builder": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", - "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", - "dev": true, - "dependencies": { - "@nx/devkit": "16.2.2", - "nx": "16.2.2" - }, - "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", - "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", - "dev": true - }, - "node_modules/@angular-eslint/eslint-plugin": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", - "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", - "dev": true, - "dependencies": { - "@angular-eslint/utils": "16.0.3", - "@typescript-eslint/utils": "5.59.7" - }, - "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", - "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", - "dev": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "@angular-eslint/utils": "16.0.3", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "aria-query": "5.1.3", - "axobject-query": "3.1.1" - }, - "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/schematics": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", - "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", - "dev": true, - "dependencies": { - "@angular-eslint/eslint-plugin": "16.0.3", - "@angular-eslint/eslint-plugin-template": "16.0.3", - "@nx/devkit": "16.2.2", - "ignore": "5.2.4", - "nx": "16.2.2", - "strip-json-comments": "3.1.1", - "tmp": "0.2.1" - }, - "peerDependencies": { - "@angular/cli": ">= 16.0.0 < 17.0.0" - } - }, - "node_modules/@angular-eslint/schematics/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/@angular-eslint/template-parser": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", - "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", - "dev": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "eslint-scope": "^7.0.0" - }, - "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@angular-eslint/template-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@angular-eslint/utils": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", - "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", - "dev": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "@typescript-eslint/utils": "5.59.7" - }, - "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", - "typescript": "*" - } - }, - "node_modules/@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - } - }, - "node_modules/@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/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 - }, - "node_modules/@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "dependencies": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler": "16.1.1", - "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.1.1", - "@angular/common": "16.1.1", - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/compiler": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1" - } - }, - "node_modules/@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "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": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@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-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/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/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/request/node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/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/@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/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==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@messageformat/core": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "node_modules/@messageformat/date-skeleton": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/@messageformat/number-skeleton": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@messageformat/parser": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "moo": "^0.5.1" - } - }, - "node_modules/@messageformat/runtime": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "make-plural": "^7.0.0" - } - }, - "node_modules/@ngneat/transloco": { - "version": "4.2.2", - "license": "MIT", - "dependencies": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-messageformat": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "@ngneat/transloco": ">=4.2.0", - "rxjs": ">=6.0.0" - } - }, - "node_modules/@ngneat/transloco-utils": { - "version": "3.0.5", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "typescript": ">=4.9.3 <5.2", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/devkit": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", - "dev": true, - "dependencies": { - "@nx/devkit": "16.2.2" - } - }, - "node_modules/@nrwl/tao": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", - "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", - "dev": true, - "dependencies": { - "nx": "16.2.2" - }, - "bin": { - "tao": "index.js" - } - }, - "node_modules/@nx/devkit": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", - "dev": true, - "dependencies": { - "@nrwl/devkit": "16.2.2", - "ejs": "^3.1.7", - "ignore": "^5.0.4", - "semver": "7.3.4", - "tmp": "~0.2.1", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "nx": ">= 15 <= 17" - } - }, - "node_modules/@nx/devkit/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nx/devkit/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/@nx/devkit/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/@nx/devkit/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 - }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", - "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-darwin-x64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", - "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", - "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", - "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", - "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", - "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", - "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", - "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", - "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@simonwep/pickr": { - "version": "1.8.2", - "license": "MIT", - "dependencies": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/file-saver": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.194", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.16.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", - "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "dev": true, - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" - } - }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@zkochan/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "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 - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/angular-expressions": { - "version": "1.1.9", - "license": "Unlicense" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "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/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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 - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "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, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/babel-loader": { - "version": "9.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "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/base64id": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "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", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "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 - }, - "node_modules/body-parser": { - "version": "1.20.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "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.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.8.0", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "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, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "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, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "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, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js": { - "version": "3.30.2", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.1.3", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "node_modules/custom-event": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cypress": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^14.0.0 || ^16.0.0 || >=18.0.0" - } - }, - "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", - "dev": true - }, - "node_modules/cypress/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/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/cypress/node_modules/chalk/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/cypress/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/cypress/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/cypress/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/cypress/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/cypress/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/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/cypress/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/cypress/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, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/cypress/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/cypress/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/cypress/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/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/date-format": { - "version": "4.0.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/dayjs": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "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==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/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/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/eslint/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/eslint/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/eslint/node_modules/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/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==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/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==", - "dev": true - }, - "node_modules/eslint/node_modules/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==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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/eslint/node_modules/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==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/executable/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "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, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/guacamole-frontend-lib": { - "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "link": true - }, - "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 - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/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/inquirer/node_modules/chalk": { - "version": "4.1.2", - "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/inquirer/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/inquirer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "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": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/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/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/jake/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/jake/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/jake/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/jake/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/jasmine-core": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/jstz": { - "version": "2.1.1", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/karma": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "dependencies": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - } - }, - "node_modules/karma-firefox-launcher/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/karma-jasmine": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, - "node_modules/less": { - "version": "4.1.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "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/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "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", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "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/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/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/log-update/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/log-update/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/log-update/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, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-plural": { - "version": "7.3.0", - "license": "Unicode-DFS-2016" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "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 - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect/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 - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/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 - }, - "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, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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 - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moo": { - "version": "0.5.2", - "license": "BSD-3-Clause" - }, - "node_modules/mrmime": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanopop": { - "version": "2.3.0", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/needle": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "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/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "dependencies": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "bin": { - "ng-packagr": "cli/main.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "optionalDependencies": { - "esbuild": "^0.17.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "tslib": "^2.3.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/ng-packagr/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/ngx-build-plus": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", - "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", - "dev": true, - "dependencies": { - "@angular-devkit/build-angular": "^16.0.0", - "@schematics/angular": "^16.0.0", - "webpack-merge": "^5.0.0" - }, - "peerDependencies": { - "@angular-devkit/build-angular": "^16.0.0", - "rxjs": ">= 6.0.0" - } - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "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==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nx": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", - "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@nrwl/tao": "16.2.2", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "16.2.2", - "@nx/nx-darwin-x64": "16.2.2", - "@nx/nx-linux-arm-gnueabihf": "16.2.2", - "@nx/nx-linux-arm64-gnu": "16.2.2", - "@nx/nx-linux-arm64-musl": "16.2.2", - "@nx/nx-linux-x64-gnu": "16.2.2", - "@nx/nx-linux-x64-musl": "16.2.2", - "@nx/nx-win32-arm64-msvc": "16.2.2", - "@nx/nx-win32-x64-msvc": "16.2.2" - }, - "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/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/nx/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/nx/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/nx/node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nx/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/nx/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/nx/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/nx/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nx/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/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/nx/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/nx/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, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/nx/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/nx/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/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/nx/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/nx/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/nx/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/nx/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 - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "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 - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "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/ora/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, - "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/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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 - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.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 - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "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, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "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, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "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 - }, - "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 - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "dev": true, - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/replace-in-file": { - "version": "6.3.5", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/replace-in-file/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/replace-in-file/node_modules/chalk": { - "version": "4.1.2", - "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/replace-in-file/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/replace-in-file/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/replace-in-file/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/replace-in-file/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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/restore-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.21.5", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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/@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-architects/module-federation": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", + "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", + "dependencies": { + "@angular-architects/module-federation-runtime": "16.0.4", + "callsite": "^1.0.0", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "word-wrap": "^1.2.3" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser-dynamic": ">=16.0.0", + "rxjs": ">=6.6.3" + } + }, + "node_modules/@angular-architects/module-federation-runtime": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", + "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser-dynamic": ">=16.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "@angular/localize": "^16.1.0", + "@angular/platform-server": "^16.1.0", + "@angular/service-worker": "^16.1.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.1.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/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 + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-eslint/builder": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", + "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "16.2.2", + "nx": "16.2.2" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", + "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", + "dev": true + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", + "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", + "dev": true, + "dependencies": { + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", + "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "aria-query": "5.1.3", + "axobject-query": "3.1.1" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", + "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", + "dev": true, + "dependencies": { + "@angular-eslint/eslint-plugin": "16.0.3", + "@angular-eslint/eslint-plugin-template": "16.0.3", + "@nx/devkit": "16.2.2", + "ignore": "5.2.4", + "nx": "16.2.2", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1" + }, + "peerDependencies": { + "@angular/cli": ">= 16.0.0 < 17.0.0" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", + "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "eslint-scope": "^7.0.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@angular-eslint/utils": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", + "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/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 + }, + "node_modules/@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.1", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1" + } + }, + "node_modules/@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.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.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/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/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@messageformat/core": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "node_modules/@messageformat/date-skeleton": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@messageformat/number-skeleton": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/@messageformat/parser": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "moo": "^0.5.1" + } + }, + "node_modules/@messageformat/runtime": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "make-plural": "^7.0.0" + } + }, + "node_modules/@ngneat/transloco": { + "version": "4.2.2", + "license": "MIT", + "dependencies": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-messageformat": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": ">=13.0.0", + "@ngneat/transloco": ">=4.2.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ngneat/transloco-utils": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", + "dev": true, + "dependencies": { + "@nx/devkit": "16.2.2" + } + }, + "node_modules/@nrwl/tao": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", + "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", + "dev": true, + "dependencies": { + "nx": "16.2.2" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "16.2.2", + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.3.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 15 <= 17" + } + }, + "node_modules/@nx/devkit/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nx/devkit/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/@nx/devkit/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/@nx/devkit/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 + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", + "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", + "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", + "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", + "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", + "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", + "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", + "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", + "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", + "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.194", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", + "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", + "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", + "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", + "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", + "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", + "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", + "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", + "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/angular-expressions": { + "version": "1.1.9", + "license": "Unlicense" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "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/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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 + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "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, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "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/base64id": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "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 + }, + "node_modules/body-parser": { + "version": "1.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "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.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.8.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "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, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js": { + "version": "3.30.2", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress": { + "version": "12.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", + "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^14.0.0 || ^16.0.0 || >=18.0.0" + } + }, + "node_modules/cypress/node_modules/@types/node": { + "version": "14.18.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", + "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "dev": true + }, + "node_modules/cypress/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/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/cypress/node_modules/chalk/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/cypress/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/cypress/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/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/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/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/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, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cypress/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/cypress/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/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-format": { + "version": "4.0.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "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==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/es-module-lexer": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/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/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/eslint/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/eslint/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/eslint/node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/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==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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==", + "dev": true + }, + "node_modules/eslint/node_modules/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==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/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==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "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, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/guacamole-frontend-ext-lib": { + "resolved": "../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", + "link": true + }, + "node_modules/guacamole-frontend-lib": { + "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "link": true + }, + "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 + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/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/inquirer/node_modules/chalk": { + "version": "4.1.2", + "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/inquirer/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/inquirer/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "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": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jake/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/jake/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/jake/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/jake/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/jasmine-core": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jstz": { + "version": "2.1.1", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/karma": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "dependencies": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + } + }, + "node_modules/karma-firefox-launcher/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/karma-jasmine": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/less": { + "version": "4.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "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/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "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", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "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/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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/log-update/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/log-update/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/log-update/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, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-plural": { + "version": "7.3.0", + "license": "Unicode-DFS-2016" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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 + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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 + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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 + }, + "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, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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 + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "license": "BSD-3-Clause" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanopop": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/needle": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "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/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "dependencies": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.17.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/ngx-build-plus": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", + "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", + "dev": true, + "dependencies": { + "@angular-devkit/build-angular": "^16.0.0", + "@schematics/angular": "^16.0.0", + "webpack-merge": "^5.0.0" + }, + "peerDependencies": { + "@angular-devkit/build-angular": "^16.0.0", + "rxjs": ">= 6.0.0" + } + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nx": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", + "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nrwl/tao": "16.2.2", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "16.2.2", + "@nx/nx-darwin-x64": "16.2.2", + "@nx/nx-linux-arm-gnueabihf": "16.2.2", + "@nx/nx-linux-arm64-gnu": "16.2.2", + "@nx/nx-linux-arm64-musl": "16.2.2", + "@nx/nx-linux-x64-gnu": "16.2.2", + "@nx/nx-linux-x64-musl": "16.2.2", + "@nx/nx-win32-arm64-msvc": "16.2.2", + "@nx/nx-win32-x64-msvc": "16.2.2" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/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/nx/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/nx/node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nx/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/nx/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/nx/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/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/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/nx/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/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, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/nx/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/nx/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/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/nx/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/nx/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/nx/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/nx/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 + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "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 + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "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/ora/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "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/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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 + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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 + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "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, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "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, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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 + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/replace-in-file": { + "version": "6.3.5", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/replace-in-file/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "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/replace-in-file/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/replace-in-file/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/replace-in-file/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/replace-in-file/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.21.5", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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/safe-identifier": { + "version": "0.4.2", + "license": "ISC" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "devOptional": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "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": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/tar/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 + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "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 + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "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, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "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 + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vite": { + "version": "4.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "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/wrap-ansi-cjs": { + "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "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", + "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", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.13.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + } } - ], - "license": "MIT" - }, - "node_modules/safe-identifier": { - "version": "0.4.2", - "license": "ISC" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "devOptional": true, - "license": "MIT" }, - "node_modules/sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-architects/module-federation": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", + "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", + "requires": { + "@angular-architects/module-federation-runtime": "16.0.4", + "callsite": "^1.0.0", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "word-wrap": "^1.2.3" + } + }, + "@angular-architects/module-federation-runtime": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", + "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular-devkit/architect": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", + "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/build-angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", + "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", + "dev": true, + "requires": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/build-webpack": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.0", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.7", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.18", + "css-loader": "6.8.1", + "esbuild": "0.17.19", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "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" + } + }, + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1601.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", + "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", + "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "@angular-devkit/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + } + }, + "@angular-eslint/builder": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", + "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", + "dev": true, + "requires": { + "@nx/devkit": "16.2.2", + "nx": "16.2.2" + } + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", + "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", + "dev": true + }, + "@angular-eslint/eslint-plugin": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", + "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", + "dev": true, + "requires": { + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + } + }, + "@angular-eslint/eslint-plugin-template": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", + "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@angular-eslint/utils": "16.0.3", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "aria-query": "5.1.3", + "axobject-query": "3.1.1" + } + }, + "@angular-eslint/schematics": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", + "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", + "dev": true, + "requires": { + "@angular-eslint/eslint-plugin": "16.0.3", + "@angular-eslint/eslint-plugin-template": "16.0.3", + "@nx/devkit": "16.2.2", + "ignore": "5.2.4", + "nx": "16.2.2", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1" + }, + "dependencies": { + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, + "@angular-eslint/template-parser": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", + "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "eslint-scope": "^7.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "@angular-eslint/utils": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", + "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", + "dev": true, + "requires": { + "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@typescript-eslint/utils": "5.59.7" + } + }, + "@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/cli": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.0", + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "@schematics/angular": "16.1.0", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "requires": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + } + }, + "@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.5", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "dev": true + }, + "@babel/core": { + "version": "7.21.8", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "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 + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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" + } + }, + "@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" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true + }, + "@cypress/request": { + "version": "2.88.11", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", + "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.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" + } + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@messageformat/core": { + "version": "3.1.0", + "requires": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.0.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "@messageformat/date-skeleton": { + "version": "1.0.1" + }, + "@messageformat/number-skeleton": { + "version": "1.2.0" + }, + "@messageformat/parser": { + "version": "5.0.0", + "requires": { + "moo": "^0.5.1" + } + }, + "@messageformat/runtime": { + "version": "3.0.1", + "requires": { + "make-plural": "^7.0.0" + } + }, + "@ngneat/transloco": { + "version": "4.2.2", + "requires": { + "@ngneat/transloco-utils": "^3.0.1", + "flat": "5.0.2", + "lodash.kebabcase": "^4.1.1", + "ora": "^5.4.1", + "replace-in-file": "^6.2.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-messageformat": { + "version": "4.1.0", + "requires": { + "@messageformat/core": "^3.0.0", + "tslib": "^2.2.0" + } + }, + "@ngneat/transloco-utils": { + "version": "3.0.5", + "requires": { + "cosmiconfig": "^8.1.3", + "tslib": "^2.3.0" + } + }, + "@ngtools/webpack": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", + "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@nrwl/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", + "dev": true, + "requires": { + "@nx/devkit": "16.2.2" + } + }, + "@nrwl/tao": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", + "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", + "dev": true, + "requires": { + "nx": "16.2.2" + } + }, + "@nx/devkit": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", + "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", + "dev": true, + "requires": { + "@nrwl/devkit": "16.2.2", + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.3.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@nx/nx-darwin-arm64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", + "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", + "dev": true, + "optional": true + }, + "@nx/nx-darwin-x64": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", + "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-arm-gnueabihf": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", + "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-arm64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", + "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-arm64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", + "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-x64-gnu": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", + "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", + "dev": true, + "optional": true + }, + "@nx/nx-linux-x64-musl": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", + "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", + "dev": true, + "optional": true + }, + "@nx/nx-win32-arm64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", + "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", + "dev": true, + "optional": true + }, + "@nx/nx-win32-x64-msvc": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", + "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "requires": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@rollup/plugin-json": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", + "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@schematics/angular": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", + "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.0", + "@angular-devkit/schematics": "16.1.0", + "jsonc-parser": "3.2.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true + }, + "@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "@simonwep/pickr": { + "version": "1.8.2", + "requires": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "dev": true + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/cookie": { + "version": "0.4.1", + "dev": true + }, + "@types/cors": { + "version": "2.8.13", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.37.0", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/file-saver": { + "version": "2.0.5", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "4.3.1", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/lodash": { + "version": "4.14.194", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "18.16.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", + "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", + "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", + "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", + "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", + "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", + "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", + "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", + "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.7", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.5", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.5", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.5", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true + }, + "@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "requires": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + } + }, + "@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } + } + }, + "abab": { + "version": "2.0.6", + "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.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.2", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "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", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "angular-expressions": { + "version": "1.1.9" + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "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 + }, + "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 + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "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": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "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 + }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + } + } + }, + "axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + } + }, + "babel-loader": { + "version": "9.1.2", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "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 + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "base64id": { + "version": "2.0.0", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bl": { + "version": "4.1.0", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.20.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer": { + "version": "5.7.1", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==" + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "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.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.3", + "dev": true + }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "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", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.8.0" + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cli-width": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4" + }, + "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", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "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": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "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" + } + }, + "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", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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" + }, + "connect": { + "version": "3.7.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "core-js": { + "version": "3.30.2" + }, + "core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "8.1.3", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1" + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "critters": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", + "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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 + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "dev": true + }, + "cypress": { + "version": "12.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", + "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "dev": true, + "requires": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "14.18.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", + "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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 + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "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" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-format": { + "version": "4.0.14", + "dev": true + }, + "dayjs": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", + "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-equal": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "di": { + "version": "0.0.1", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serialize": { + "version": "2.2.1", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.434", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", + "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0" + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "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" + } + }, + "engine.io": { + "version": "6.4.2", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + } + }, + "engine.io-parser": { + "version": "5.0.6", + "dev": true + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "ent": { + "version": "2.2.0", + "dev": true + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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": "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 + }, + "errno": { + "version": "0.1.8", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "es-module-lexer": { + "version": "1.2.1", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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==", + "dev": true + }, + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "p-locate": "^5.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==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.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==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-saver": { + "version": "2.0.5" + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2" + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "dev": true + }, + "follow-redirects": { + "version": "1.15.2", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "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", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.2.0", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "13.1.4", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "guacamole-frontend-ext-lib": { + "version": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", + "requires": { + "tslib": "^2.3.0" + } + }, + "guacamole-frontend-lib": { + "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", + "requires": { + "tslib": "^2.3.0" + } + }, + "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 + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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" + } + } + } + }, + "html-entities": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", + "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.2.4", + "dev": true + }, + "ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "image-size": { + "version": "0.5.5", + "dev": true, + "optional": true + }, + "immutable": { + "version": "4.3.0", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0" + } + } }, - "sass": { - "optional": true + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "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, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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/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/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "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/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "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": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/tar/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 - }, - "node_modules/terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": 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 }, - "esbuild": { - "optional": true + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "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 - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "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, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "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 - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "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==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/vite": { - "version": "4.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true + "inherits": { + "version": "2.0.4" }, - "less": { - "optional": true + "ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true }, - "sass": { - "optional": true + "injection-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", + "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } }, - "stylus": { - "optional": true + "inquirer": { + "version": "8.2.4", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "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" + } + } + } }, - "sugarss": { - "optional": true + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.12.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-interactive": { + "version": "1.0.0" + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "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.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0" + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "is-what": { + "version": "3.14.1", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + } + } + }, + "jasmine-core": { + "version": "4.5.0", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "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/wrap-ansi-cjs": { - "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "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", - "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", - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.11.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.13.0", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-architects/module-federation": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", - "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", - "requires": { - "@angular-architects/module-federation-runtime": "16.0.4", - "callsite": "^1.0.0", - "node-fetch": "^2.6.7", - "semver": "^7.3.5", - "word-wrap": "^1.2.3" - } - }, - "@angular-architects/module-federation-runtime": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", - "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", - "requires": { - "tslib": "^2.0.0" - } - }, - "@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "requires": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild": "0.17.19", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "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 - } - } + "json-schema-traverse": { + "version": "1.0.0", + "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" - } + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, - "semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "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 - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - } - }, - "@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - } - }, - "@angular-eslint/builder": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", - "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", - "dev": true, - "requires": { - "@nx/devkit": "16.2.2", - "nx": "16.2.2" - } - }, - "@angular-eslint/bundled-angular-compiler": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", - "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", - "dev": true - }, - "@angular-eslint/eslint-plugin": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", - "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", - "dev": true, - "requires": { - "@angular-eslint/utils": "16.0.3", - "@typescript-eslint/utils": "5.59.7" - } - }, - "@angular-eslint/eslint-plugin-template": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", - "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", - "dev": true, - "requires": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "@angular-eslint/utils": "16.0.3", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "aria-query": "5.1.3", - "axobject-query": "3.1.1" - } - }, - "@angular-eslint/schematics": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", - "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", - "dev": true, - "requires": { - "@angular-eslint/eslint-plugin": "16.0.3", - "@angular-eslint/eslint-plugin-template": "16.0.3", - "@nx/devkit": "16.2.2", - "ignore": "5.2.4", - "nx": "16.2.2", - "strip-json-comments": "3.1.1", - "tmp": "0.2.1" - }, - "dependencies": { - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - } - } - }, - "@angular-eslint/template-parser": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", - "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", - "dev": true, - "requires": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "eslint-scope": "^7.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } + "json5": { + "version": "2.2.3", + "dev": true }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "@angular-eslint/utils": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", - "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", - "dev": true, - "requires": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "@typescript-eslint/utils": "5.59.7" - } - }, - "@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "dependencies": { - "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" - } + "jsonc-parser": { + "version": "3.2.0", + "dev": true }, - "semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "requires": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.22.5", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "dev": true - }, - "@babel/core": { - "version": "7.21.8", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "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 - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@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" - } - }, - "@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" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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" - } - }, - "@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-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "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 - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "dev": true - }, - "@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "lodash.once": "^4.1.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" - } - } - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true - }, - "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "dev": true, - "optional": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jstz": { + "version": "2.1.1" + }, + "karma": { + "version": "6.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "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.9", + "dev": true + } + } + }, + "karma-coverage": { + "version": "2.2.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + } + }, + "karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", + "dev": true, + "requires": { + "is-wsl": "^2.2.0", + "which": "^2.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "karma-jasmine": { + "version": "5.1.0", + "dev": true, + "requires": { + "jasmine-core": "^4.1.0" + } + }, + "karma-jasmine-html-reporter": { + "version": "2.0.0", + "dev": true, + "requires": {} + }, + "karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "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 }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "klona": { + "version": "2.0.6", + "dev": true }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "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==", - "dev": true + "less": { + "version": "4.1.3", + "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", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mime": { + "version": "1.6.0", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + } + } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@eslint/js": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "less-loader": { + "version": "11.1.0", + "dev": true, + "requires": { + "klona": "^2.0.4" + } }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } + "lines-and-columns": { + "version": "1.2.4" }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.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" + } + }, + "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 + }, + "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", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "log4js": { + "version": "6.9.1", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + } }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.3", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true - } - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@messageformat/core": { - "version": "3.1.0", - "requires": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.0.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" - } - }, - "@messageformat/date-skeleton": { - "version": "1.0.1" - }, - "@messageformat/number-skeleton": { - "version": "1.2.0" - }, - "@messageformat/parser": { - "version": "5.0.0", - "requires": { - "moo": "^0.5.1" - } - }, - "@messageformat/runtime": { - "version": "3.0.1", - "requires": { - "make-plural": "^7.0.0" - } - }, - "@ngneat/transloco": { - "version": "4.2.2", - "requires": { - "@ngneat/transloco-utils": "^3.0.1", - "flat": "5.0.2", - "lodash.kebabcase": "^4.1.1", - "ora": "^5.4.1", - "replace-in-file": "^6.2.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-messageformat": { - "version": "4.1.0", - "requires": { - "@messageformat/core": "^3.0.0", - "tslib": "^2.2.0" - } - }, - "@ngneat/transloco-utils": { - "version": "3.0.5", - "requires": { - "cosmiconfig": "^8.1.3", - "tslib": "^2.3.0" - } - }, - "@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "requires": {} - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "requires": { - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "dependencies": { - "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@nrwl/devkit": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", - "dev": true, - "requires": { - "@nx/devkit": "16.2.2" - } - }, - "@nrwl/tao": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", - "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", - "dev": true, - "requires": { - "nx": "16.2.2" - } - }, - "@nx/devkit": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", - "dev": true, - "requires": { - "@nrwl/devkit": "16.2.2", - "ejs": "^3.1.7", - "ignore": "^5.0.4", - "semver": "7.3.4", - "tmp": "~0.2.1", - "tslib": "^2.3.0" - }, - "dependencies": { "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" - } + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } }, - "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" - } + "magic-string": { + "version": "0.30.0", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "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 - } - } - }, - "@nx/nx-darwin-arm64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", - "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", - "dev": true, - "optional": true - }, - "@nx/nx-darwin-x64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", - "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm-gnueabihf": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", - "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", - "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", - "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-x64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", - "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-x64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", - "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", - "dev": true, - "optional": true - }, - "@nx/nx-win32-arm64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", - "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", - "dev": true, - "optional": true - }, - "@nx/nx-win32-x64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", - "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", - "dev": true, - "optional": true - }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1" - } - }, - "@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "jsonc-parser": "3.2.0" - } - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true - }, - "@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - } - }, - "@simonwep/pickr": { - "version": "1.8.2", - "requires": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true - }, - "@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "make-plural": { + "version": "7.3.0" + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, + "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 + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "dev": true + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.6", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moo": { + "version": "0.5.2" + }, + "mrmime": { + "version": "1.0.1", + "dev": true + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "dev": true + }, + "nanopop": { + "version": "2.3.0" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "needle": { + "version": "3.2.0", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "ng-packagr": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", + "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", + "dev": true, + "requires": { + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "ajv": "^8.11.0", + "ansi-colors": "^4.1.3", + "autoprefixer": "^10.4.12", + "browserslist": "^4.21.4", + "cacache": "^17.0.0", + "chokidar": "^3.5.3", + "commander": "^10.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^0.11.0", + "esbuild": "^0.17.0", + "esbuild-wasm": "^0.17.0", + "fast-glob": "^3.2.12", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.1.3", + "ora": "^5.1.0", + "piscina": "^3.2.0", + "postcss": "^8.4.16", + "postcss-url": "^10.1.3", + "rollup": "^3.0.0", + "rxjs": "^7.5.6", + "sass": "^1.55.0" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + } + } + }, + "ngx-build-plus": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", + "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", + "dev": true, + "requires": { + "@angular-devkit/build-angular": "^16.0.0", + "@schematics/angular": "^16.0.0", + "webpack-merge": "^5.0.0" + } + }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nx": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", + "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", + "dev": true, + "requires": { + "@nrwl/tao": "16.2.2", + "@nx/nx-darwin-arm64": "16.2.2", + "@nx/nx-darwin-x64": "16.2.2", + "@nx/nx-linux-arm-gnueabihf": "16.2.2", + "@nx/nx-linux-arm64-gnu": "16.2.2", + "@nx/nx-linux-arm64-musl": "16.2.2", + "@nx/nx-linux-x64-gnu": "16.2.2", + "@nx/nx-linux-x64-musl": "16.2.2", + "@nx/nx-win32-arm64-msvc": "16.2.2", + "@nx/nx-win32-x64-msvc": "16.2.2", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "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" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "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 + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "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" + } + }, + "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 + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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" + } + }, + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "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" + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "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" + } + }, + "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" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "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 + } + } + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "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.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "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.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "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", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.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" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "7.0.0", + "dev": true, + "requires": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/cookie": { - "version": "0.4.1", - "dev": true - }, - "@types/cors": { - "version": "2.8.13", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.37.0", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "dev": true - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/file-saver": { - "version": "2.0.5", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "4.3.1", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/lodash": { - "version": "4.14.194", - "dev": true - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "18.16.0", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", - "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } + "parse5-sax-parser": { + "version": "7.0.0", + "dev": true, + "requires": { + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.59.7", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "dev": true, - "requires": {} - }, - "@webassemblyjs/ast": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.5", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.5", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.5", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true - }, - "@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "dev": true, - "requires": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - } - }, - "@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - } - } - }, - "abab": { - "version": "2.0.6", - "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.8", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.2", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "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", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.12.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "angular-expressions": { - "version": "1.1.9" - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "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 - }, - "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 - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "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": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "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 - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dev": true, - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - }, - "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } + "parseurl": { + "version": "1.3.3", + "dev": true }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - } - } - }, - "axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } - }, - "babel-loader": { - "version": "9.1.2", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "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 - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - } - }, - "balanced-match": { - "version": "1.0.2" - }, - "base64-js": { - "version": "1.5.1" - }, - "base64id": { - "version": "2.0.0", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "bl": { - "version": "4.1.0", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "body-parser": { - "version": "1.20.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "path-exists": { + "version": "4.0.0", + "dev": true }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "buffer": { - "version": "5.7.1", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "dev": true - }, - "cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "path-is-absolute": { + "version": "1.0.1" }, - "glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } + "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 }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true + "path-parse": { + "version": "1.0.7", + "dev": true }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==" - }, - "callsites": { - "version": "3.1.0" - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "dev": true - }, - "check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "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.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.3", - "dev": true - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "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", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.8.0" - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "cli-width": { - "version": "3.0.0", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4" - }, - "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", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "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": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "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" - } - }, - "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", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true + "path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "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" - } + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "path-type": { + "version": "4.0.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 - } - } - }, - "concat-map": { - "version": "0.0.1" - }, - "connect": { - "version": "3.7.0", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "copy-anything": { - "version": "2.0.6", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - } - } - }, - "core-js": { - "version": "3.30.2" - }, - "core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "8.1.3", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1" + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true }, - "js-yaml": { - "version": "4.1.0", - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.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" - } + "picocolors": { + "version": "1.0.0", + "dev": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "picomatch": { + "version": "2.3.1", + "dev": true }, - "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" - } + "pify": { + "version": "4.0.1", + "dev": true, + "optional": true }, - "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 + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } }, - "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 + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.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" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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 - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "dev": true - }, - "cypress": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", - "dev": true, - "requires": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "@types/node": { - "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", - "dev": true + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "requires": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "requires": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "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" + } }, - "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" - } + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "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 + } + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "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" - } + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "prr": { + "version": "1.0.1", + "dev": true, + "optional": true + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "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" } - } }, - "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" - } + "punycode": { + "version": "2.3.0", + "dev": true }, - "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 + "qjobs": { + "version": "1.2.0", + "dev": true }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } + "queue-microtask": { + "version": "1.2.3", + "dev": true }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "range-parser": { + "version": "1.2.1", + "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 + "raw-body": { + "version": "2.5.2", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true + "read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", + "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } }, - "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" - } + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "readable-stream": { + "version": "3.6.2", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-format": { - "version": "4.0.14", - "dev": true - }, - "dayjs": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-equal": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.4", - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "di": { - "version": "0.0.1", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serialize": { - "version": "2.2.1", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "dev": true - }, - "ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0" - }, - "emojis-list": { - "version": "3.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "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" - } - }, - "engine.io": { - "version": "6.4.2", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - } - }, - "engine.io-parser": { - "version": "5.0.6", - "dev": true - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "ent": { - "version": "2.2.0", - "dev": true - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "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": "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 - }, - "errno": { - "version": "0.1.8", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "es-module-lexer": { - "version": "1.2.1", - "dev": true - }, - "esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1" - }, - "escape-html": { - "version": "1.0.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "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 }, - "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" - } + "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 }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true }, - "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" - } + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.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 + "regex-parser": { + "version": "2.2.11", + "dev": true }, - "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==", - "dev": true + "regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + } }, - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } }, - "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==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } + "replace-in-file": { + "version": "6.3.5", + "requires": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } + "require-directory": { + "version": "2.1.1" }, - "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 + "require-from-string": { + "version": "2.0.2", + "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } + "requires-port": { + "version": "1.0.0", + "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==", - "dev": true + "resolve": { + "version": "1.22.2", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.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==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } + "resolve-from": { + "version": "5.0.0", + "dev": true }, - "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" - } + "resolve-url-loader": { + "version": "5.0.0", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + } + } }, - "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==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } + "restore-cursor": { + "version": "3.1.0", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } }, - "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" - } + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true - }, - "espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "dev": true - }, - "events": { - "version": "3.3.0", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "reusify": { + "version": "1.0.4", + "dev": true }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } + "rfdc": { + "version": "1.3.0", + "dev": true }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "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" - } + "rollup": { + "version": "3.21.5", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } + "run-async": { + "version": "2.4.1", + "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } + "rxjs": { + "version": "7.8.1", + "requires": { + "tslib": "^2.1.0" + } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-saver": { - "version": "2.0.5" - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "safe-buffer": { + "version": "5.2.1" }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "safe-identifier": { + "version": "0.4.2" }, - "ms": { - "version": "2.0.0", - "dev": true + "safer-buffer": { + "version": "2.1.2", + "devOptional": true }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2" - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "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", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0" - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5" - }, - "get-intrinsic": { - "version": "1.2.0", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "requires": { - "async": "^3.2.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.3", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "dev": true - }, - "global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - } - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "13.1.4", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "guacamole-frontend-lib": { - "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "requires": { - "tslib": "^2.3.0" - } - }, - "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 - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "requires": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "dev": true, + "optional": 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 + "schema-utils": { + "version": "4.0.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } }, - "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" - } - } - } - }, - "html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1" - }, - "ignore": { - "version": "5.2.4", - "dev": true - }, - "ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "requires": { - "minimatch": "^9.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "image-size": { - "version": "0.5.5", - "dev": true, - "optional": true - }, - "immutable": { - "version": "4.3.0", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0" - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "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 - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true - }, - "injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "requires": { - "tslib": "^2.0.0" - } - }, - "inquirer": { - "version": "8.2.4", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "semver": { + "version": "7.3.8", + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0" + } + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "serialize-javascript": { + "version": "6.0.1", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "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" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.12.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-interactive": { - "version": "1.0.0" - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "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.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0" - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-what": { - "version": "3.14.1", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.10", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "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" - } + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "setprototypeof": { + "version": "1.2.0", + "dev": true }, - "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" - } + "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" + } }, - "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 + "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" + } }, - "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 + "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 }, - "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" - } - } - } - }, - "jasmine-core": { - "version": "4.5.0", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "dev": true - }, - "jsonc-parser": { - "version": "3.2.0", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "jstz": { - "version": "2.1.1" - }, - "karma": { - "version": "6.4.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, - "source-map": { - "version": "0.6.1", - "dev": true + "signal-exit": { + "version": "3.0.7" }, - "tmp": { - "version": "0.2.1", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } }, - "yargs": { - "version": "16.2.0", - "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" - } + "slash": { + "version": "4.0.0", + "dev": true }, - "yargs-parser": { - "version": "20.2.9", - "dev": true - } - } - }, - "karma-coverage": { - "version": "2.2.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - } - }, - "karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "requires": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - }, - "dependencies": { - "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" - } - } - } - }, - "karma-jasmine": { - "version": "5.1.0", - "dev": true, - "requires": { - "jasmine-core": "^4.1.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "2.0.0", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "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.6", - "dev": true - }, - "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true - }, - "less": { - "version": "4.1.3", - "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", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.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" + } + }, + "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 + } + } }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true }, - "semver": { - "version": "5.7.1", - "dev": true, - "optional": true + "socket.io": { + "version": "4.6.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "dev": true, + "requires": { + "ws": "~8.11.0" + } + }, + "socket.io-parser": { + "version": "4.2.3", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } }, "source-map": { - "version": "0.6.1", - "dev": true, - "optional": true - } - } - }, - "less-loader": { - "version": "11.1.0", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, - "loader-runner": { - "version": "4.3.0", - "dev": true - }, - "loader-utils": { - "version": "3.2.1", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "source-map-js": { + "version": "1.0.2", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "source-map-loader": { + "version": "4.0.1", + "dev": true, + "requires": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } }, - "color-name": { - "version": "1.1.4" + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } }, - "has-flag": { - "version": "4.0.0" + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "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", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "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", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "requires": { + "internal-slot": "^1.0.4" + } + }, + "streamroller": { + "version": "3.1.5", + "dev": true, + "requires": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "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==", + "dev": true + }, + "strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + } }, "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.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" - } + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "symbol-observable": { + "version": "4.0.0", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "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 + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.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" - } + "terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } }, - "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 + "terser-webpack-plugin": { + "version": "5.3.7", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } }, - "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", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "log4js": { - "version": "6.9.1", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - } - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.30.0", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - } - } - }, - "make-plural": { - "version": "7.3.0" - }, - "media-typer": { - "version": "0.3.0", - "dev": true - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0" - }, - "mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - } - }, - "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 - }, - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "dev": true - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "text-table": { + "version": "0.2.0", + "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 - } - } - }, - "minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "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 - } - } - }, - "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", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "through": { + "version": "2.3.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 - } - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "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 - } - } - }, - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "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", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "to-fast-properties": { + "version": "2.0.0", + "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 - } - } - }, - "mkdirp": { - "version": "0.5.6", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moo": { - "version": "0.5.2" - }, - "mrmime": { - "version": "1.0.1", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "mute-stream": { - "version": "0.0.8", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "dev": true - }, - "nanopop": { - "version": "2.3.0" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "needle": { - "version": "3.2.0", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } }, - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "negotiator": { - "version": "0.6.3", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "dev": true - }, - "ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "requires": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild": "^0.17.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } - } - }, - "ngx-build-plus": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", - "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", - "dev": true, - "requires": { - "@angular-devkit/build-angular": "^16.0.0", - "@schematics/angular": "^16.0.0", - "webpack-merge": "^5.0.0" - } - }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "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" - } - } - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true - }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true - }, - "npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "requires": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nx": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", - "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", - "dev": true, - "requires": { - "@nrwl/tao": "16.2.2", - "@nx/nx-darwin-arm64": "16.2.2", - "@nx/nx-darwin-x64": "16.2.2", - "@nx/nx-linux-arm-gnueabihf": "16.2.2", - "@nx/nx-linux-arm64-gnu": "16.2.2", - "@nx/nx-linux-arm64-musl": "16.2.2", - "@nx/nx-linux-x64-gnu": "16.2.2", - "@nx/nx-linux-x64-musl": "16.2.2", - "@nx/nx-win32-arm64-msvc": "16.2.2", - "@nx/nx-win32-x64-msvc": "16.2.2", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "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" - } + "toidentifier": { + "version": "1.0.1", + "dev": true }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "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", + "punycode": "^2.1.1" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true + "tree-kill": { + "version": "1.2.2", + "dev": true }, - "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" - } + "tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "requires": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.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" - } + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" }, - "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 + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } + "tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "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" - } + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "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 + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } + "type-fest": { + "version": "0.21.3", + "dev": true }, - "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" - } + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } }, - "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true + "typed-assert": { + "version": "1.0.9", + "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" - } + "typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "ua-parser-js": { + "version": "0.7.35", + "dev": true }, - "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" - } + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "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" - } + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "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 - } - } - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "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.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "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.4.1", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "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", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "ora": { - "version": "5.4.1", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "universalify": { + "version": "0.1.2", + "dev": true }, - "color-name": { - "version": "1.1.4" + "unpipe": { + "version": "1.0.0", + "dev": true }, - "has-flag": { - "version": "4.0.0" + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true - }, - "ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.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" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - } - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "requires": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "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" - } - }, - "parse-node-version": { - "version": "1.0.1", - "dev": true - }, - "parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "requires": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "requires": { - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parseurl": { - "version": "1.3.3", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.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 - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "pify": { - "version": "4.0.1", - "dev": true, - "optional": true - }, - "piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "requires": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "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", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "requires": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true + "update-browserslist-db": { + "version": "1.0.11", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "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" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "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 - } - } - }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "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" - } - }, - "punycode": { - "version": "2.3.0", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "dev": true - }, - "qs": { - "version": "6.11.0", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true - }, - "raw-body": { - "version": "2.5.2", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "requires": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } }, - "glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } + "util-deprecate": { + "version": "1.0.2" }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true + "utils-merge": { + "version": "1.0.1", + "dev": true }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.2", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "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": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - } - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "replace-in-file": { - "version": "6.3.5", - "requires": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } }, - "color-name": { - "version": "1.1.4" + "vary": { + "version": "1.1.2", + "dev": true }, - "has-flag": { - "version": "4.0.0" + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1" - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "dev": true - }, - "resolve": { - "version": "1.22.2", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - }, - "resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } + "vite": { + "version": "4.3.9", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } }, - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "3.21.5", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "run-async": { - "version": "2.4.1", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.1", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1" - }, - "safe-identifier": { - "version": "0.4.2" - }, - "safer-buffer": { - "version": "2.1.2", - "devOptional": true - }, - "sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "requires": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "dev": true, - "optional": true - }, - "schema-utils": { - "version": "4.0.1", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.3.8", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "requires": { - "yallist": "^4.0.0" - } + "void-elements": { + "version": "2.0.1", + "dev": true }, - "yallist": { - "version": "4.0.0" - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "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" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true + "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" + } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "wcwidth": { + "version": "1.0.1", + "requires": { + "defaults": "^1.0.3" + } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "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" - } + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true + "webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "schema-utils": { + "version": "3.1.2", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } + "webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + } + } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } }, - "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.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "dev": true - }, - "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": "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 - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7" - }, - "sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - } - }, - "slash": { - "version": "4.0.0", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.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" - } + "webpack-sources": { + "version": "3.2.3", + "dev": true }, - "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" - } + "webpack-subresource-integrity": { + "version": "5.1.0", + "dev": true, + "requires": { + "typed-assert": "^1.0.8" + } }, - "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 - } - } - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socket.io": { - "version": "4.6.1", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - } - }, - "socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "requires": { - "ws": "~8.11.0" - } - }, - "socket.io-parser": { - "version": "4.2.3", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "dev": true - }, - "source-map-loader": { - "version": "4.0.1", - "dev": true, - "requires": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "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", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "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", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "statuses": { - "version": "1.5.0", - "dev": true - }, - "stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "requires": { - "internal-slot": "^1.0.4" - } - }, - "streamroller": { - "version": "3.1.5", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "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==", - "dev": true - }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "symbol-observable": { - "version": "4.0.0", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "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" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" } - } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "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 }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.7", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, - "through": { - "version": "2.3.8", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "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", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tree-kill": { - "version": "1.2.2", - "dev": true - }, - "tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "requires": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-assert": { - "version": "1.0.9", - "dev": true - }, - "typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.35", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "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 - }, - "update-browserslist-db": { - "version": "1.0.11", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2" - }, - "utils-merge": { - "version": "1.0.1", - "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==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "vary": { - "version": "1.1.2", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - } - } - }, - "vite": { - "version": "4.3.9", - "dev": true, - "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - } - }, - "void-elements": { - "version": "2.0.1", - "dev": true - }, - "watchpack": { - "version": "2.4.0", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "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" - } - }, - "wcwidth": { - "version": "1.0.1", - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } }, - "ajv-keywords": { - "version": "3.5.2", - "dev": true, - "requires": {} + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true }, - "schema-utils": { - "version": "3.1.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "dependencies": { - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@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" + }, + "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" + } + }, + "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 + } + } + }, + "wrappy": { + "version": "1.0.2" }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "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-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrap-ansi": { - "version": "7.0.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } + "version": "8.11.0", + "dev": true, + "requires": {} }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } }, - "color-name": { - "version": "1.1.4" - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@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" - }, - "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" - } + "y18n": { + "version": "5.0.8" }, - "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" - } + "yallist": { + "version": "3.1.1", + "dev": true }, - "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 + "yargs": { + "version": "17.7.2", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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.13.0", + "requires": { + "tslib": "^2.3.0" + } } - } - }, - "wrappy": { - "version": "1.0.2" - }, - "ws": { - "version": "8.11.0", - "dev": true, - "requires": {} - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "^0.2.2" - } - }, - "y18n": { - "version": "5.0.8" - }, - "yallist": { - "version": "3.1.1", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "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.13.0", - "requires": { - "tslib": "^2.3.0" - } } - } } diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index 52e8a6808d..5856fff271 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -25,6 +25,7 @@ "@simonwep/pickr": "^1.8.2", "angular-expressions": "^1.1.9", "file-saver": "^2.0.5", + "guacamole-frontend-ext-lib": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", "jstz": "^2.1.1", "lodash": "^4.17.21", diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts index f2873eba28..08cf9a8ca3 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/components/form-field-base/form-field-base.component.ts @@ -20,6 +20,7 @@ import { Component, Input } from '@angular/core'; import { Field } from '../../../rest/types/Field'; import { FormControl } from '@angular/forms'; +import { FormFieldComponentData } from "guacamole-frontend-ext-lib"; /** @@ -82,7 +83,7 @@ export const canonicalize = (identifier: string): string => { * TODO: move to shared library */ @Component({'template': ''}) -export abstract class FormFieldBaseComponent { +export abstract class FormFieldBaseComponent implements FormFieldComponentData { /** * The translation namespace of the translation strings that will diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts index 6e43aea10e..acb0de98f4 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/service/form.service.ts @@ -30,8 +30,6 @@ import { Form } from '../../rest/types/Form'; import { Field } from '../../rest/types/Field'; import { FormFieldComponent } from '../components/form-field/form-field.component'; import { TimeZoneFieldComponent } from '../components/time-zone-field/time-zone-field.component'; -import { FormFieldBaseComponent } from '../components/form-field-base/form-field-base.component'; -import { FieldType } from '../types/FieldType'; import { CheckboxFieldComponent } from '../components/checkbox-field/checkbox-field.component'; import { DateFieldComponent } from '../components/date-field/date-field.component'; import { LanguageFieldComponent } from '../components/language-field/language-field.component'; @@ -49,12 +47,11 @@ import { } from '../components/terminal-color-scheme-field/terminal-color-scheme-field.component'; import { FormControl, FormGroup } from '@angular/forms'; import { isArray } from '../../util/is-array'; +import { FieldTypeService, FormFieldComponentData } from 'guacamole-frontend-ext-lib'; /** * A service for maintaining form-related metadata and linking that data to * corresponding controllers and templates. - * - * TODO: move to shared library */ @Injectable({ providedIn: 'root' @@ -70,24 +67,93 @@ export class FormService { private renderer: Renderer2; - constructor(rendererFactory: RendererFactory2) { + constructor(private fieldTypeService: FieldTypeService, rendererFactory: RendererFactory2) { + this.registerFieldTypes(); this.renderer = rendererFactory.createRenderer(null, null); } /** - * Registers a new field type under the given name. - * - * @param fieldTypeName - * The name which uniquely identifies the field type being registered. - * - * @param fieldType - * The field type definition to associate with the given name. + * Registers the default field types with this field type service. */ - registerFieldType(fieldTypeName: string, fieldType: FieldType): void { + private registerFieldTypes() { + + /** + * Text field type. + */ + this.fieldTypeService.registerFieldType(Field.Type.TEXT, TextFieldComponent); + + /** + * Email address field type. + */ + this.fieldTypeService.registerFieldType(Field.Type.EMAIL, EmailFieldComponent); + + /** + * Numeric field type. + */ + this.fieldTypeService.registerFieldType(Field.Type.NUMERIC, NumberFieldComponent); + + /** + * Boolean field type. + */ + this.fieldTypeService.registerFieldType(Field.Type.BOOLEAN, CheckboxFieldComponent); - // Store field type - this.fieldTypes[fieldTypeName] = fieldType; + /** + * Username field type. Identical in principle to a text field, but may + * have different semantics. + */ + this.fieldTypeService.registerFieldType(Field.Type.USERNAME, UsernameFieldComponent); + + /** + * Password field type. Similar to a text field, but the contents of + * the field are masked. + */ + this.fieldTypeService.registerFieldType(Field.Type.PASSWORD, PasswordFieldComponent); + + /** + * Enumerated field type. The user is presented a finite list of values + * to choose from. + */ + this.fieldTypeService.registerFieldType(Field.Type.ENUM, SelectFieldComponent); + /** + * Multiline field type. The user may enter multiple lines of text. + */ + this.fieldTypeService.registerFieldType(Field.Type.MULTILINE, TextAreaFieldComponent); + + /** + * Field type which allows selection of languages. The languages + * displayed are the set of languages supported by the Guacamole web + * application. Legal values are valid language IDs, as dictated by + * the filenames of Guacamole's available translations. + */ + this.fieldTypeService.registerFieldType(Field.Type.LANGUAGE, LanguageFieldComponent); + + /** + * Field type which allows selection of time zones. + */ + this.fieldTypeService.registerFieldType(Field.Type.TIMEZONE, TimeZoneFieldComponent); + + /** + * Field type which allows selection of individual dates. + */ + this.fieldTypeService.registerFieldType(Field.Type.DATE, DateFieldComponent); + + /** + * Field type which allows selection of times of day. + */ + this.fieldTypeService.registerFieldType(Field.Type.TIME, TimeFieldComponent); + + /** + * Field type which allows selection of color schemes accepted by the + * Guacamole server terminal emulator and protocols which leverage it. + */ + this.fieldTypeService.registerFieldType(Field.Type.TERMINAL_COLOR_SCHEME, TerminalColorSchemeFieldComponent); + + /** + * Field type that supports redirecting the client browser to another + * URL. + */ + this.fieldTypeService.registerFieldType(Field.Type.REDIRECT, RedirectFieldComponent); } /** @@ -184,7 +250,7 @@ export class FormService { return new Promise((resolve, reject) => { // Ensure field type is defined - const componentToInject: Type = this.fieldTypes[fieldType].component; + const componentToInject: Type | null = this.fieldTypeService.getComponent(fieldType); if (!(componentToInject && this.viewContainer)) { reject(); return; @@ -214,7 +280,7 @@ export class FormService { * @param scope * @private */ - private insertFieldElementInternal(componentType: Type, fieldContainer: Element, scope: FormFieldComponent): ComponentRef | null { + private insertFieldElementInternal(componentType: Type, fieldContainer: Element, scope: FormFieldComponent): ComponentRef | null { if (!this.viewContainer) { return null; @@ -224,7 +290,7 @@ export class FormService { this.viewContainer.clear(); // Create a component using the factory and add it to the container - const componentRef = this.viewContainer.createComponent(componentType); + const componentRef = this.viewContainer.createComponent(componentType); // Copy properties from scope to the component instance componentRef.instance.namespace = scope.namespace; @@ -233,7 +299,6 @@ export class FormService { componentRef.instance.disabled = scope.disabled; componentRef.instance.focused = scope.focused; componentRef.instance.fieldId = scope.fieldId; - // TODO: Copy more properties from scope to componentRef.instance // Get the native element of the created component const nativeElement = componentRef.location.nativeElement; @@ -332,93 +397,5 @@ export class FormService { return 'name' in obj && 'fields' in obj; } - /** - * Map of all registered field type definitions by name. - */ - fieldTypes: Record = { - - /** - * Text field type. - */ - [Field.Type.TEXT]: {component: TextFieldComponent}, - - /** - * Email address field type. - */ - [Field.Type.EMAIL]: {component: EmailFieldComponent}, - - /** - * Numeric field type. - */ - [Field.Type.NUMERIC]: {component: NumberFieldComponent}, - - /** - * Boolean field type. - */ - [Field.Type.BOOLEAN]: {component: CheckboxFieldComponent}, - - /** - * Username field type. Identical in principle to a text field, but may - * have different semantics. - */ - [Field.Type.USERNAME]: {component: UsernameFieldComponent}, - /** - * Password field type. Similar to a text field, but the contents of - * the field are masked. - */ - [Field.Type.PASSWORD]: {component: PasswordFieldComponent}, - - /** - * Enumerated field type. The user is presented a finite list of values - * to choose from. - */ - [Field.Type.ENUM]: {component: SelectFieldComponent}, - - /** - * Multiline field type. The user may enter multiple lines of text. - */ - [Field.Type.MULTILINE]: {component: TextAreaFieldComponent}, - - /** - * Field type which allows selection of languages. The languages - * displayed are the set of languages supported by the Guacamole web - * application. Legal values are valid language IDs, as dictated by - * the filenames of Guacamole's available translations. - */ - [Field.Type.LANGUAGE]: {component: LanguageFieldComponent}, - - /** - * Field type which allows selection of time zones. - */ - [Field.Type.TIMEZONE]: {component: TimeZoneFieldComponent}, - - /** - * Field type which allows selection of individual dates. - */ - [Field.Type.DATE]: {component: DateFieldComponent}, - - /** - * Field type which allows selection of times of day. - */ - [Field.Type.TIME]: {component: TimeFieldComponent}, - - /** - * Field type which allows selection of color schemes accepted by the - * Guacamole server terminal emulator and protocols which leverage it. - */ - [Field.Type.TERMINAL_COLOR_SCHEME]: {component: TerminalColorSchemeFieldComponent}, - - /** - * Field type that supports redirecting the client browser to another - * URL. - */ - [Field.Type.REDIRECT]: {component: RedirectFieldComponent}, - - /** - * Field type that is used to extract a query parameter from the URL. - * No input is presented to the user. - */ - [Field.Type.QUERY_PARAMETER]: {component: undefined as any} - }; } diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts deleted file mode 100644 index 4a2c00dc6c..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/form/types/FieldType.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { FormFieldBaseComponent } from '../components/form-field-base/form-field-base.component'; -import { Type } from '@angular/core'; -import { CheckboxFieldComponent } from '../components/checkbox-field/checkbox-field.component'; - -/** - * The object used by the formService for describing field types. - * - * TODO: Build an Angular version of this class. - */ -export class FieldType { - - component: Type; - - /** - * Creates a new FieldType. - * - * @param {FieldType|Object} [template={}] - * The object whose properties should be copied within the new - * FieldType. - */ - constructor(template: Partial & object = {}) { - - // Copy template values - // TODO: Change default to text field - this.component = template.component || CheckboxFieldComponent; - } -} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts index 8ebc47d3ca..be171d2a95 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/rest/types/Field.ts @@ -18,12 +18,13 @@ */ import { TranslatableMessage } from './TranslatableMessage'; +import { FormField } from "guacamole-frontend-ext-lib"; /** * The object returned by REST API calls when representing the data * associated with a field or configuration parameter. */ -export class Field { +export class Field implements FormField { /** * The name which uniquely identifies this parameter. From 08c6963d2d99cf9c91b634cf724864f4eb2cb184 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 21:26:00 +0200 Subject: [PATCH 16/80] GUACAMOLE-1085: Add the extension library as a dependency to the frontend library --- guacamole/src/main/guacamole-frontend-lib/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/guacamole/src/main/guacamole-frontend-lib/package.json b/guacamole/src/main/guacamole-frontend-lib/package.json index a1b95af0b0..7237dddc7f 100644 --- a/guacamole/src/main/guacamole-frontend-lib/package.json +++ b/guacamole/src/main/guacamole-frontend-lib/package.json @@ -18,6 +18,7 @@ "@angular/platform-browser": "^16.1.0", "@angular/platform-browser-dynamic": "^16.1.0", "@angular/router": "^16.1.0", + "guacamole-frontend-ext-lib": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" @@ -29,8 +30,8 @@ "@types/jasmine": "~4.3.0", "jasmine-core": "~4.6.0", "karma": "~6.4.0", - "karma-firefox-launcher": "~2.1.2", "karma-coverage": "~2.2.0", + "karma-firefox-launcher": "~2.1.2", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^16.1.0", From ecf222c6efa42c6143b414a4b6cbea26dd57e042 Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Thu, 22 Jun 2023 22:43:41 +0200 Subject: [PATCH 17/80] GUACAMOLE-1085: Add an example for an extension which adds routes and registers a new field type --- .../.gitignore | 42 + .../README.md | 40 + .../angular.json | 118 + .../package-lock.json | 18780 ++++++++++++++++ .../package.json | 34 + .../src/app/app.component.ts | 34 + .../src/app/app.config.ts | 27 + .../src/app/app.routes.ts | 38 + .../about-extension-button.component.ts | 39 + .../about-extension-page.component.ts | 42 + .../src/app/components/home-page.component.ts | 60 + .../planet-chooser-field.component.ts | 62 + .../src/app/extension.config.ts | 48 + .../src/bootstrap.ts | 25 + .../src/index.html | 30 + .../src/main.ts | 21 + .../src/styles.css | 20 + .../tsconfig.app.json | 14 + .../tsconfig.json | 32 + .../webpack.config.js | 33 + .../webpack.prod.config.js | 20 + .../src/main/guacamole-frontend/angular.json | 1 + .../src/assets/mf.manifest.json | 3 - .../projects/guacamole-frontend/src/main.ts | 2 +- .../src/moduleFederation/mf.manifest.json | 10 + 25 files changed, 19571 insertions(+), 4 deletions(-) create mode 100644 doc/guacamole-frontend-extension-example/.gitignore create mode 100644 doc/guacamole-frontend-extension-example/README.md create mode 100644 doc/guacamole-frontend-extension-example/angular.json create mode 100644 doc/guacamole-frontend-extension-example/package-lock.json create mode 100644 doc/guacamole-frontend-extension-example/package.json create mode 100644 doc/guacamole-frontend-extension-example/src/app/app.component.ts create mode 100644 doc/guacamole-frontend-extension-example/src/app/app.config.ts create mode 100644 doc/guacamole-frontend-extension-example/src/app/app.routes.ts create mode 100644 doc/guacamole-frontend-extension-example/src/app/components/about-extension-button.component.ts create mode 100644 doc/guacamole-frontend-extension-example/src/app/components/about-extension-page.component.ts create mode 100644 doc/guacamole-frontend-extension-example/src/app/components/home-page.component.ts create mode 100644 doc/guacamole-frontend-extension-example/src/app/components/planet-chooser-field.component.ts create mode 100644 doc/guacamole-frontend-extension-example/src/app/extension.config.ts create mode 100644 doc/guacamole-frontend-extension-example/src/bootstrap.ts create mode 100644 doc/guacamole-frontend-extension-example/src/index.html create mode 100644 doc/guacamole-frontend-extension-example/src/main.ts create mode 100644 doc/guacamole-frontend-extension-example/src/styles.css create mode 100644 doc/guacamole-frontend-extension-example/tsconfig.app.json create mode 100644 doc/guacamole-frontend-extension-example/tsconfig.json create mode 100644 doc/guacamole-frontend-extension-example/webpack.config.js create mode 100644 doc/guacamole-frontend-extension-example/webpack.prod.config.js delete mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/moduleFederation/mf.manifest.json diff --git a/doc/guacamole-frontend-extension-example/.gitignore b/doc/guacamole-frontend-extension-example/.gitignore new file mode 100644 index 0000000000..0711527ef9 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/doc/guacamole-frontend-extension-example/README.md b/doc/guacamole-frontend-extension-example/README.md new file mode 100644 index 0000000000..baf4269d34 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/README.md @@ -0,0 +1,40 @@ +# Frontend Extension Example + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) +version 16.1.1 using the following commands + +```bash +# Create a new minimal Angular project +ng new guacamole-frontend-extension-example \ +--minimal \ +--prefix guac \ +--routing \ +--skip-tests \ +--skip-install \ +--standalone \ +--view-encapsulation None + +# ... manually set the version of @angular dependencies to "16.1.1" in the package.json + +cd guacamole-frontend-extension-example + +npm install + +# Add support for module federation +ng add @angular-architects/module-federation --project guacamole-frontend-extension-example --type remote --port 4202 + +# Add the frontend extension library +npm install ..\..\guacamole\src\main\guacamole-frontend\dist\guacamole-frontend-ext-lib + +``` + +Add `"src/app/extension.config.ts"` to `tsconfig.app.json` `files` array. + + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4202/`. The application will automatically reload if you change any of the source files. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. diff --git a/doc/guacamole-frontend-extension-example/angular.json b/doc/guacamole-frontend-extension-example/angular.json new file mode 100644 index 0000000000..5dcf2a5b37 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/angular.json @@ -0,0 +1,118 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "guacamole-frontend-extension-example": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "inlineTemplate": true, + "inlineStyle": true, + "skipTests": true, + "standalone": true + }, + "@schematics/angular:class": { + "skipTests": true + }, + "@schematics/angular:directive": { + "skipTests": true, + "standalone": true + }, + "@schematics/angular:guard": { + "skipTests": true + }, + "@schematics/angular:interceptor": { + "skipTests": true + }, + "@schematics/angular:pipe": { + "skipTests": true, + "standalone": true + }, + "@schematics/angular:resolver": { + "skipTests": true + }, + "@schematics/angular:service": { + "skipTests": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "guac", + "architect": { + "build": { + "builder": "ngx-build-plus:browser", + "options": { + "outputPath": "dist/guacamole-frontend-extension-example", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "assets": [ + ], + "styles": [ + "src/styles.css" + ], + "scripts": [], + "extraWebpackConfig": "webpack.config.js", + "commonChunk": false + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all", + "extraWebpackConfig": "webpack.prod.config.js" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "ngx-build-plus:dev-server", + "configurations": { + "production": { + "browserTarget": "guacamole-frontend-extension-example:build:production", + "extraWebpackConfig": "webpack.prod.config.js" + }, + "development": { + "browserTarget": "guacamole-frontend-extension-example:build:development" + } + }, + "defaultConfiguration": "development", + "options": { + "port": 4202, + "publicHost": "http://localhost:4202", + "extraWebpackConfig": "webpack.config.js" + } + }, + "extract-i18n": { + "builder": "ngx-build-plus:extract-i18n", + "options": { + "browserTarget": "guacamole-frontend-extension-example:build", + "extraWebpackConfig": "webpack.config.js" + } + } + } + } + } +} \ No newline at end of file diff --git a/doc/guacamole-frontend-extension-example/package-lock.json b/doc/guacamole-frontend-extension-example/package-lock.json new file mode 100644 index 0000000000..b7b55c5487 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/package-lock.json @@ -0,0 +1,18780 @@ +{ + "name": "guacamole-frontend-extension-example", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "guacamole-frontend-extension-example", + "version": "0.0.0", + "dependencies": { + "@angular-architects/module-federation": "^16.0.4", + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/forms": "16.1.1", + "@angular/platform-browser": "16.1.1", + "@angular/platform-browser-dynamic": "16.1.1", + "@angular/router": "16.1.1", + "guacamole-frontend-ext-lib": "file:../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "16.1.1", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "16.1.1", + "ngx-build-plus": "^16.0.0", + "typescript": "~5.1.3" + } + }, + "../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib": { + "version": "0.0.1", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-architects/module-federation": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", + "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", + "dependencies": { + "@angular-architects/module-federation-runtime": "16.0.4", + "callsite": "^1.0.0", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "word-wrap": "^1.2.3" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser-dynamic": ">=16.0.0", + "rxjs": ">=6.6.3" + } + }, + "node_modules/@angular-architects/module-federation-runtime": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", + "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser-dynamic": ">=16.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1601.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.1.tgz", + "integrity": "sha512-LUHaxdAZrvh++7/R+/hzVY5moEVVTjd30b25SNNYcNJsWox1Yh9idu1AvtEuZR/A8Jj+sbHnuw0176GsJ78stg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.1.tgz", + "integrity": "sha512-k+9hQLGgGWHj7NJ7Fm6nwCDsvseKlipKE6Me9ydliNKclwJ0l+ScpXS/iZA1+Geud7IX3McGWf2QemWj1Nds9g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.1", + "@angular-devkit/build-webpack": "0.1601.1", + "@angular-devkit/core": "16.1.1", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.1", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.19", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "@angular/localize": "^16.1.0", + "@angular/platform-server": "^16.1.0", + "@angular/service-worker": "^16.1.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.1.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/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 + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.1.tgz", + "integrity": "sha512-J1O+5qiwCYNCFTKtczhWC3wycuks/3GitmbYv3GMSBz2HJU5XSTtGdlkSvkwCocLHa8ggPlnquLsQNjwcd+EQg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", + "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.2.tgz", + "integrity": "sha512-5CRHrurFwJh7IPpo56DbIjcqzI1usraYwjHKZFeXoW4sQTRP5yeSuJoBM9zuBX5ZFQVCRt24j5DQTlsGk7Ky8Q==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.2", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.2.tgz", + "integrity": "sha512-RGSkcu03Zybg7drenKxBHvQ/xF8LLZR7o09S4vtLVDwMTGW/ZHnZ+YSC0OuRddbtBlBRhjmsQN6HPvXXfwGLkQ==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.2.tgz", + "integrity": "sha512-egxjfBbPOjsNNeVpB9IkxaYsvpEDuN1qYocelh7D1sZVegujd3KgQDkRPbrB+hYLRgem32OQQ316s8rg1K9JbA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.2", + "@angular-devkit/core": "16.1.2", + "@angular-devkit/schematics": "16.1.2", + "@schematics/angular": "16.1.2", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.3", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1601.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.2.tgz", + "integrity": "sha512-VQg+VxJsTKcxVs7hgLWYJZZmREr3uVEC7qpuQl9r9L6AoALLgefaVMi44w8hsZfuJQsTcGnvpWVhsBS/KwcRGA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.2", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.2.tgz", + "integrity": "sha512-RGSkcu03Zybg7drenKxBHvQ/xF8LLZR7o09S4vtLVDwMTGW/ZHnZ+YSC0OuRddbtBlBRhjmsQN6HPvXXfwGLkQ==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "dependencies": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.1", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/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/@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/core": "16.1.1" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1" + } + }, + "node_modules/@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.1", + "@angular/core": "16.1.1", + "@angular/platform-browser": "16.1.1", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/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/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "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": "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/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.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.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/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/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.1.tgz", + "integrity": "sha512-ItW8Hhokk4bQuV8qMpPeNCj0f3LDpddJpd5DwryKb0sSNacGlVff/0nCiKjJFPoCmMSg6ivpkZfqbIyL9RGYXw==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.1.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.2.tgz", + "integrity": "sha512-SxPX61wVB88meVhJRjqtWadyJ/PEUY9mj51mtH6YBJqaRlfVbxCgjArgke7MJ6oB291yUo6C+oHPYwwSs1f26g==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.2", + "@angular-devkit/schematics": "16.1.2", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.2.tgz", + "integrity": "sha512-RGSkcu03Zybg7drenKxBHvQ/xF8LLZR7o09S4vtLVDwMTGW/ZHnZ+YSC0OuRddbtBlBRhjmsQN6HPvXXfwGLkQ==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "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 + }, + "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 + }, + "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 + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "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 + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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 + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "engines": { + "node": "*" + } + }, + "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/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.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, + "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, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "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 + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.19.tgz", + "integrity": "sha512-Fm4ZAXsG0VzWy1U30rP4qxbaWGSsqXDgSupJW1OUJGDAs0KWC+j37v7p5a2kZ9BPJvhRzWm3be+Hc9WvQOBUOw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/critters/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/critters/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/critters/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/critters/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/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/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.445", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz", + "integrity": "sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA==", + "dev": true + }, + "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "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==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "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/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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 + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "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, + "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==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", + "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.10.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", + "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/guacamole-frontend-ext-lib": { + "resolved": "../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib", + "link": true + }, + "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 + }, + "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, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "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, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "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": [ + { + "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/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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 + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/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/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/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "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, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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 + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "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, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/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==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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 + }, + "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, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "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/make-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/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "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 + }, + "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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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 + }, + "node_modules/minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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 + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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 + }, + "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, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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 + }, + "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, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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 + }, + "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/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "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 + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/ngx-build-plus": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", + "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", + "dev": true, + "dependencies": { + "@angular-devkit/build-angular": "^16.0.0", + "@schematics/angular": "^16.0.0", + "webpack-merge": "^5.0.0" + }, + "peerDependencies": { + "@angular-devkit/build-angular": "^16.0.0", + "rxjs": ">= 6.0.0" + } + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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, + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "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 + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "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, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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 + }, + "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/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/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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 + }, + "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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=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/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/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.0.tgz", + "integrity": "sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "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/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.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 + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "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, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/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, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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 + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "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 + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/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/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, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rollup": { + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "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, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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 + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "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, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/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 + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/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==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "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 + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "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, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "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==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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, + "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": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/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==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "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/wrap-ansi-cjs": { + "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-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, + "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", + "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/wrap-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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/zone.js": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", + "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", + "dependencies": { + "tslib": "^2.3.0" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-architects/module-federation": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", + "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", + "requires": { + "@angular-architects/module-federation-runtime": "16.0.4", + "callsite": "^1.0.0", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "word-wrap": "^1.2.3" + } + }, + "@angular-architects/module-federation-runtime": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", + "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular-devkit/architect": { + "version": "0.1601.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.1.tgz", + "integrity": "sha512-LUHaxdAZrvh++7/R+/hzVY5moEVVTjd30b25SNNYcNJsWox1Yh9idu1AvtEuZR/A8Jj+sbHnuw0176GsJ78stg==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.1", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/build-angular": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.1.tgz", + "integrity": "sha512-k+9hQLGgGWHj7NJ7Fm6nwCDsvseKlipKE6Me9ydliNKclwJ0l+ScpXS/iZA1+Geud7IX3McGWf2QemWj1Nds9g==", + "dev": true, + "requires": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.1", + "@angular-devkit/build-webpack": "0.1601.1", + "@angular-devkit/core": "16.1.1", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.5", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.1", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.19", + "css-loader": "6.8.1", + "esbuild": "0.17.19", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.1", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "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 + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1601.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.1.tgz", + "integrity": "sha512-J1O+5qiwCYNCFTKtczhWC3wycuks/3GitmbYv3GMSBz2HJU5XSTtGdlkSvkwCocLHa8ggPlnquLsQNjwcd+EQg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.1", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", + "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "@angular-devkit/schematics": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.2.tgz", + "integrity": "sha512-5CRHrurFwJh7IPpo56DbIjcqzI1usraYwjHKZFeXoW4sQTRP5yeSuJoBM9zuBX5ZFQVCRt24j5DQTlsGk7Ky8Q==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.2", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.2.tgz", + "integrity": "sha512-RGSkcu03Zybg7drenKxBHvQ/xF8LLZR7o09S4vtLVDwMTGW/ZHnZ+YSC0OuRddbtBlBRhjmsQN6HPvXXfwGLkQ==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + } + } + }, + "@angular/animations": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", + "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/cli": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.2.tgz", + "integrity": "sha512-egxjfBbPOjsNNeVpB9IkxaYsvpEDuN1qYocelh7D1sZVegujd3KgQDkRPbrB+hYLRgem32OQQ316s8rg1K9JbA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1601.2", + "@angular-devkit/core": "16.1.2", + "@angular-devkit/schematics": "16.1.2", + "@schematics/angular": "16.1.2", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.3", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1601.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.2.tgz", + "integrity": "sha512-VQg+VxJsTKcxVs7hgLWYJZZmREr3uVEC7qpuQl9r9L6AoALLgefaVMi44w8hsZfuJQsTcGnvpWVhsBS/KwcRGA==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.2", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.2.tgz", + "integrity": "sha512-RGSkcu03Zybg7drenKxBHvQ/xF8LLZR7o09S4vtLVDwMTGW/ZHnZ+YSC0OuRddbtBlBRhjmsQN6HPvXXfwGLkQ==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + } + } + }, + "@angular/common": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", + "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", + "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler-cli": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", + "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", + "dev": true, + "requires": { + "@babel/core": "7.21.8", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "@babel/core": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "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 + } + } + } + } + }, + "@angular/core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", + "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/forms": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", + "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", + "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", + "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", + "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true + }, + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "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 + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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" + } + }, + "@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" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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" + } + }, + "@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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@ngtools/webpack": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.1.tgz", + "integrity": "sha512-ItW8Hhokk4bQuV8qMpPeNCj0f3LDpddJpd5DwryKb0sSNacGlVff/0nCiKjJFPoCmMSg6ivpkZfqbIyL9RGYXw==", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + }, + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "dependencies": { + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@schematics/angular": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.2.tgz", + "integrity": "sha512-SxPX61wVB88meVhJRjqtWadyJ/PEUY9mj51mtH6YBJqaRlfVbxCgjArgke7MJ6oB291yUo6C+oHPYwwSs1f26g==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.2", + "@angular-devkit/schematics": "16.1.2", + "jsonc-parser": "3.2.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.2.tgz", + "integrity": "sha512-RGSkcu03Zybg7drenKxBHvQ/xF8LLZR7o09S4vtLVDwMTGW/ZHnZ+YSC0OuRddbtBlBRhjmsQN6HPvXXfwGLkQ==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + } + } + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true + }, + "@sigstore/tuf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", + "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@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.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "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.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "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" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "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", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "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" + } + }, + "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 + }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "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 + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "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 + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "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" + } + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "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" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "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" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "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", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "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.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.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "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.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "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": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "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", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "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 + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "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" + } + }, + "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", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "critters": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.19.tgz", + "integrity": "sha512-Fm4ZAXsG0VzWy1U30rP4qxbaWGSsqXDgSupJW1OUJGDAs0KWC+j37v7p5a2kZ9BPJvhRzWm3be+Hc9WvQOBUOw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + } + } + }, + "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" + } + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "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 + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "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" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.445", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz", + "integrity": "sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA==", + "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 + }, + "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": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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": "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 + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "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-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true + }, + "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "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" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "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.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + } + } + }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "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", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "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==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "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==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "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" + } + }, + "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" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "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" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "dependencies": { + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.1.tgz", + "integrity": "sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.10.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "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": "13.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", + "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "guacamole-frontend-ext-lib": { + "version": "file:../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib", + "requires": { + "tslib": "^2.3.0" + } + }, + "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 + }, + "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" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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" + } + } + } + }, + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "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", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "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" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "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 + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true + }, + "immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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 + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "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==", + "dev": true + }, + "ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true + }, + "inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + } + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "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" + } + }, + "is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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 + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "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-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "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-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "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 + } + } + }, + "jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "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": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "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-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "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" + } + }, + "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.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "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", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "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==", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "optional": true + }, + "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, + "optional": true + } + } + }, + "less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true + }, + "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" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + } + } + }, + "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" + } + }, + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "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" + }, + "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 + } + } + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "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 + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "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.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.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": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, + "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 + }, + "minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "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", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "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": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "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==", + "dev": true + }, + "ngx-build-plus": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", + "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", + "dev": true, + "requires": { + "@angular-devkit/build-angular": "^16.0.0", + "@schematics/angular": "^16.0.0", + "webpack-merge": "^5.0.0" + } + }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "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", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "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.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "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": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "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.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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 + }, + "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" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "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==", + "dev": true, + "requires": { + "p-try": "^2.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" + } + }, + "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" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "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==", + "dev": true + }, + "pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "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" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + }, + "parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "requires": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + } + }, + "parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "requires": { + "parse5": "^7.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "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 + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-scurry": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.0.tgz", + "integrity": "sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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, + "optional": true + }, + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "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" + } + }, + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "requires": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "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" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "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 + } + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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" + } + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "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": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "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 + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "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 + } + } + }, + "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", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + } + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "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 + }, + "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" + }, + "dependencies": { + "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", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "rollup": { + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "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==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true + }, + "sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "requires": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "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" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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 + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "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": "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 + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + }, + "sigstore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", + "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "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==", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "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", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "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", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "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" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "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" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-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": {} + }, + "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==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "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", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "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" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "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" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "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 + }, + "tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "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", + "mime-types": "~2.1.24" + } + }, + "typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "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==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "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" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-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": {} + }, + "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==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + } + } + }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "requires": { + "typed-assert": "^1.0.8" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "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-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "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" + }, + "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" + } + }, + "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 + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@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" + }, + "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" + } + }, + "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 + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "zone.js": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", + "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", + "requires": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/doc/guacamole-frontend-extension-example/package.json b/doc/guacamole-frontend-extension-example/package.json new file mode 100644 index 0000000000..aa4e882337 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/package.json @@ -0,0 +1,34 @@ +{ + "name": "guacamole-frontend-extension-example", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "run:all": "node node_modules/@angular-architects/module-federation/src/server/mf-dev-server.js" + }, + "private": true, + "dependencies": { + "@angular-architects/module-federation": "^16.0.4", + "@angular/animations": "16.1.1", + "@angular/common": "16.1.1", + "@angular/compiler": "16.1.1", + "@angular/core": "16.1.1", + "@angular/forms": "16.1.1", + "@angular/platform-browser": "16.1.1", + "@angular/platform-browser-dynamic": "16.1.1", + "@angular/router": "16.1.1", + "guacamole-frontend-ext-lib": "file:../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "16.1.1", + "@angular/cli": "~16.1.0", + "@angular/compiler-cli": "16.1.1", + "ngx-build-plus": "^16.0.0", + "typescript": "~5.1.3" + } +} diff --git a/doc/guacamole-frontend-extension-example/src/app/app.component.ts b/doc/guacamole-frontend-extension-example/src/app/app.component.ts new file mode 100644 index 0000000000..97f1af075d --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/app.component.ts @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'guac-root', + standalone: true, + imports: [CommonModule, RouterOutlet], + template: ` + + ` +}) +export class AppComponent { + title = 'guacamole-frontend-extension-example'; +} diff --git a/doc/guacamole-frontend-extension-example/src/app/app.config.ts b/doc/guacamole-frontend-extension-example/src/app/app.config.ts new file mode 100644 index 0000000000..7eb7be507f --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/app.config.ts @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ApplicationConfig } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [provideRouter(routes) ] +}; diff --git a/doc/guacamole-frontend-extension-example/src/app/app.routes.ts b/doc/guacamole-frontend-extension-example/src/app/app.routes.ts new file mode 100644 index 0000000000..8d94036c3e --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/app.routes.ts @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Routes } from '@angular/router'; +import { HomePageComponent } from "./components/home-page.component"; + +export const routes: Routes = [ + { + path: '', + component: HomePageComponent, + }, + + { + path: 'about', + loadComponent: () => import('./components/about-extension-page.component') + .then(m => m.AboutExtensionPageComponent), + title: 'About The Extension' + }, + + // fallback route when the url is not found + {path: '**', redirectTo: '', pathMatch: 'full'} +]; diff --git a/doc/guacamole-frontend-extension-example/src/app/components/about-extension-button.component.ts b/doc/guacamole-frontend-extension-example/src/app/components/about-extension-button.component.ts new file mode 100644 index 0000000000..782d541787 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/components/about-extension-button.component.ts @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, ViewEncapsulation } from '@angular/core'; +import { RouterLink } from "@angular/router"; + +/** + * Displays a button to navigate to the about page. + */ +@Component({ + selector: 'guac-about-extension-button', + template: ` +
      About + `, + imports: [ + RouterLink + ], + encapsulation: ViewEncapsulation.None, + standalone: true +}) +export class AboutExtensionButtonComponent { + +} diff --git a/doc/guacamole-frontend-extension-example/src/app/components/about-extension-page.component.ts b/doc/guacamole-frontend-extension-example/src/app/components/about-extension-page.component.ts new file mode 100644 index 0000000000..1459478ba9 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/components/about-extension-page.component.ts @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, ViewEncapsulation } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterLink } from "@angular/router"; + +/** + * Dispays the about extension page. + */ +@Component({ + selector: 'guac-about-extension-page', + standalone: true, + imports: [CommonModule, RouterLink], + template: ` +

      + This is the about extension page. + + Go back to the extension page +

      + `, + encapsulation: ViewEncapsulation.None, +}) +export class AboutExtensionPageComponent { + +} diff --git a/doc/guacamole-frontend-extension-example/src/app/components/home-page.component.ts b/doc/guacamole-frontend-extension-example/src/app/components/home-page.component.ts new file mode 100644 index 0000000000..10008a7b0b --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/components/home-page.component.ts @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, ViewEncapsulation } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { AboutExtensionButtonComponent } from "./about-extension-button.component"; +import { FormControl } from "@angular/forms"; +import { + FormField +} from "../../../../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib/lib/form/FormField"; +import { RouterLink } from "@angular/router"; +import { PlanetChooserFieldComponent } from "./planet-chooser-field.component"; + +/** + * The home page of the extension. + */ +@Component({ + selector: 'guac-home-page', + standalone: true, + imports: [CommonModule, AboutExtensionButtonComponent, PlanetChooserFieldComponent, RouterLink, PlanetChooserFieldComponent], + template: ` +

      + guacamole-frontend-extension-example works! +

      +

      Planet Chooser Field

      +

      + + Your selected planet is: {{control.value}} +

      + Home + + `, + encapsulation: ViewEncapsulation.None, +}) +export class HomePageComponent { + control = new FormControl(''); + field = {} as FormField; +} diff --git a/doc/guacamole-frontend-extension-example/src/app/components/planet-chooser-field.component.ts b/doc/guacamole-frontend-extension-example/src/app/components/planet-chooser-field.component.ts new file mode 100644 index 0000000000..a00ec6e696 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/components/planet-chooser-field.component.ts @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { + FormField, + FormFieldComponentData +} from "../../../../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib"; +import { FormControl, ReactiveFormsModule } from "@angular/forms"; + +export const PLANET_CHOOSER_FIELD_TYPE = 'planet-chooser'; + +@Component({ + selector: 'app-planet-chooser-field', + standalone: true, + imports: [CommonModule, ReactiveFormsModule], + template: ` + + + + `, + encapsulation: ViewEncapsulation.None +}) +export class PlanetChooserFieldComponent implements FormFieldComponentData { + + @Input({required: true}) disabled!: boolean; + @Input({required: true}) field!: FormField; + @Input({required: true}) focused!: boolean; + @Input({required: true}) namespace!: string | undefined; + @Input() control?: FormControl; + + readonly planets = [ + 'Mercury', + 'Venus', + 'Earth', + 'Mars', + 'Jupiter', + 'Saturn', + 'Uranus', + 'Neptune' + ]; + +} diff --git a/doc/guacamole-frontend-extension-example/src/app/extension.config.ts b/doc/guacamole-frontend-extension-example/src/app/extension.config.ts new file mode 100644 index 0000000000..ff92dc6e9c --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/app/extension.config.ts @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + BootsrapExtensionFunction, + FieldTypeService +} from "../../../../guacamole/src/main/guacamole-frontend/dist/guacamole-frontend-ext-lib"; +import { inject, Injector, runInInjectionContext } from "@angular/core"; +import { Routes } from "@angular/router"; + +import { routes } from "./app.routes"; +import { PLANET_CHOOSER_FIELD_TYPE, PlanetChooserFieldComponent } from "./components/planet-chooser-field.component"; + + +// noinspection JSUnusedGlobalSymbols +/** + * Called by the frontend to initialize the extension. + */ +export const bootsrapExtension: BootsrapExtensionFunction = (injector: Injector): Routes => { + + runInInjectionContext(injector, () => { + + const fieldTypeService = inject(FieldTypeService); + + // Register a new field type + fieldTypeService.registerFieldType(PLANET_CHOOSER_FIELD_TYPE, PlanetChooserFieldComponent); + + }); + + // Return the routes of the extension which will be added to the frontend routes + return routes; +} \ No newline at end of file diff --git a/doc/guacamole-frontend-extension-example/src/bootstrap.ts b/doc/guacamole-frontend-extension-example/src/bootstrap.ts new file mode 100644 index 0000000000..980d52f478 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/bootstrap.ts @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/doc/guacamole-frontend-extension-example/src/index.html b/doc/guacamole-frontend-extension-example/src/index.html new file mode 100644 index 0000000000..938d4d54da --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/index.html @@ -0,0 +1,30 @@ + + + + + + GuacamoleFrontendExtensionExample + + + + + + + diff --git a/doc/guacamole-frontend-extension-example/src/main.ts b/doc/guacamole-frontend-extension-example/src/main.ts new file mode 100644 index 0000000000..1ca96668ab --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/main.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import('./bootstrap') + .catch(err => console.error(err)); diff --git a/doc/guacamole-frontend-extension-example/src/styles.css b/doc/guacamole-frontend-extension-example/src/styles.css new file mode 100644 index 0000000000..be8c847a7a --- /dev/null +++ b/doc/guacamole-frontend-extension-example/src/styles.css @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* You can add global styles to this file, and also import other style files */ diff --git a/doc/guacamole-frontend-extension-example/tsconfig.app.json b/doc/guacamole-frontend-extension-example/tsconfig.app.json new file mode 100644 index 0000000000..fc2818ef54 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/app/extension.config.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} \ No newline at end of file diff --git a/doc/guacamole-frontend-extension-example/tsconfig.json b/doc/guacamole-frontend-extension-example/tsconfig.json new file mode 100644 index 0000000000..9fa16d6333 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} \ No newline at end of file diff --git a/doc/guacamole-frontend-extension-example/webpack.config.js b/doc/guacamole-frontend-extension-example/webpack.config.js new file mode 100644 index 0000000000..9edef63e68 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/webpack.config.js @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const {shareAll, withModuleFederationPlugin} = require('@angular-architects/module-federation/webpack'); +module.exports = withModuleFederationPlugin({ + + name: 'guacamole-frontend-extension-example', + + exposes: { + 'bootsrapExtension': './src/app/extension.config.ts' + }, + + shared: { + ...shareAll({singleton: true, strictVersion: true, requiredVersion: 'auto'}), + }, + +}); diff --git a/doc/guacamole-frontend-extension-example/webpack.prod.config.js b/doc/guacamole-frontend-extension-example/webpack.prod.config.js new file mode 100644 index 0000000000..95295c5b59 --- /dev/null +++ b/doc/guacamole-frontend-extension-example/webpack.prod.config.js @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +module.exports = require('./webpack.config'); diff --git a/guacamole/src/main/guacamole-frontend/angular.json b/guacamole/src/main/guacamole-frontend/angular.json index 45cc7095ce..6159232eae 100644 --- a/guacamole/src/main/guacamole-frontend/angular.json +++ b/guacamole/src/main/guacamole-frontend/angular.json @@ -36,6 +36,7 @@ "input": "projects/guacamole-frontend/src/translations", "output": "translations" }, + "projects/guacamole-frontend/src/moduleFederation/mf.manifest.json", { "glob": "**/*.json", "input": "./node_modules/guacamole-frontend-lib/assets/layouts", diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json deleted file mode 100644 index 360c4a8d71..0000000000 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/assets/mf.manifest.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "mfe1": "http://localhost:3000/remoteEntry.js" -} diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts index 52164f3c84..b6dda6245c 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/main.ts @@ -19,7 +19,7 @@ import { initFederation } from '@angular-architects/module-federation'; -initFederation('/assets/mf.manifest.json') +initFederation('moduleFederation/mf.manifest.json') .catch(err => console.error(err)) .then(_ => import('./bootstrap')) .catch(err => console.error(err)); diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/moduleFederation/mf.manifest.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/moduleFederation/mf.manifest.json new file mode 100644 index 0000000000..b3e3884962 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/moduleFederation/mf.manifest.json @@ -0,0 +1,10 @@ +{ + "extension-example": { + "remoteEntry": "http://localhost:4202/remoteEntry.js", + + "entrypoint": "bootsrapExtension", + "bootsrapFunctionName": "bootsrapExtension", + "pageTitle": "Extension Example", + "routePath": "extension-example" + } +} From 3f76c8dbfa53296a35a9951162b95693dceb585f Mon Sep 17 00:00:00 2001 From: Leonard Wagner <25386154+leonard2901@users.noreply.github.com> Date: Fri, 23 Jun 2023 13:35:40 +0200 Subject: [PATCH 18/80] GUACAMOLE-1085: Move the lib and ext-lib to the frontend workspace --- guacamole/pom.xml | 57 +- .../guacamole-frontend-ext-lib/.editorconfig | 16 - .../guacamole-frontend-ext-lib/.gitignore | 8 - .../main/guacamole-frontend-ext-lib/README.md | 27 - .../guacamole-frontend-ext-lib/angular.json | 40 - .../package-lock.json | 11808 ---------------- .../guacamole-frontend-ext-lib/package.json | 39 - .../guacamole-frontend-ext-lib/tsconfig.json | 38 - .../main/guacamole-frontend-lib/.editorconfig | 16 - .../main/guacamole-frontend-lib/.gitignore | 8 - .../src/main/guacamole-frontend-lib/README.md | 27 - .../main/guacamole-frontend-lib/angular.json | 44 - .../guacamole-frontend-lib/package-lock.json | 11719 --------------- .../main/guacamole-frontend-lib/package.json | 40 - .../guacamole-frontend-lib/package.json | 12 - .../guacamole-frontend-lib/tsconfig.lib.json | 14 - .../main/guacamole-frontend-lib/tsconfig.json | 38 - .../src/main/guacamole-frontend/angular.json | 93 +- .../main/guacamole-frontend/package-lock.json | 5041 ++----- .../src/main/guacamole-frontend/package.json | 3 +- .../guacamole-frontend-ext-lib/.eslintrc.json | 37 + .../guacamole-frontend-ext-lib/README.md | 0 .../ng-package.json | 0 .../guacamole-frontend-ext-lib/package.json | 0 .../src/lib/form/FormField.ts | 0 .../src/lib/form/FormFieldComponentData.ts | 0 .../src/lib/form/field-type.service.ts | 0 .../src/public-api.ts | 0 .../tsconfig.lib.json | 0 .../tsconfig.lib.prod.json | 0 .../tsconfig.spec.json | 0 .../guacamole-frontend-lib/.eslintrc.json | 37 + .../projects/guacamole-frontend-lib/README.md | 0 .../guacamole-frontend-lib/karma.conf.js | 0 .../guacamole-frontend-lib/ng-package.json | 0 .../guacamole-frontend-lib/package.json | 12 + .../src/assets/guacamole-common-js.min.js | 19 + .../src/assets/layouts/de-de-qwertz.json | 0 .../src/assets/layouts/en-us-qwerty.json | 0 .../src/assets/layouts/es-es-qwerty.json | 0 .../src/assets/layouts/fr-fr-azerty.json | 0 .../src/assets/layouts/it-it-qwerty.json | 0 .../src/assets/layouts/nl-nl-qwerty.json | 0 .../src/assets/layouts/ru-ru-qwerty.json | 0 .../src/lib/client/client.module.ts | 0 .../client/components/viewport.component.html | 0 .../client/components/viewport.component.ts | 0 .../services/guac-audio.service.spec.ts | 0 .../lib/client/services/guac-audio.service.ts | 0 .../services/guac-image.service.spec.ts | 0 .../lib/client/services/guac-image.service.ts | 0 .../services/guac-video.service.spec.ts | 0 .../lib/client/services/guac-video.service.ts | 0 .../directives/guac-click.directive.ts | 0 .../directives/guac-focus.directive.ts | 0 .../directives/guac-resize.directive.ts | 0 .../directives/guac-scroll.directive.ts | 0 .../directives/guac-upload.directive.ts | 0 .../src/lib/element/element.module.ts | 0 .../src/lib/element/styles/resize-sensor.css | 0 .../src/lib/element/types/Marker.ts | 0 .../src/lib/element/types/ScrollState.ts | 0 .../services/guac-event.service.spec.ts | 0 .../lib/events/services/guac-event.service.ts | 0 .../src/lib/events/types/GuacEvent.ts | 0 .../lib/events/types/GuacEventArguments.ts | 0 .../lib/osk/components/osk/osk.component.html | 0 .../osk/components/osk/osk.component.spec.ts | 0 .../lib/osk/components/osk/osk.component.ts | 0 .../src/lib/osk/osk.module.ts | 0 .../src/lib/osk/styles/osk.css | 0 .../directives/guac-touch-drag.directive.ts | 0 .../directives/guac-touch-pinch.directive.ts | 0 .../src/lib/touch/touch.module.ts | 0 .../src/lib/types/Guacamole.ts | 0 .../guacamole-frontend-lib/src/public-api.ts | 0 .../src/test-utils/click-helper.ts | 0 .../src/test-utils/test-scheduler.ts | 0 .../guacamole-frontend-lib/tsconfig.lib.json | 14 + .../tsconfig.lib.prod.json | 0 .../guacamole-frontend-lib/tsconfig.spec.json | 0 .../guacamole-frontend/src/styles.css | 4 +- .../src/main/guacamole-frontend/tsconfig.json | 3 + 83 files changed, 1222 insertions(+), 27992 deletions(-) delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/.editorconfig delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/.gitignore delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/README.md delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/angular.json delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/package-lock.json delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/package.json delete mode 100644 guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json delete mode 100644 guacamole/src/main/guacamole-frontend-lib/.editorconfig delete mode 100644 guacamole/src/main/guacamole-frontend-lib/.gitignore delete mode 100644 guacamole/src/main/guacamole-frontend-lib/README.md delete mode 100644 guacamole/src/main/guacamole-frontend-lib/angular.json delete mode 100644 guacamole/src/main/guacamole-frontend-lib/package-lock.json delete mode 100644 guacamole/src/main/guacamole-frontend-lib/package.json delete mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json delete mode 100644 guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json delete mode 100644 guacamole/src/main/guacamole-frontend-lib/tsconfig.json create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/.eslintrc.json rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/README.md (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/ng-package.json (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/package.json (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/src/public-api.ts (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/tsconfig.lib.json (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json (100%) rename guacamole/src/main/{guacamole-frontend-ext-lib => guacamole-frontend}/projects/guacamole-frontend-ext-lib/tsconfig.spec.json (100%) create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/.eslintrc.json rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/README.md (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/karma.conf.js (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/ng-package.json (100%) create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/package.json rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js (98%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/layouts/de-de-qwertz.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/layouts/en-us-qwerty.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/layouts/es-es-qwerty.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/layouts/fr-fr-azerty.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/layouts/it-it-qwerty.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/layouts/nl-nl-qwerty.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/assets/layouts/ru-ru-qwerty.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/client.module.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.html (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/components/viewport.component.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.spec.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/services/guac-audio.service.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.spec.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/services/guac-image.service.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.spec.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/client/services/guac-video.service.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/directives/guac-click.directive.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/directives/guac-focus.directive.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/directives/guac-scroll.directive.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/directives/guac-upload.directive.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/element.module.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/styles/resize-sensor.css (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/types/Marker.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/element/types/ScrollState.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.spec.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/events/services/guac-event.service.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/events/types/GuacEvent.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/events/types/GuacEventArguments.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.spec.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/osk/osk.module.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/osk/styles/osk.css (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-drag.directive.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/touch/directives/guac-touch-pinch.directive.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/touch/touch.module.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/lib/types/Guacamole.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/public-api.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/test-utils/click-helper.ts (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/src/test-utils/test-scheduler.ts (100%) create mode 100644 guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/tsconfig.lib.json rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/tsconfig.lib.prod.json (100%) rename guacamole/src/main/{guacamole-frontend-lib => guacamole-frontend}/projects/guacamole-frontend-lib/tsconfig.spec.json (100%) diff --git a/guacamole/pom.xml b/guacamole/pom.xml index efc4ea1313..3cbc583d54 100644 --- a/guacamole/pom.xml +++ b/guacamole/pom.xml @@ -1,22 +1,22 @@ + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + --> =6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.17.19" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "@angular/localize": "^16.1.0", - "@angular/platform-server": "^16.1.0", - "@angular/service-worker": "^16.1.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^16.1.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.1.tgz", - "integrity": "sha512-s8LFr0m4ILEpJuQj78fCWKocnRleA3MWJU1Q5LZloCcUB8fdDvaPNCt5s0VWC2Sp+4OCxJaSN3kjjcFbCYFvTA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.1", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", - "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - } - }, - "node_modules/@angular/cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.1.tgz", - "integrity": "sha512-QrTgMqMnamteZu2x3JhLMo6wBjI05zMr9RQfMHWq4UrUpTqBcHAMqJIKSSbvrtuRbolLrQyLorwxzlmEOfEmbQ==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.1", - "@angular-devkit/core": "16.1.1", - "@angular-devkit/schematics": "16.1.1", - "@schematics/angular": "16.1.1", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1601.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.1.tgz", - "integrity": "sha512-LUHaxdAZrvh++7/R+/hzVY5moEVVTjd30b25SNNYcNJsWox1Yh9idu1AvtEuZR/A8Jj+sbHnuw0176GsJ78stg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", - "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "dependencies": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler": "16.1.1", - "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.1.1", - "@angular/common": "16.1.1", - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/compiler": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1" - } - }, - "node_modules/@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/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/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "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": "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/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@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-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/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/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "typescript": ">=4.9.3 <5.2", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@schematics/angular": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.1.tgz", - "integrity": "sha512-mJo7FxH3dekG7m4hHW5PyWbiCUaU+DSW93j+cikEksda+Qt6NaEX0hM0W3DjH7O+BnEg6dbAEd2GDSN/0XQghw==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.1", - "@angular-devkit/schematics": "16.1.1", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.1.tgz", - "integrity": "sha512-rhyY/N4iKbpfKmErmNmAfBLMrc1H8u8NlfcU6lwN6kbBbM8BfvLk9b7g4JXOfiOQfp4BnQ8CFf7xcIUy4++Tog==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.4.tgz", - "integrity": "sha512-DsJbnxCdjmhRP7dXwjD6JcPc+z7V/4mG3VA1cEFec/+R343TaNPnZ9eJzMkjR4T1BYkjkDIUsPDybkDC0qLrvA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", - "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true, - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "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 - }, - "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 - }, - "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 - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "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 - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "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, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", - "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "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.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.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, - "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, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "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, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "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, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "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/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "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, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", - "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "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 - }, - "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, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "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==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "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, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "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, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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 - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "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, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", - "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "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 - }, - "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, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "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, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "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": [ - { - "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/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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 - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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/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/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/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "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, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "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, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", - "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "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 - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/karma": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", - "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", - "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", - "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", - "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", - "dev": true, - "peerDependencies": { - "jasmine-core": "^4.0.0 || ^5.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "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, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/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/karma/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/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "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/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", - "dev": true, - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/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==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/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, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/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, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "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/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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 - }, - "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, - "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "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, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "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/make-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/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "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 - }, - "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, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "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 - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect/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 - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/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 - }, - "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, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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 - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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 - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "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 - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "dependencies": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "bin": { - "ng-packagr": "cli/main.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "optionalDependencies": { - "esbuild": "^0.17.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "tslib": "^2.3.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/ng-packagr/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "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==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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, - "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "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 - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "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, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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 - }, - "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/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/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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 - }, - "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, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/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 - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", - "dev": true, - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", - "dev": true, - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=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/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/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "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/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "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, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "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/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.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 - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "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, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "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, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "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 - }, - "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 - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "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 - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/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/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, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "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, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "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, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", - "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "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==", - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "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, - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/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 - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "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, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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/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/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.2.tgz", - "integrity": "sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.2", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, - "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", - "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/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/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/tar/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 - }, - "node_modules/terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/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 - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "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 - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "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, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "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==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", - "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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, - "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": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/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 - }, - "node_modules/webpack/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==", - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "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/wrap-ansi-cjs": { - "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-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, - "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", - "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/wrap-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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/zone.js": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", - "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", - "dependencies": { - "tslib": "^2.3.0" - } - } - } -} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/package.json b/guacamole/src/main/guacamole-frontend-ext-lib/package.json deleted file mode 100644 index 7ba66c4c01..0000000000 --- a/guacamole/src/main/guacamole-frontend-ext-lib/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "guacamole-frontend-ext-lib", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" - }, - "private": true, - "dependencies": { - "@angular/animations": "^16.1.0", - "@angular/common": "^16.1.0", - "@angular/compiler": "^16.1.0", - "@angular/core": "^16.1.0", - "@angular/forms": "^16.1.0", - "@angular/platform-browser": "^16.1.0", - "@angular/platform-browser-dynamic": "^16.1.0", - "@angular/router": "^16.1.0", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.0", - "@types/jasmine": "~4.3.0", - "jasmine-core": "~4.6.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "ng-packagr": "^16.1.0", - "typescript": "~5.1.3" - } -} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json b/guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json deleted file mode 100644 index c4b05939f9..0000000000 --- a/guacamole/src/main/guacamole-frontend-ext-lib/tsconfig.json +++ /dev/null @@ -1,38 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "paths": { - "guacamole-frontend-ext-lib": [ - "dist/guacamole-frontend-ext-lib" - ] - }, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "ES2022", - "module": "ES2022", - "useDefineForClassFields": false, - "lib": [ - "ES2022", - "dom" - ] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/guacamole/src/main/guacamole-frontend-lib/.editorconfig b/guacamole/src/main/guacamole-frontend-lib/.editorconfig deleted file mode 100644 index 0792692308..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 4 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/guacamole/src/main/guacamole-frontend-lib/.gitignore b/guacamole/src/main/guacamole-frontend-lib/.gitignore deleted file mode 100644 index 056c0d3f86..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Compiled output -dist/ - -# Node -node_modules/ - -# Miscellaneous -.angular/ diff --git a/guacamole/src/main/guacamole-frontend-lib/README.md b/guacamole/src/main/guacamole-frontend-lib/README.md deleted file mode 100644 index 0701115037..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# GuacamoleFrontendLib - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/guacamole/src/main/guacamole-frontend-lib/angular.json b/guacamole/src/main/guacamole-frontend-lib/angular.json deleted file mode 100644 index 7f186cad83..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/angular.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "guacamole-frontend-lib": { - "projectType": "library", - "root": "projects/guacamole-frontend-lib", - "sourceRoot": "projects/guacamole-frontend-lib/src", - "prefix": "guac", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:ng-packagr", - "options": { - "project": "projects/guacamole-frontend-lib/ng-package.json" - }, - "configurations": { - "production": { - "tsConfig": "projects/guacamole-frontend-lib/tsconfig.lib.prod.json" - }, - "development": { - "tsConfig": "projects/guacamole-frontend-lib/tsconfig.lib.json" - } - }, - "defaultConfiguration": "production" - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "tsConfig": "projects/guacamole-frontend-lib/tsconfig.spec.json", - "polyfills": [ - "zone.js", - "zone.js/testing" - ], - "scripts": [ - "projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js" - ], - "karmaConfig": "projects/guacamole-frontend-lib/karma.conf.js" - } - } - } - } - } -} diff --git a/guacamole/src/main/guacamole-frontend-lib/package-lock.json b/guacamole/src/main/guacamole-frontend-lib/package-lock.json deleted file mode 100644 index d58d8b214d..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/package-lock.json +++ /dev/null @@ -1,11719 +0,0 @@ -{ - "name": "guacamole-frontend-lib", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "guacamole-frontend-lib", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^16.1.0", - "@angular/common": "^16.1.0", - "@angular/compiler": "^16.1.0", - "@angular/core": "^16.1.0", - "@angular/forms": "^16.1.0", - "@angular/platform-browser": "^16.1.0", - "@angular/platform-browser-dynamic": "^16.1.0", - "@angular/router": "^16.1.0", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.0", - "@types/jasmine": "~4.3.0", - "jasmine-core": "~4.6.0", - "karma": "~6.4.0", - "karma-coverage": "~2.2.0", - "karma-firefox-launcher": "~2.1.2", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "ng-packagr": "^16.1.0", - "typescript": "~5.1.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/build-webpack": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.0", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "4.21.7", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.18", - "css-loader": "6.8.1", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.1", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.17.19" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "@angular/localize": "^16.1.0", - "@angular/platform-server": "^16.1.0", - "@angular/service-worker": "^16.1.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^16.1.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/animations": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - } - }, - "node_modules/@angular/cli": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.0", - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "@schematics/angular": "16.1.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.1", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/common": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", - "dev": true, - "dependencies": { - "@babel/core": "7.21.8", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler": "16.1.1", - "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/core": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.1.1", - "@angular/common": "16.1.1", - "@angular/core": "16.1.1" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/compiler": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1" - } - }, - "node_modules/@angular/router": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.1", - "@angular/core": "16.1.1", - "@angular/platform-browser": "16.1.1", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/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/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "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": "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/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/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/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@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-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.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-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.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.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.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-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.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-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/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/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@ngtools/webpack": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.1.0", - "typescript": ">=4.9.3 <5.2", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@schematics/angular": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.0", - "@angular-devkit/schematics": "16.1.0", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.4.tgz", - "integrity": "sha512-DsJbnxCdjmhRP7dXwjD6JcPc+z7V/4mG3VA1cEFec/+R343TaNPnZ9eJzMkjR4T1BYkjkDIUsPDybkDC0qLrvA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", - "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true, - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "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 - }, - "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 - }, - "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 - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "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 - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "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, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", - "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "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.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.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, - "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, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "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, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/critters": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/critters/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/critters/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/critters/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/critters/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/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/cross-spawn/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/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "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/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "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, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true - }, - "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/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "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, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", - "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "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 - }, - "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, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "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==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "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, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "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, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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 - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "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, - "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==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", - "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "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 - }, - "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, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "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, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "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": [ - { - "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/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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 - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/injection-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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/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/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/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "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, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "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, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", - "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "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 - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "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": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/karma": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", - "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", - "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-firefox-launcher": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", - "dev": true, - "dependencies": { - "is-wsl": "^2.2.0", - "which": "^2.0.1" - } - }, - "node_modules/karma-firefox-launcher/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/karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", - "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", - "dev": true, - "peerDependencies": { - "jasmine-core": "^4.0.0 || ^5.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "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, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/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/karma/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/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "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/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", - "dev": true, - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/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==", - "dev": true, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/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, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/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, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "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/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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 - }, - "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, - "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "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, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "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/make-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/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "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 - }, - "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, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "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 - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect/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 - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/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 - }, - "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, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/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 - }, - "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, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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 - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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 - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "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 - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/ng-packagr": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", - "dev": true, - "dependencies": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", - "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", - "cacache": "^17.0.0", - "chokidar": "^3.5.3", - "commander": "^10.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^0.11.0", - "esbuild-wasm": "^0.17.0", - "fast-glob": "^3.2.12", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.1.3", - "ora": "^5.1.0", - "piscina": "^3.2.0", - "postcss": "^8.4.16", - "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" - }, - "bin": { - "ng-packagr": "cli/main.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "optionalDependencies": { - "esbuild": "^0.17.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0 || ^16.1.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "tslib": "^2.3.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/ng-packagr/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "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==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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, - "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": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "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 - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "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, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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 - }, - "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/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/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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 - }, - "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, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/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 - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", - "dev": true, - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", - "dev": true, - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=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/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/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "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/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "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, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "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/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", - "dev": true, - "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.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 - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "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, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "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, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "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 - }, - "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 - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "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 - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/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/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, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "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, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "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, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", - "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "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==", - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "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, - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/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 - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/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, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "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": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "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, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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/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/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sigstore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.0", - "make-fetch-happen": "^11.0.1", - "tuf-js": "^1.1.3" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.2.tgz", - "integrity": "sha512-Vp+lSks5k0dewYTfwgPT9UeGGd+ht7sCpB7p0e83VgO4X/AHYWhXITMrNk/pg8syY2bpx23ptClCQuHhqi2BgQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.2", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, - "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", - "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/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/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/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, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/tar/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 - }, - "node_modules/terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/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 - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "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 - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "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, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "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==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", - "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "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, - "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": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/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 - }, - "node_modules/webpack/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==", - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "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/wrap-ansi-cjs": { - "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-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, - "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", - "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/wrap-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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "dependencies": { - "cuint": "^0.2.2" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/zone.js": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", - "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", - "dependencies": { - "tslib": "^2.3.0" - } - } - } -} diff --git a/guacamole/src/main/guacamole-frontend-lib/package.json b/guacamole/src/main/guacamole-frontend-lib/package.json deleted file mode 100644 index 7237dddc7f..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "guacamole-frontend-lib", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" - }, - "private": true, - "dependencies": { - "@angular/animations": "^16.1.0", - "@angular/common": "^16.1.0", - "@angular/compiler": "^16.1.0", - "@angular/core": "^16.1.0", - "@angular/forms": "^16.1.0", - "@angular/platform-browser": "^16.1.0", - "@angular/platform-browser-dynamic": "^16.1.0", - "@angular/router": "^16.1.0", - "guacamole-frontend-ext-lib": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.13.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^16.1.0", - "@angular/cli": "~16.1.0", - "@angular/compiler-cli": "^16.1.0", - "@types/jasmine": "~4.3.0", - "jasmine-core": "~4.6.0", - "karma": "~6.4.0", - "karma-coverage": "~2.2.0", - "karma-firefox-launcher": "~2.1.2", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "ng-packagr": "^16.1.0", - "typescript": "~5.1.3" - } -} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json deleted file mode 100644 index 3689b01404..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "guacamole-frontend-lib", - "version": "0.0.1", - "peerDependencies": { - "@angular/common": "^16.1.0", - "@angular/core": "^16.1.0" - }, - "dependencies": { - "tslib": "^2.3.0" - }, - "sideEffects": false -} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json b/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json deleted file mode 100644 index f326bdb7a0..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/tsconfig.lib.json +++ /dev/null @@ -1,14 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/lib", - "declaration": true, - "declarationMap": true, - "inlineSources": true, - "types": [] - }, - "exclude": [ - "**/*.spec.ts" - ] -} diff --git a/guacamole/src/main/guacamole-frontend-lib/tsconfig.json b/guacamole/src/main/guacamole-frontend-lib/tsconfig.json deleted file mode 100644 index d43420139c..0000000000 --- a/guacamole/src/main/guacamole-frontend-lib/tsconfig.json +++ /dev/null @@ -1,38 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "paths": { - "guacamole-frontend-lib": [ - "dist/guacamole-frontend-lib" - ] - }, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "ES2022", - "module": "ES2022", - "useDefineForClassFields": false, - "lib": [ - "ES2022", - "dom" - ] - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/guacamole/src/main/guacamole-frontend/angular.json b/guacamole/src/main/guacamole-frontend/angular.json index 6159232eae..775ebb02a1 100644 --- a/guacamole/src/main/guacamole-frontend/angular.json +++ b/guacamole/src/main/guacamole-frontend/angular.json @@ -39,17 +39,18 @@ "projects/guacamole-frontend/src/moduleFederation/mf.manifest.json", { "glob": "**/*.json", - "input": "./node_modules/guacamole-frontend-lib/assets/layouts", + "input": "dist/guacamole-frontend-lib/assets/layouts", "output": "layouts" } ], "styles": [ - "projects/guacamole-frontend/src/styles.css" + "projects/guacamole-frontend/src/styles.css", + "dist/guacamole-frontend-lib/assets/styles/element/styles/resize-sensor.css", + "dist/guacamole-frontend-lib/assets/styles/osk/styles/osk.css" ], "scripts": [ - "./node_modules/guacamole-frontend-lib/assets/guacamole-common-js.min.js" + "dist/guacamole-frontend-lib/assets/guacamole-common-js.min.js" ], - "preserveSymlinks": true, "extraWebpackConfig": "projects/guacamole-frontend/webpack.config.js", "commonChunk": false }, @@ -137,6 +138,90 @@ } } } + }, + "guacamole-frontend-lib": { + "projectType": "library", + "root": "projects/guacamole-frontend-lib", + "sourceRoot": "projects/guacamole-frontend-lib/src", + "prefix": "guac", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/guacamole-frontend-lib/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/guacamole-frontend-lib/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/guacamole-frontend-lib/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/guacamole-frontend-lib/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "projects/guacamole-frontend-lib/**/*.ts", + "projects/guacamole-frontend-lib/**/*.html" + ] + } + } + } + }, + "guacamole-frontend-ext-lib": { + "projectType": "library", + "root": "projects/guacamole-frontend-ext-lib", + "sourceRoot": "projects/guacamole-frontend-ext-lib/src", + "prefix": "guac", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/guacamole-frontend-ext-lib/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/guacamole-frontend-ext-lib/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/guacamole-frontend-ext-lib/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "projects/guacamole-frontend-ext-lib/**/*.ts", + "projects/guacamole-frontend-ext-lib/**/*.html" + ] + } + } + } } }, "cli": { diff --git a/guacamole/src/main/guacamole-frontend/package-lock.json b/guacamole/src/main/guacamole-frontend/package-lock.json index 36c96bcd46..7de8e37815 100644 --- a/guacamole/src/main/guacamole-frontend/package-lock.json +++ b/guacamole/src/main/guacamole-frontend/package-lock.json @@ -22,8 +22,6 @@ "@simonwep/pickr": "^1.8.2", "angular-expressions": "^1.1.9", "file-saver": "^2.0.5", - "guacamole-frontend-ext-lib": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", - "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", "jstz": "^2.1.1", "lodash": "^4.17.21", "rxjs": "~7.8.0", @@ -57,37 +55,6 @@ "typescript": "~5.1.3" } }, - "../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib": { - "version": "0.0.1", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^16.1.0", - "@angular/core": "^16.1.0" - } - }, - "../guacamole-frontend-lib/dist/guacamole-frontend-lib": { - "version": "0.0.1", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^16.1.0", - "@angular/core": "^16.1.0" - } - }, - "../ngx-guacamole/dist/ngx-guacamole": { - "version": "0.0.1", - "extraneous": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^15.2.0", - "@angular/core": "^15.2.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "dev": true, @@ -102,8 +69,7 @@ }, "node_modules/@angular-architects/module-federation": { "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", - "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", + "license": "MIT", "dependencies": { "@angular-architects/module-federation-runtime": "16.0.4", "callsite": "^1.0.0", @@ -120,8 +86,7 @@ }, "node_modules/@angular-architects/module-federation-runtime": { "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", - "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -133,9 +98,8 @@ }, "node_modules/@angular-devkit/architect": { "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/core": "16.1.0", "rxjs": "7.8.1" @@ -148,9 +112,8 @@ }, "node_modules/@angular-devkit/build-angular": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "2.2.1", "@angular-devkit/architect": "0.1601.0", @@ -270,9 +233,8 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", @@ -300,18 +262,16 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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-devkit/build-angular/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" }, @@ -321,9 +281,8 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/semver": { "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -336,15 +295,13 @@ }, "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-webpack": { "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/architect": "0.1601.0", "rxjs": "7.8.1" @@ -361,9 +318,8 @@ }, "node_modules/@angular-devkit/core": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "8.12.0", "ajv-formats": "2.1.1", @@ -387,9 +343,8 @@ }, "node_modules/@angular-devkit/schematics": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/core": "16.1.0", "jsonc-parser": "3.2.0", @@ -405,9 +360,8 @@ }, "node_modules/@angular-eslint/builder": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", - "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", "dev": true, + "license": "MIT", "dependencies": { "@nx/devkit": "16.2.2", "nx": "16.2.2" @@ -419,15 +373,13 @@ }, "node_modules/@angular-eslint/bundled-angular-compiler": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", - "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@angular-eslint/eslint-plugin": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", - "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", "dev": true, + "license": "MIT", "dependencies": { "@angular-eslint/utils": "16.0.3", "@typescript-eslint/utils": "5.59.7" @@ -439,9 +391,8 @@ }, "node_modules/@angular-eslint/eslint-plugin-template": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", - "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", "dev": true, + "license": "MIT", "dependencies": { "@angular-eslint/bundled-angular-compiler": "16.0.3", "@angular-eslint/utils": "16.0.3", @@ -457,9 +408,8 @@ }, "node_modules/@angular-eslint/schematics": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", - "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", "dev": true, + "license": "MIT", "dependencies": { "@angular-eslint/eslint-plugin": "16.0.3", "@angular-eslint/eslint-plugin-template": "16.0.3", @@ -475,9 +425,8 @@ }, "node_modules/@angular-eslint/schematics/node_modules/tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, + "license": "MIT", "dependencies": { "rimraf": "^3.0.0" }, @@ -487,9 +436,8 @@ }, "node_modules/@angular-eslint/template-parser": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", - "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", "dev": true, + "license": "MIT", "dependencies": { "@angular-eslint/bundled-angular-compiler": "16.0.3", "eslint-scope": "^7.0.0" @@ -501,9 +449,8 @@ }, "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -517,18 +464,16 @@ }, "node_modules/@angular-eslint/template-parser/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/@angular-eslint/utils": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", - "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", "dev": true, + "license": "MIT", "dependencies": { "@angular-eslint/bundled-angular-compiler": "16.0.3", "@typescript-eslint/utils": "5.59.7" @@ -540,8 +485,7 @@ }, "node_modules/@angular/animations": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -554,9 +498,8 @@ }, "node_modules/@angular/cli": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/architect": "0.1601.0", "@angular-devkit/core": "16.1.0", @@ -588,9 +531,8 @@ }, "node_modules/@angular/cli/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" }, @@ -600,9 +542,8 @@ }, "node_modules/@angular/cli/node_modules/semver": { "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -615,14 +556,12 @@ }, "node_modules/@angular/cli/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/@angular/common": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -636,8 +575,7 @@ }, "node_modules/@angular/compiler": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -655,9 +593,8 @@ }, "node_modules/@angular/compiler-cli": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "7.21.8", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -683,8 +620,7 @@ }, "node_modules/@angular/core": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -698,8 +634,7 @@ }, "node_modules/@angular/forms": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -715,8 +650,7 @@ }, "node_modules/@angular/platform-browser": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -736,8 +670,7 @@ }, "node_modules/@angular/platform-browser-dynamic": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -753,8 +686,7 @@ }, "node_modules/@angular/router": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, @@ -770,9 +702,8 @@ }, "node_modules/@assemblyscript/loader": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@babel/code-frame": { "version": "7.22.5", @@ -831,9 +762,8 @@ }, "node_modules/@babel/generator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", @@ -846,9 +776,8 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -858,9 +787,8 @@ }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -896,9 +824,8 @@ }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", @@ -919,18 +846,16 @@ }, "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-create-regexp-features-plugin": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -945,18 +870,16 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-define-polyfill-provider": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -971,9 +894,8 @@ }, "node_modules/@babel/helper-define-polyfill-provider/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" } @@ -1011,9 +933,8 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -1023,9 +944,8 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -1035,9 +955,8 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", @@ -1054,9 +973,8 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -1066,18 +984,16 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", @@ -1093,9 +1009,8 @@ }, "node_modules/@babel/helper-replace-supers": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", @@ -1110,9 +1025,8 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -1122,9 +1036,8 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -1134,9 +1047,8 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -1169,9 +1081,8 @@ }, "node_modules/@babel/helper-wrap-function": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.5", @@ -1220,9 +1131,8 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1235,9 +1145,8 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1252,9 +1161,8 @@ }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", @@ -1270,9 +1178,8 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -1282,9 +1189,8 @@ }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1298,9 +1204,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" }, @@ -1310,9 +1215,8 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1322,9 +1226,8 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1337,9 +1240,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" }, @@ -1349,9 +1251,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" }, @@ -1361,9 +1262,8 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1376,9 +1276,8 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1391,9 +1290,8 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1403,9 +1301,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" }, @@ -1415,9 +1312,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" }, @@ -1427,9 +1323,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" }, @@ -1439,9 +1334,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" }, @@ -1451,9 +1345,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" }, @@ -1463,9 +1356,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" }, @@ -1475,9 +1367,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" }, @@ -1487,9 +1378,8 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1502,9 +1392,8 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1517,9 +1406,8 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1533,9 +1421,8 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1548,9 +1435,8 @@ }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1566,9 +1452,8 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1583,9 +1468,8 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1598,9 +1482,8 @@ }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1613,9 +1496,8 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1629,9 +1511,8 @@ }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1646,9 +1527,8 @@ }, "node_modules/@babel/plugin-transform-classes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.5", @@ -1669,9 +1549,8 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.5" @@ -1685,9 +1564,8 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1700,9 +1578,8 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1716,9 +1593,8 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1731,9 +1607,8 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1747,9 +1622,8 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1763,9 +1637,8 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1779,9 +1652,8 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1794,9 +1666,8 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.5", "@babel/helper-function-name": "^7.22.5", @@ -1811,9 +1682,8 @@ }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1827,9 +1697,8 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1842,9 +1711,8 @@ }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1858,9 +1726,8 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1873,9 +1740,8 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1889,9 +1755,8 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1906,9 +1771,8 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.22.5", @@ -1924,9 +1788,8 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1940,9 +1803,8 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1956,9 +1818,8 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1971,9 +1832,8 @@ }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1987,9 +1847,8 @@ }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -2003,9 +1862,8 @@ }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.5", @@ -2022,9 +1880,8 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5" @@ -2038,9 +1895,8 @@ }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -2054,9 +1910,8 @@ }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -2071,9 +1926,8 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2086,9 +1940,8 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -2102,9 +1955,8 @@ }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.5", @@ -2120,9 +1972,8 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2135,9 +1986,8 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.1" @@ -2151,9 +2001,8 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2166,9 +2015,8 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -2186,18 +2034,16 @@ }, "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2210,9 +2056,8 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -2226,9 +2071,8 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2241,9 +2085,8 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2256,9 +2099,8 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2271,9 +2113,8 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2286,9 +2127,8 @@ }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -2302,9 +2142,8 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -2318,9 +2157,8 @@ }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -2334,9 +2172,8 @@ }, "node_modules/@babel/preset-env": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.5", @@ -2428,18 +2265,16 @@ }, "node_modules/@babel/preset-env/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/@babel/preset-modules": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2453,15 +2288,13 @@ }, "node_modules/@babel/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/runtime": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2471,9 +2304,8 @@ }, "node_modules/@babel/template": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.5", "@babel/parser": "^7.22.5", @@ -2526,9 +2358,8 @@ }, "node_modules/@cypress/request": { "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2555,9 +2386,8 @@ }, "node_modules/@cypress/request/node_modules/qs": { "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -2570,9 +2400,8 @@ }, "node_modules/@cypress/xvfb": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -2580,9 +2409,8 @@ }, "node_modules/@cypress/xvfb/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" } @@ -2595,432 +2423,89 @@ "node": ">=10.0.0" } }, - "node_modules/@esbuild/android-arm": { + "node_modules/@esbuild/win32-x64": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "cpu": [ - "arm" + "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "android" + "win32" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -3033,9 +2518,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3045,15 +2529,13 @@ }, "node_modules/@eslint/eslintrc/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -3063,18 +2545,16 @@ }, "node_modules/@eslint/js": { "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -3086,9 +2566,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -3099,15 +2578,13 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3122,9 +2599,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3134,9 +2610,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3146,15 +2621,13 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -3169,9 +2642,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -3184,9 +2656,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -3281,9 +2752,8 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@messageformat/core": { "version": "3.1.0", @@ -3358,9 +2828,8 @@ }, "node_modules/@ngtools/webpack": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.14.0 || >=18.10.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", @@ -3406,9 +2875,8 @@ }, "node_modules/@npmcli/fs": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, + "license": "ISC", "dependencies": { "semver": "^7.3.5" }, @@ -3418,9 +2886,8 @@ }, "node_modules/@npmcli/git": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", @@ -3437,18 +2904,16 @@ }, "node_modules/@npmcli/git/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/@npmcli/git/node_modules/which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3461,9 +2926,8 @@ }, "node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, + "license": "ISC", "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -3477,18 +2941,16 @@ }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/promise-spawn": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, + "license": "ISC", "dependencies": { "which": "^3.0.0" }, @@ -3498,9 +2960,8 @@ }, "node_modules/@npmcli/promise-spawn/node_modules/which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3513,9 +2974,8 @@ }, "node_modules/@npmcli/run-script": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/promise-spawn": "^6.0.0", @@ -3529,9 +2989,8 @@ }, "node_modules/@npmcli/run-script/node_modules/which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3544,18 +3003,16 @@ }, "node_modules/@nrwl/devkit": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", "dev": true, + "license": "MIT", "dependencies": { "@nx/devkit": "16.2.2" } }, "node_modules/@nrwl/tao": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", - "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", "dev": true, + "license": "MIT", "dependencies": { "nx": "16.2.2" }, @@ -3565,9 +3022,8 @@ }, "node_modules/@nx/devkit": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", "dev": true, + "license": "MIT", "dependencies": { "@nrwl/devkit": "16.2.2", "ejs": "^3.1.7", @@ -3582,9 +3038,8 @@ }, "node_modules/@nx/devkit/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" }, @@ -3594,169 +3049,36 @@ }, "node_modules/@nx/devkit/node_modules/semver": { "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nx/devkit/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/@nx/devkit/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 - }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", - "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-darwin-x64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", - "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", - "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", - "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", - "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", - "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", - "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", - "cpu": [ - "x64" - ], + "node_modules/@nx/devkit/node_modules/tmp": { + "version": "0.2.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=8.17.0" } }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", - "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", - "cpu": [ - "arm64" - ], + "node_modules/@nx/devkit/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } + "license": "ISC" }, "node_modules/@nx/nx-win32-x64-msvc": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", - "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", "cpu": [ "x64" ], @@ -3771,10 +3093,9 @@ }, "node_modules/@parcel/watcher": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-addon-api": "^3.2.1", "node-gyp-build": "^4.3.0" @@ -3789,9 +3110,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -3799,9 +3119,8 @@ }, "node_modules/@rollup/plugin-json": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1" }, @@ -3819,9 +3138,8 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -3844,9 +3162,8 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -3866,9 +3183,8 @@ }, "node_modules/@schematics/angular": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/core": "16.1.0", "@angular-devkit/schematics": "16.1.0", @@ -3882,18 +3198,16 @@ }, "node_modules/@sigstore/protobuf-specs": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@sigstore/tuf": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.1.0", "make-fetch-happen": "^11.0.1", @@ -3918,27 +3232,24 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@tufjs/canonical-json": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, + "license": "MIT", "dependencies": { "@tufjs/canonical-json": "1.0.0", "minimatch": "^9.0.0" @@ -3949,18 +3260,16 @@ }, "node_modules/@tufjs/models/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@tufjs/models/node_modules/minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3973,9 +3282,8 @@ }, "node_modules/@types/body-parser": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -3983,27 +3291,24 @@ }, "node_modules/@types/bonjour": { "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -4047,9 +3352,8 @@ }, "node_modules/@types/express": { "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -4059,9 +3363,8 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4076,9 +3379,8 @@ }, "node_modules/@types/http-proxy": { "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4100,9 +3402,8 @@ }, "node_modules/@types/mime": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "18.16.0", @@ -4111,39 +3412,33 @@ }, "node_modules/@types/qs": { "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4151,18 +3446,16 @@ }, "node_modules/@types/serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "*", "@types/node": "*" @@ -4170,39 +3463,34 @@ }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/sizzle": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/sockjs": { "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/ws": { "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -4210,9 +3498,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", - "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.59.7", @@ -4244,9 +3531,8 @@ }, "node_modules/@typescript-eslint/parser": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "5.59.7", "@typescript-eslint/types": "5.59.7", @@ -4271,9 +3557,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.59.7", "@typescript-eslint/visitor-keys": "5.59.7" @@ -4288,9 +3573,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "5.59.7", "@typescript-eslint/utils": "5.59.7", @@ -4315,9 +3599,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4328,9 +3611,8 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "5.59.7", "@typescript-eslint/visitor-keys": "5.59.7", @@ -4355,9 +3637,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -4375,18 +3656,16 @@ }, "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/utils": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", @@ -4410,9 +3689,8 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.59.7", "eslint-visitor-keys": "^3.3.0" @@ -4584,9 +3862,8 @@ }, "node_modules/@yarnpkg/parsers": { "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "js-yaml": "^3.10.0", "tslib": "^2.4.0" @@ -4597,9 +3874,8 @@ }, "node_modules/@zkochan/js-yaml": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4609,9 +3885,8 @@ }, "node_modules/@zkochan/js-yaml/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/abab": { "version": "2.0.6", @@ -4620,9 +3895,8 @@ }, "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.8", @@ -4649,18 +3923,16 @@ }, "node_modules/acorn-import-assertions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4703,9 +3975,8 @@ }, "node_modules/agentkeepalive": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "depd": "^2.0.0", @@ -4717,9 +3988,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" @@ -4798,12 +4068,11 @@ }, "node_modules/ansi-html-community": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -4839,14 +4108,11 @@ }, "node_modules/aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/arch": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true, "funding": [ { @@ -4861,13 +4127,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/are-we-there-yet": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4886,18 +4152,16 @@ }, "node_modules/aria-query": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "deep-equal": "^2.0.5" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -4908,71 +4172,61 @@ }, "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 + "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/asn1": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "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": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "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": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "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/autoprefixer": { "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "dev": true, "funding": [ { @@ -4984,6 +4238,7 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } ], + "license": "MIT", "dependencies": { "browserslist": "^4.21.5", "caniuse-lite": "^1.0.30001464", @@ -5004,9 +4259,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5016,24 +4270,21 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/axios": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -5042,9 +4293,8 @@ }, "node_modules/axios/node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -5056,15 +4306,13 @@ }, "node_modules/axios/node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/axobject-query": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "deep-equal": "^2.0.5" } @@ -5102,9 +4350,8 @@ }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.4.0", @@ -5116,18 +4363,16 @@ }, "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.0", "core-js-compat": "^3.30.1" @@ -5138,9 +4383,8 @@ }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.0" }, @@ -5180,15 +4424,13 @@ }, "node_modules/batch": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } @@ -5220,15 +4462,13 @@ }, "node_modules/blob-util": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true + "dev": true, + "license": "Apache-2.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/body-parser": { "version": "1.20.2", @@ -5268,9 +4508,8 @@ }, "node_modules/bonjour-service": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dev": true, + "license": "MIT", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -5280,9 +4519,8 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -5305,8 +4543,6 @@ }, "node_modules/browserslist": { "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", "dev": true, "funding": [ { @@ -5322,6 +4558,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001489", "electron-to-chromium": "^1.4.411", @@ -5359,9 +4596,8 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -5373,9 +4609,8 @@ }, "node_modules/builtin-modules": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5385,9 +4620,8 @@ }, "node_modules/builtins": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.0.0" } @@ -5402,9 +4636,8 @@ }, "node_modules/cacache": { "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -5425,18 +4658,16 @@ }, "node_modules/cacache/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/cacache/node_modules/glob": { "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", @@ -5456,18 +4687,16 @@ }, "node_modules/cacache/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/cacache/node_modules/minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5480,9 +4709,8 @@ }, "node_modules/cachedir": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5501,8 +4729,6 @@ }, "node_modules/callsite": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", "engines": { "node": "*" } @@ -5524,8 +4750,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", "dev": true, "funding": [ { @@ -5540,13 +4764,13 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/chalk": { "version": "2.4.2", @@ -5567,9 +4791,8 @@ }, "node_modules/check-more-types": { "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -5602,9 +4825,8 @@ }, "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" } @@ -5619,8 +4841,6 @@ }, "node_modules/ci-info": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true, "funding": [ { @@ -5628,15 +4848,15 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "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" } @@ -5663,9 +4883,8 @@ }, "node_modules/cli-table3": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -5678,9 +4897,8 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -5721,9 +4939,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", @@ -5746,24 +4963,21 @@ }, "node_modules/color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", "bin": { "color-support": "bin.js" } }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "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" }, @@ -5773,18 +4987,16 @@ }, "node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/common-tags": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -5796,9 +5008,8 @@ }, "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" }, @@ -5808,9 +5019,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", @@ -5826,33 +5036,29 @@ }, "node_modules/compression/node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "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", @@ -5874,9 +5080,8 @@ }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -5896,15 +5101,13 @@ }, "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -5935,9 +5138,8 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-anything": { "version": "2.0.6", @@ -5995,9 +5197,8 @@ }, "node_modules/core-js-compat": { "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.21.5" }, @@ -6008,9 +5209,8 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", @@ -6056,9 +5256,8 @@ }, "node_modules/critters": { "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "chalk": "^4.1.0", "css-select": "^5.1.0", @@ -6071,9 +5270,8 @@ }, "node_modules/critters/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" }, @@ -6086,9 +5284,8 @@ }, "node_modules/critters/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6102,9 +5299,8 @@ }, "node_modules/critters/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" }, @@ -6114,24 +5310,21 @@ }, "node_modules/critters/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/critters/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/critters/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" }, @@ -6141,9 +5334,8 @@ }, "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, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6155,9 +5347,8 @@ }, "node_modules/cross-spawn/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, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6170,9 +5361,8 @@ }, "node_modules/css-loader": { "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.21", @@ -6196,9 +5386,8 @@ }, "node_modules/css-select": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -6212,9 +5401,8 @@ }, "node_modules/css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -6224,9 +5412,8 @@ }, "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, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -6236,9 +5423,8 @@ }, "node_modules/cuint": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/custom-event": { "version": "1.0.1", @@ -6247,10 +5433,9 @@ }, "node_modules/cypress": { "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@cypress/request": "^2.88.10", "@cypress/xvfb": "^1.2.4", @@ -6304,15 +5489,13 @@ }, "node_modules/cypress/node_modules/@types/node": { "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cypress/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" }, @@ -6325,9 +5508,8 @@ }, "node_modules/cypress/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6341,9 +5523,8 @@ }, "node_modules/cypress/node_modules/chalk/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" }, @@ -6353,9 +5534,8 @@ }, "node_modules/cypress/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" }, @@ -6365,24 +5545,21 @@ }, "node_modules/cypress/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/cypress/node_modules/commander": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/cypress/node_modules/execa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -6403,9 +5580,8 @@ }, "node_modules/cypress/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -6418,9 +5594,8 @@ }, "node_modules/cypress/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -6433,27 +5608,24 @@ }, "node_modules/cypress/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/cypress/node_modules/human-signals": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8.12.0" } }, "node_modules/cypress/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" }, @@ -6463,9 +5635,8 @@ }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6478,9 +5649,8 @@ }, "node_modules/cypress/node_modules/tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, + "license": "MIT", "dependencies": { "rimraf": "^3.0.0" }, @@ -6490,18 +5660,16 @@ }, "node_modules/cypress/node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -6519,9 +5687,8 @@ }, "node_modules/dayjs": { "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", @@ -6541,9 +5708,8 @@ }, "node_modules/deep-equal": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -6570,30 +5736,26 @@ }, "node_modules/deep-equal/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/default-gateway": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" }, @@ -6621,9 +5783,8 @@ }, "node_modules/define-properties": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, + "license": "MIT", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -6637,18 +5798,16 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "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": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", @@ -6660,9 +5819,8 @@ }, "node_modules/dependency-graph": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -6678,9 +5836,8 @@ }, "node_modules/detect-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/di": { "version": "0.0.1", @@ -6700,15 +5857,13 @@ }, "node_modules/dns-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dns-packet": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", "dev": true, + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -6718,9 +5873,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6741,9 +5895,8 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -6755,21 +5908,19 @@ }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -6782,9 +5933,8 @@ }, "node_modules/domutils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -6796,30 +5946,26 @@ }, "node_modules/dotenv": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=10" } }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -6832,9 +5978,8 @@ }, "node_modules/ejs": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -6847,9 +5992,8 @@ }, "node_modules/electron-to-chromium": { "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -6873,8 +6017,7 @@ }, "node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -6882,8 +6025,7 @@ }, "node_modules/encoding/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -6894,9 +6036,8 @@ }, "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" } @@ -6931,9 +6072,8 @@ }, "node_modules/enhanced-resolve": { "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -6944,9 +6084,8 @@ }, "node_modules/enquirer": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1" }, @@ -6961,9 +6100,8 @@ }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -6973,18 +6111,16 @@ }, "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": "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/errno": { "version": "0.1.8", @@ -7007,9 +6143,8 @@ }, "node_modules/es-get-iterator": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -7027,9 +6162,8 @@ }, "node_modules/es-get-iterator/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-module-lexer": { "version": "1.2.1", @@ -7038,10 +6172,9 @@ }, "node_modules/esbuild": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7075,9 +6208,8 @@ }, "node_modules/esbuild-wasm": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", "dev": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7106,9 +6238,8 @@ }, "node_modules/eslint": { "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", @@ -7174,9 +6305,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -7186,9 +6316,8 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7202,9 +6331,8 @@ }, "node_modules/eslint/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" }, @@ -7217,15 +6345,13 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7239,9 +6365,8 @@ }, "node_modules/eslint/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" }, @@ -7251,15 +6376,13 @@ }, "node_modules/eslint/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/eslint/node_modules/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7269,9 +6392,8 @@ }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7285,18 +6407,16 @@ }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/eslint/node_modules/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==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7310,9 +6430,8 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -7322,9 +6441,8 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -7337,18 +6455,16 @@ }, "node_modules/eslint/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/eslint/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7358,15 +6474,13 @@ }, "node_modules/eslint/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/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==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -7379,9 +6493,8 @@ }, "node_modules/eslint/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, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7394,9 +6507,8 @@ }, "node_modules/eslint/node_modules/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==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -7409,9 +6521,8 @@ }, "node_modules/eslint/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" }, @@ -7421,9 +6532,8 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7433,9 +6543,8 @@ }, "node_modules/espree": { "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -7462,9 +6571,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -7474,9 +6582,8 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -7510,39 +6617,34 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/eventemitter-asyncresource": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eventemitter2": { "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eventemitter3": { "version": "4.0.7", @@ -7559,9 +6661,8 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7582,9 +6683,8 @@ }, "node_modules/executable": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.2.0" }, @@ -7594,24 +6694,21 @@ }, "node_modules/executable/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/exponential-backoff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/express": { "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -7651,15 +6748,13 @@ }, "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": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express/node_modules/body-parser": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -7681,27 +6776,24 @@ }, "node_modules/express/node_modules/cookie": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "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/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -7717,15 +6809,13 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express/node_modules/raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -7738,9 +6828,8 @@ }, "node_modules/express/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7765,9 +6854,8 @@ }, "node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -7785,9 +6873,8 @@ }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -7800,12 +6887,11 @@ }, "node_modules/extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -7834,9 +6920,8 @@ }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.15.0", @@ -7848,9 +6933,8 @@ }, "node_modules/faye-websocket": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -7860,9 +6944,8 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -7883,9 +6966,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -7899,27 +6981,24 @@ }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/filelist/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8016,9 +7095,8 @@ }, "node_modules/flat-cache": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -8053,18 +7131,16 @@ }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -8078,9 +7154,8 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -8090,18 +7165,16 @@ }, "node_modules/forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "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", @@ -8113,18 +7186,16 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fraction.js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -8135,18 +7206,16 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "8.1.0", @@ -8163,9 +7232,8 @@ }, "node_modules/fs-minipass": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^5.0.0" }, @@ -8175,9 +7243,8 @@ }, "node_modules/fs-monkey": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/fs.realpath": { "version": "1.0.0", @@ -8190,18 +7257,16 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gauge": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -8254,9 +7319,8 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8266,18 +7330,16 @@ }, "node_modules/getos": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", "dev": true, + "license": "MIT", "dependencies": { "async": "^3.2.0" } }, "node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } @@ -8318,9 +7380,8 @@ }, "node_modules/global-dirs": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, + "license": "MIT", "dependencies": { "ini": "2.0.0" }, @@ -8333,9 +7394,8 @@ }, "node_modules/global-dirs/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" } @@ -8368,9 +7428,8 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -8385,29 +7444,18 @@ }, "node_modules/grapheme-splitter": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/guacamole-frontend-ext-lib": { - "resolved": "../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", - "link": true - }, - "node_modules/guacamole-frontend-lib": { - "resolved": "../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "link": true + "dev": true, + "license": "MIT" }, "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/has": { "version": "1.0.3", @@ -8422,9 +7470,8 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8438,9 +7485,8 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -8461,9 +7507,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -8476,15 +7521,13 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/hdr-histogram-js": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "dev": true, + "license": "BSD", "dependencies": { "@assemblyscript/loader": "^0.10.1", "base64-js": "^1.2.0", @@ -8493,15 +7536,13 @@ }, "node_modules/hdr-histogram-percentiles-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hosted-git-info": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -8511,18 +7552,16 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -8532,9 +7571,8 @@ }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8547,23 +7585,19 @@ }, "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 + "dev": true, + "license": "MIT" }, "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/html-entities": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", "dev": true, "funding": [ { @@ -8574,7 +7608,8 @@ "type": "patreon", "url": "https://patreon.com/mdevils" } - ] + ], + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", @@ -8583,8 +7618,6 @@ }, "node_modules/htmlparser2": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -8593,6 +7626,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -8602,15 +7636,13 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "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": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", @@ -8637,9 +7669,8 @@ }, "node_modules/http-parser-js": { "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", @@ -8656,9 +7687,8 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -8670,9 +7700,8 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -8694,9 +7723,8 @@ }, "node_modules/http-signature": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -8720,18 +7748,16 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } @@ -8749,9 +7775,8 @@ }, "node_modules/icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -8787,9 +7812,8 @@ }, "node_modules/ignore-walk": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^9.0.0" }, @@ -8799,18 +7823,16 @@ }, "node_modules/ignore-walk/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/ignore-walk/node_modules/minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8861,18 +7883,16 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "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" } @@ -8891,18 +7911,16 @@ }, "node_modules/ini": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/injection-js": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.0" } @@ -8998,9 +8016,8 @@ }, "node_modules/internal-slot": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -9012,24 +8029,21 @@ }, "node_modules/ip": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ipaddr.js": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9043,9 +8057,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -9061,9 +8074,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -9084,9 +8096,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9100,9 +8111,8 @@ }, "node_modules/is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -9115,9 +8125,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9127,9 +8136,8 @@ }, "node_modules/is-ci": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, + "license": "MIT", "dependencies": { "ci-info": "^3.2.0" }, @@ -9150,9 +8158,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9205,9 +8212,8 @@ }, "node_modules/is-installed-globally": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, + "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -9228,24 +8234,21 @@ }, "node_modules/is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-map": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", @@ -9257,9 +8260,8 @@ }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9272,18 +8274,16 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9293,9 +8293,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" }, @@ -9305,9 +8304,8 @@ }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9321,18 +8319,16 @@ }, "node_modules/is-set": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -9342,9 +8338,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -9354,9 +8349,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9369,9 +8363,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -9384,9 +8377,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -9403,9 +8395,8 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -9419,18 +8410,16 @@ }, "node_modules/is-weakmap": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -9457,9 +8446,8 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isbinaryfile": { "version": "4.0.10", @@ -9479,18 +8467,16 @@ }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "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": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -9590,9 +8576,8 @@ }, "node_modules/jackspeak": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -9608,9 +8593,8 @@ }, "node_modules/jake": { "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -9626,9 +8610,8 @@ }, "node_modules/jake/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" }, @@ -9641,9 +8624,8 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9657,9 +8639,8 @@ }, "node_modules/jake/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" }, @@ -9669,24 +8650,21 @@ }, "node_modules/jake/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/jake/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/jake/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" }, @@ -9736,9 +8714,8 @@ }, "node_modules/jiti": { "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } @@ -9761,9 +8738,8 @@ }, "node_modules/jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsesc": { "version": "2.5.2", @@ -9782,9 +8758,8 @@ }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -9793,15 +8768,13 @@ }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", @@ -9829,21 +8802,19 @@ }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/jsprim": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -9912,9 +8883,8 @@ }, "node_modules/karma-firefox-launcher": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", "dev": true, + "license": "MIT", "dependencies": { "is-wsl": "^2.2.0", "which": "^2.0.1" @@ -9922,9 +8892,8 @@ }, "node_modules/karma-firefox-launcher/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, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -10023,9 +8992,8 @@ }, "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" } @@ -10040,9 +9008,8 @@ }, "node_modules/launch-editor": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", "dev": true, + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.7.3" @@ -10050,9 +9017,8 @@ }, "node_modules/lazy-ass": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, + "license": "MIT", "engines": { "node": "> 0.8" } @@ -10146,9 +9112,8 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -10179,9 +9144,8 @@ }, "node_modules/listr2": { "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -10237,9 +9201,8 @@ }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.kebabcase": { "version": "4.1.1", @@ -10247,15 +9210,13 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", @@ -10331,9 +9292,8 @@ }, "node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -10349,9 +9309,8 @@ }, "node_modules/log-update/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" }, @@ -10364,9 +9323,8 @@ }, "node_modules/log-update/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" }, @@ -10376,15 +9334,13 @@ }, "node_modules/log-update/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-update/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", @@ -10399,9 +9355,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10469,9 +9424,8 @@ }, "node_modules/make-fetch-happen": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, + "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", @@ -10495,9 +9449,8 @@ }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -10516,9 +9469,8 @@ }, "node_modules/memfs": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, + "license": "Unlicense", "dependencies": { "fs-monkey": "^1.0.4" }, @@ -10528,9 +9480,8 @@ }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -10547,9 +9498,8 @@ }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10605,9 +9555,8 @@ }, "node_modules/mini-css-extract-plugin": { "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", "dev": true, + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0" }, @@ -10624,9 +9573,8 @@ }, "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 + "dev": true, + "license": "ISC" }, "node_modules/minimatch": { "version": "3.1.2", @@ -10648,18 +9596,16 @@ }, "node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=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" }, @@ -10669,9 +9615,8 @@ }, "node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10681,15 +9626,13 @@ }, "node_modules/minipass-collect/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/minipass-fetch": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^5.0.0", "minipass-sized": "^1.0.3", @@ -10704,9 +9647,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" }, @@ -10716,9 +9658,8 @@ }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10728,15 +9669,13 @@ }, "node_modules/minipass-flush/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/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" @@ -10744,9 +9683,8 @@ }, "node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10756,15 +9694,13 @@ }, "node_modules/minipass-json-stream/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/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" }, @@ -10774,9 +9710,8 @@ }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10786,15 +9721,13 @@ }, "node_modules/minipass-pipeline/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/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" }, @@ -10804,9 +9737,8 @@ }, "node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10816,15 +9748,13 @@ }, "node_modules/minipass-sized/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/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" @@ -10835,9 +9765,8 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10847,9 +9776,8 @@ }, "node_modules/minizlib/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/mkdirp": { "version": "0.5.6", @@ -10881,9 +9809,8 @@ }, "node_modules/multicast-dns": { "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, + "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -10920,15 +9847,13 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/needle": { "version": "3.2.0", @@ -10983,9 +9908,8 @@ }, "node_modules/ng-packagr": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.0", @@ -11035,15 +9959,13 @@ }, "node_modules/ng-packagr/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ngx-build-plus": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", - "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", "dev": true, + "license": "MIT", "dependencies": { "@angular-devkit/build-angular": "^16.0.0", "@schematics/angular": "^16.0.0", @@ -11054,31 +9976,14 @@ "rxjs": ">= 6.0.0" } }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, "node_modules/node-addon-api": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-fetch": { "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11096,18 +10001,16 @@ }, "node_modules/node-forge": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-gyp": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -11130,9 +10033,8 @@ }, "node_modules/node-gyp-build": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", "dev": true, + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -11141,9 +10043,8 @@ }, "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==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -11156,15 +10057,13 @@ }, "node_modules/node-releases": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nopt": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "^1.0.0" }, @@ -11177,9 +10076,8 @@ }, "node_modules/normalize-package-data": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", @@ -11200,18 +10098,16 @@ }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-bundled": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^3.0.0" }, @@ -11221,9 +10117,8 @@ }, "node_modules/npm-install-checks": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -11233,18 +10128,16 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", @@ -11257,9 +10150,8 @@ }, "node_modules/npm-packlist": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, + "license": "ISC", "dependencies": { "ignore-walk": "^6.0.0" }, @@ -11269,9 +10161,8 @@ }, "node_modules/npm-pick-manifest": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -11284,9 +10175,8 @@ }, "node_modules/npm-registry-fetch": { "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, + "license": "ISC", "dependencies": { "make-fetch-happen": "^11.0.0", "minipass": "^5.0.0", @@ -11302,9 +10192,8 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -11314,9 +10203,8 @@ }, "node_modules/npmlog": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -11329,9 +10217,8 @@ }, "node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -11341,10 +10228,9 @@ }, "node_modules/nx": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", - "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@nrwl/tao": "16.2.2", "@parcel/watcher": "2.0.4", @@ -11410,9 +10296,8 @@ }, "node_modules/nx/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" }, @@ -11425,15 +10310,13 @@ }, "node_modules/nx/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11447,9 +10330,8 @@ }, "node_modules/nx/node_modules/cli-spinners": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -11459,9 +10341,8 @@ }, "node_modules/nx/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, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -11470,9 +10351,8 @@ }, "node_modules/nx/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" }, @@ -11482,15 +10362,13 @@ }, "node_modules/nx/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/nx/node_modules/fast-glob": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -11504,9 +10382,8 @@ }, "node_modules/nx/node_modules/fs-extra": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -11518,9 +10395,8 @@ }, "node_modules/nx/node_modules/glob": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11535,18 +10411,16 @@ }, "node_modules/nx/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/nx/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -11556,9 +10430,8 @@ }, "node_modules/nx/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" }, @@ -11568,18 +10441,16 @@ }, "node_modules/nx/node_modules/lines-and-columns": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/nx/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" }, @@ -11589,9 +10460,8 @@ }, "node_modules/nx/node_modules/minimatch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11601,9 +10471,8 @@ }, "node_modules/nx/node_modules/semver": { "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -11616,9 +10485,8 @@ }, "node_modules/nx/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" }, @@ -11628,9 +10496,8 @@ }, "node_modules/nx/node_modules/tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, + "license": "MIT", "dependencies": { "rimraf": "^3.0.0" }, @@ -11640,18 +10507,16 @@ }, "node_modules/nx/node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/nx/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/object-assign": { "version": "4.1.1", @@ -11671,9 +10536,8 @@ }, "node_modules/object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -11687,18 +10551,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.assign": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -11714,9 +10576,8 @@ }, "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.4.1", @@ -11731,9 +10592,8 @@ }, "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" } @@ -11776,9 +10636,8 @@ }, "node_modules/optionator": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -11880,9 +10739,8 @@ }, "node_modules/ospath": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/p-limit": { "version": "2.3.0", @@ -11911,9 +10769,8 @@ }, "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" }, @@ -11926,9 +10783,8 @@ }, "node_modules/p-retry": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -11939,9 +10795,8 @@ }, "node_modules/p-retry/node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -11956,9 +10811,8 @@ }, "node_modules/pacote": { "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^4.0.0", "@npmcli/installed-package-contents": "^2.0.1", @@ -11988,9 +10842,8 @@ }, "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/parent-module": { "version": "1.0.1", @@ -12097,9 +10950,8 @@ }, "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, + "license": "MIT", "engines": { "node": ">=8" } @@ -12111,9 +10963,8 @@ }, "node_modules/path-scurry": { "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^9.1.1", "minipass": "^5.0.0 || ^6.0.2" @@ -12127,18 +10978,16 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -12149,15 +10998,13 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.0.0", @@ -12186,9 +11033,8 @@ }, "node_modules/piscina": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter-asyncresource": "^1.0.0", "hdr-histogram-js": "^2.0.1", @@ -12211,8 +11057,6 @@ }, "node_modules/postcss": { "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", "dev": true, "funding": [ { @@ -12228,6 +11072,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -12239,9 +11084,8 @@ }, "node_modules/postcss-loader": { "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", "dev": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^8.1.3", "jiti": "^1.18.2", @@ -12262,9 +11106,8 @@ }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -12274,9 +11117,8 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -12291,9 +11133,8 @@ }, "node_modules/postcss-modules-scope": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -12306,9 +11147,8 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -12321,9 +11161,8 @@ }, "node_modules/postcss-selector-parser": { "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -12334,9 +11173,8 @@ }, "node_modules/postcss-url": { "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", "dev": true, + "license": "MIT", "dependencies": { "make-dir": "~3.1.0", "mime": "~2.5.2", @@ -12352,9 +11190,8 @@ }, "node_modules/postcss-url/node_modules/mime": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -12364,9 +11201,8 @@ }, "node_modules/postcss-url/node_modules/minimatch": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12376,24 +11212,21 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/pretty-bytes": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -12403,30 +11236,26 @@ }, "node_modules/proc-log": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "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" @@ -12437,9 +11266,8 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -12450,18 +11278,16 @@ }, "node_modules/proxy-addr/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/proxy-from-env": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prr": { "version": "1.0.1", @@ -12471,15 +11297,13 @@ }, "node_modules/psl": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "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" @@ -12566,9 +11390,8 @@ }, "node_modules/read-package-json": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", @@ -12581,9 +11404,8 @@ }, "node_modules/read-package-json-fast": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -12594,27 +11416,24 @@ }, "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-package-json/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/read-package-json/node_modules/glob": { "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", @@ -12634,18 +11453,16 @@ }, "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-package-json/node_modules/minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12681,21 +11498,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": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -12705,15 +11519,13 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -12725,9 +11537,8 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -12742,9 +11553,8 @@ }, "node_modules/regexpu-core": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -12759,9 +11569,8 @@ }, "node_modules/regjsparser": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -12771,8 +11580,6 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -12853,9 +11660,8 @@ }, "node_modules/request-progress": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, + "license": "MIT", "dependencies": { "throttleit": "^1.0.0" } @@ -12953,9 +11759,8 @@ }, "node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -13069,9 +11874,8 @@ }, "node_modules/sass": { "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -13086,9 +11890,8 @@ }, "node_modules/sass-loader": { "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", "dev": true, + "license": "MIT", "dependencies": { "klona": "^2.0.6", "neo-async": "^2.6.2" @@ -13148,15 +11951,13 @@ }, "node_modules/select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dev": true, + "license": "MIT", "dependencies": { "node-forge": "^1" }, @@ -13193,9 +11994,8 @@ }, "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -13217,24 +12017,21 @@ }, "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/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" }, @@ -13244,15 +12041,13 @@ }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -13267,9 +12062,8 @@ }, "node_modules/serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -13285,27 +12079,24 @@ }, "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/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "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": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -13318,27 +12109,23 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -13351,9 +12138,8 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -13362,9 +12148,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" }, @@ -13374,9 +12159,8 @@ }, "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, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -13386,18 +12170,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13421,9 +12203,8 @@ }, "node_modules/sigstore": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.1.0", "@sigstore/tuf": "^1.0.0", @@ -13450,9 +12231,8 @@ }, "node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -13464,9 +12244,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" }, @@ -13479,9 +12258,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" }, @@ -13491,15 +12269,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 + "dev": true, + "license": "MIT" }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -13543,9 +12319,8 @@ }, "node_modules/sockjs": { "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -13554,9 +12329,8 @@ }, "node_modules/socks": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, + "license": "MIT", "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -13568,9 +12342,8 @@ }, "node_modules/socks-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -13582,9 +12355,8 @@ }, "node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -13647,9 +12419,8 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -13657,15 +12428,13 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -13673,15 +12442,13 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "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", @@ -13695,9 +12462,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", @@ -13714,9 +12480,8 @@ }, "node_modules/sshpk": { "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -13739,9 +12504,8 @@ }, "node_modules/ssri": { "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^5.0.0" }, @@ -13759,9 +12523,8 @@ }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, + "license": "MIT", "dependencies": { "internal-slot": "^1.0.4" }, @@ -13804,9 +12567,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13829,9 +12591,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13841,27 +12602,24 @@ }, "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -13871,9 +12629,8 @@ }, "node_modules/strong-log-transformer": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "duplexer": "^0.1.1", "minimist": "^1.2.0", @@ -13917,18 +12674,16 @@ }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar": { "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13943,9 +12698,8 @@ }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -13959,9 +12713,8 @@ }, "node_modules/tar/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" }, @@ -13971,9 +12724,8 @@ }, "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -13983,9 +12735,8 @@ }, "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, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -13995,15 +12746,13 @@ }, "node_modules/tar/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/terser": { "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -14120,9 +12869,8 @@ }, "node_modules/throttleit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", @@ -14131,9 +12879,8 @@ }, "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/tmp": { "version": "0.0.33", @@ -14175,9 +12922,8 @@ }, "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" @@ -14188,8 +12934,7 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/tree-kill": { "version": "1.2.2", @@ -14201,9 +12946,8 @@ }, "node_modules/tsconfig-paths": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -14215,14 +12959,12 @@ }, "node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -14235,15 +12977,13 @@ }, "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/tuf-js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, + "license": "MIT", "dependencies": { "@tufjs/models": "1.0.4", "debug": "^4.3.4", @@ -14255,9 +12995,8 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -14267,15 +13006,13 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -14313,9 +13050,8 @@ }, "node_modules/typescript": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14344,18 +13080,16 @@ }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -14366,27 +13100,24 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^4.0.0" }, @@ -14396,9 +13127,8 @@ }, "node_modules/unique-slug": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -14424,9 +13154,8 @@ }, "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" } @@ -14482,24 +13211,21 @@ }, "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==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -14507,9 +13233,8 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, + "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -14527,12 +13252,11 @@ }, "node_modules/verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -14541,9 +13265,8 @@ }, "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vite": { "version": "4.3.9", @@ -14614,9 +13337,8 @@ }, "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" } @@ -14630,14 +13352,12 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/webpack": { "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", @@ -14682,9 +13402,8 @@ }, "node_modules/webpack-dev-middleware": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.12", @@ -14710,9 +13429,8 @@ }, "node_modules/webpack-dev-server": { "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -14769,9 +13487,8 @@ }, "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -14792,9 +13509,8 @@ }, "node_modules/webpack-dev-server/node_modules/ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -14813,9 +13529,8 @@ }, "node_modules/webpack-merge": { "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -14899,9 +13614,8 @@ }, "node_modules/websocket-driver": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -14913,17 +13627,15 @@ }, "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-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -14931,9 +13643,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -14947,9 +13658,8 @@ }, "node_modules/which-collection": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -14962,9 +13672,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -14982,23 +13691,20 @@ }, "node_modules/wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -15021,9 +13727,8 @@ "node_modules/wrap-ansi-cjs": { "name": "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, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -15038,9 +13743,8 @@ }, "node_modules/wrap-ansi-cjs/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" }, @@ -15053,9 +13757,8 @@ }, "node_modules/wrap-ansi-cjs/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" }, @@ -15065,9 +13768,8 @@ }, "node_modules/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", @@ -15122,9 +13824,8 @@ }, "node_modules/xxhashjs": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", "dev": true, + "license": "MIT", "dependencies": { "cuint": "^0.2.2" } @@ -15166,9 +13867,8 @@ }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -15176,9 +13876,8 @@ }, "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" }, @@ -15205,8 +13904,6 @@ }, "@angular-architects/module-federation": { "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation/-/module-federation-16.0.4.tgz", - "integrity": "sha512-RQmHe7JqkPE4OAmNOxSKgFlGBoxi7Cy9THsbo5Leas8XQ3M2W3q2lBQF0woRNjMj575NaSQ84S7Tq8WvH+KGhw==", "requires": { "@angular-architects/module-federation-runtime": "16.0.4", "callsite": "^1.0.0", @@ -15217,16 +13914,12 @@ }, "@angular-architects/module-federation-runtime": { "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@angular-architects/module-federation-runtime/-/module-federation-runtime-16.0.4.tgz", - "integrity": "sha512-1qbS109+6Rq41wt0jp8w/to/zn3xY4IhvWlqhaMphZSD6bOZ0s/+MXdVo7p0iljA/lpNFAMVbYvarEpl6bSsjQ==", "requires": { "tslib": "^2.0.0" } }, "@angular-devkit/architect": { "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.0.tgz", - "integrity": "sha512-lrO++pcB+NFGXLZrFBhRMPbGCMpZuJyJEKSK8zknw9/7ipRz1MSlRaJFWUKEHRlVI/+hsBTWtBRUnR5WcgqvvA==", "dev": true, "requires": { "@angular-devkit/core": "16.1.0", @@ -15235,8 +13928,6 @@ }, "@angular-devkit/build-angular": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.0.tgz", - "integrity": "sha512-nY/g1L0/BOyYSko3Qsey39Oul93eyBQyOfBtXKlnsarKW6xu5Eq2Q6tz2HLCoq93eeEt0VDEHIPkE9E/tp5CTA==", "dev": true, "requires": { "@ampproject/remapping": "2.2.1", @@ -15308,8 +13999,6 @@ "dependencies": { "@babel/core": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", @@ -15331,16 +14020,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 } } }, "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" @@ -15348,8 +14033,6 @@ }, "semver": { "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -15357,16 +14040,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@angular-devkit/build-webpack": { "version": "0.1601.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.0.tgz", - "integrity": "sha512-p9OXQU9dxVBPvOpxM5W7kCrQ1lo9izg9AxXVTuc9gT2QJPw8pqRGr78/68NTRrFN8ODoMo6ySPVO0VGTc8qelg==", "dev": true, "requires": { "@angular-devkit/architect": "0.1601.0", @@ -15375,8 +14054,6 @@ }, "@angular-devkit/core": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", - "integrity": "sha512-mrWpuDvttmhrCGcLc68RIXKtTzUhkBTsE5ZZFZNO1+FSC+vO/ZpyCpPd6C+6coM68NfXYjHlms5XF6KbxeGn/Q==", "dev": true, "requires": { "ajv": "8.12.0", @@ -15388,8 +14065,6 @@ }, "@angular-devkit/schematics": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", - "integrity": "sha512-LM35PH9DT3eQRSZgrkk2bx1ZQjjVh8BCByTlr37/c+FnF9mNbeBsa1YkxrlsN/CwO+045OwEwRHnkM9Zcx0U/A==", "dev": true, "requires": { "@angular-devkit/core": "16.1.0", @@ -15401,8 +14076,6 @@ }, "@angular-eslint/builder": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", - "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", "dev": true, "requires": { "@nx/devkit": "16.2.2", @@ -15411,14 +14084,10 @@ }, "@angular-eslint/bundled-angular-compiler": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", - "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", "dev": true }, "@angular-eslint/eslint-plugin": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", - "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", "dev": true, "requires": { "@angular-eslint/utils": "16.0.3", @@ -15427,8 +14096,6 @@ }, "@angular-eslint/eslint-plugin-template": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", - "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", "dev": true, "requires": { "@angular-eslint/bundled-angular-compiler": "16.0.3", @@ -15441,8 +14108,6 @@ }, "@angular-eslint/schematics": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", - "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", "dev": true, "requires": { "@angular-eslint/eslint-plugin": "16.0.3", @@ -15456,8 +14121,6 @@ "dependencies": { "tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" @@ -15467,8 +14130,6 @@ }, "@angular-eslint/template-parser": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", - "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", "dev": true, "requires": { "@angular-eslint/bundled-angular-compiler": "16.0.3", @@ -15477,8 +14138,6 @@ "dependencies": { "eslint-scope": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -15487,16 +14146,12 @@ }, "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "@angular-eslint/utils": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", - "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", "dev": true, "requires": { "@angular-eslint/bundled-angular-compiler": "16.0.3", @@ -15505,16 +14160,12 @@ }, "@angular/animations": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.1.tgz", - "integrity": "sha512-Na+eGoLvek3rmIanqXdMJoVAxd00AfYsMoHzhAVuPQpbW1H3EGqMvbzPHf1WhP19yFZ9gXGV0rFZf1qieQPufA==", "requires": { "tslib": "^2.3.0" } }, "@angular/cli": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.0.tgz", - "integrity": "sha512-WgWGpdQI0JCP8gEj2XoSkbuLNtL55hTvpPL+Qx9P+SjcAk/d10sGMqEs/phyLYeYz7wIDPPCKkJu4EcjZXE8SA==", "dev": true, "requires": { "@angular-devkit/architect": "0.1601.0", @@ -15539,8 +14190,6 @@ "dependencies": { "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" @@ -15548,8 +14197,6 @@ }, "semver": { "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -15557,32 +14204,24 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@angular/common": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.1.tgz", - "integrity": "sha512-qsMYqk7U7IcuE8swJ7Sppv0MkYBTfzrsq5jfAaAZYw035Po5FfxkFrh/Pmgp7QZndCsO9H+03JLH03jzuIqfrw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.1.tgz", - "integrity": "sha512-TKLZS4d7dHvFlULvaZLlG+NKX8wIPoz9sUGzxnS+FPqa0GLfeeVY+KCj4bWSTBhESjgdIeDBu7KdT4vakvb8Nw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.1.tgz", - "integrity": "sha512-c6qCXNFxSGHaWRDR+AQziqEmgZX5d5+4T0fGQt0FJxgVDSFk0L++R4hglhbDzi697PA9jSyWLuus/7sNLxrC4A==", "dev": true, "requires": { "@babel/core": "7.21.8", @@ -15597,48 +14236,36 @@ }, "@angular/core": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.1.tgz", - "integrity": "sha512-hi0O2Gc0L4PavczQweC9cxVfdemXj76wfJ3GjtUP+f9I4uKLBQ6/JABExRIoW9eY0rK5fZgYP0IeCYisW4gxnQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.1.tgz", - "integrity": "sha512-vRpcy68MkudST7eV+pYpHsF0cXEfeAG3xGn1ntdkhydhMFPo+SwuZjzOT0OSq10Wdoerb4KI5eOesDLaLjmeJA==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.1.tgz", - "integrity": "sha512-9zeB64wbAsoun7+rP6G8e1TY+1nC0sEaGdLzBv9ohOrFgkl8XgM+uNDiwkDLsBJkv10d2n6Tw14M9GaCL9AhVw==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.1.tgz", - "integrity": "sha512-wET0g3N5KbnAFUT0r/LGM039vfNRNdKn+rsVPxchh+EeQ+oJxdQi0dUBqSviabwwNW0oLPU+chnGFFowcKL0Wg==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { "version": "16.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.1.tgz", - "integrity": "sha512-02sTolkyPM/gJ9uJQtZkWujoi1LhH8qsIi2bexSC6cpNTeFnGyr7iFd1lWg+xDtV4PLPgH94Ai/aJN0DNg2I8Q==", "requires": { "tslib": "^2.3.0" } }, "@assemblyscript/loader": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", "dev": true }, "@babel/code-frame": { @@ -15680,8 +14307,6 @@ }, "@babel/generator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dev": true, "requires": { "@babel/types": "^7.22.5", @@ -15692,8 +14317,6 @@ }, "@babel/helper-annotate-as-pure": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15701,8 +14324,6 @@ }, "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15727,8 +14348,6 @@ }, "@babel/helper-create-class-features-plugin": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -15744,16 +14363,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 } } }, "@babel/helper-create-regexp-features-plugin": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -15763,16 +14378,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 } } }, "@babel/helper-define-polyfill-provider": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.17.7", @@ -15785,8 +14396,6 @@ "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 } } @@ -15812,8 +14421,6 @@ }, "@babel/helper-member-expression-to-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15821,8 +14428,6 @@ }, "@babel/helper-module-imports": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15830,8 +14435,6 @@ }, "@babel/helper-module-transforms": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.5", @@ -15846,8 +14449,6 @@ }, "@babel/helper-optimise-call-expression": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15855,14 +14456,10 @@ }, "@babel/helper-plugin-utils": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-remap-async-to-generator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -15873,8 +14470,6 @@ }, "@babel/helper-replace-supers": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.5", @@ -15887,8 +14482,6 @@ }, "@babel/helper-simple-access": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15896,8 +14489,6 @@ }, "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15905,8 +14496,6 @@ }, "@babel/helper-split-export-declaration": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dev": true, "requires": { "@babel/types": "^7.22.5" @@ -15925,8 +14514,6 @@ }, "@babel/helper-wrap-function": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.22.5", @@ -15958,8 +14545,6 @@ }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -15967,8 +14552,6 @@ }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -15978,8 +14561,6 @@ }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -15990,15 +14571,11 @@ }, "@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "requires": {} }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -16007,8 +14584,6 @@ }, "@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" @@ -16016,8 +14591,6 @@ }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" @@ -16025,8 +14598,6 @@ }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -16034,8 +14605,6 @@ }, "@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" @@ -16043,8 +14612,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" @@ -16052,8 +14619,6 @@ }, "@babel/plugin-syntax-import-assertions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16061,8 +14626,6 @@ }, "@babel/plugin-syntax-import-attributes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16070,8 +14633,6 @@ }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -16079,8 +14640,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" @@ -16088,8 +14647,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" @@ -16097,8 +14654,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" @@ -16106,8 +14661,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" @@ -16115,8 +14668,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" @@ -16124,8 +14675,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" @@ -16133,8 +14682,6 @@ }, "@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" @@ -16142,8 +14689,6 @@ }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -16151,8 +14696,6 @@ }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -16160,8 +14703,6 @@ }, "@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -16170,8 +14711,6 @@ }, "@babel/plugin-transform-arrow-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16179,8 +14718,6 @@ }, "@babel/plugin-transform-async-generator-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.5", @@ -16191,8 +14728,6 @@ }, "@babel/plugin-transform-async-to-generator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.22.5", @@ -16202,8 +14737,6 @@ }, "@babel/plugin-transform-block-scoped-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16211,8 +14744,6 @@ }, "@babel/plugin-transform-block-scoping": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16220,8 +14751,6 @@ }, "@babel/plugin-transform-class-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.5", @@ -16230,8 +14759,6 @@ }, "@babel/plugin-transform-class-static-block": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.5", @@ -16241,8 +14768,6 @@ }, "@babel/plugin-transform-classes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -16258,8 +14783,6 @@ }, "@babel/plugin-transform-computed-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16268,8 +14791,6 @@ }, "@babel/plugin-transform-destructuring": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16277,8 +14798,6 @@ }, "@babel/plugin-transform-dotall-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", @@ -16287,8 +14806,6 @@ }, "@babel/plugin-transform-duplicate-keys": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16296,8 +14813,6 @@ }, "@babel/plugin-transform-dynamic-import": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16306,8 +14821,6 @@ }, "@babel/plugin-transform-exponentiation-operator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", @@ -16316,8 +14829,6 @@ }, "@babel/plugin-transform-export-namespace-from": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16326,8 +14837,6 @@ }, "@babel/plugin-transform-for-of": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16335,8 +14844,6 @@ }, "@babel/plugin-transform-function-name": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.5", @@ -16346,8 +14853,6 @@ }, "@babel/plugin-transform-json-strings": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16356,8 +14861,6 @@ }, "@babel/plugin-transform-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16365,8 +14868,6 @@ }, "@babel/plugin-transform-logical-assignment-operators": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16375,8 +14876,6 @@ }, "@babel/plugin-transform-member-expression-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16384,8 +14883,6 @@ }, "@babel/plugin-transform-modules-amd": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.22.5", @@ -16394,8 +14891,6 @@ }, "@babel/plugin-transform-modules-commonjs": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.22.5", @@ -16405,8 +14900,6 @@ }, "@babel/plugin-transform-modules-systemjs": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.22.5", @@ -16417,8 +14910,6 @@ }, "@babel/plugin-transform-modules-umd": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.22.5", @@ -16427,8 +14918,6 @@ }, "@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", @@ -16437,8 +14926,6 @@ }, "@babel/plugin-transform-new-target": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16446,8 +14933,6 @@ }, "@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16456,8 +14941,6 @@ }, "@babel/plugin-transform-numeric-separator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16466,8 +14949,6 @@ }, "@babel/plugin-transform-object-rest-spread": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dev": true, "requires": { "@babel/compat-data": "^7.22.5", @@ -16479,8 +14960,6 @@ }, "@babel/plugin-transform-object-super": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16489,8 +14968,6 @@ }, "@babel/plugin-transform-optional-catch-binding": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16499,8 +14976,6 @@ }, "@babel/plugin-transform-optional-chaining": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16510,8 +14985,6 @@ }, "@babel/plugin-transform-parameters": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16519,8 +14992,6 @@ }, "@babel/plugin-transform-private-methods": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.5", @@ -16529,8 +15000,6 @@ }, "@babel/plugin-transform-private-property-in-object": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -16541,8 +15010,6 @@ }, "@babel/plugin-transform-property-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16550,8 +15017,6 @@ }, "@babel/plugin-transform-regenerator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16560,8 +15025,6 @@ }, "@babel/plugin-transform-reserved-words": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16569,8 +15032,6 @@ }, "@babel/plugin-transform-runtime": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.22.5", @@ -16583,16 +15044,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 } } }, "@babel/plugin-transform-shorthand-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16600,8 +15057,6 @@ }, "@babel/plugin-transform-spread": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -16610,8 +15065,6 @@ }, "@babel/plugin-transform-sticky-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16619,8 +15072,6 @@ }, "@babel/plugin-transform-template-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16628,8 +15079,6 @@ }, "@babel/plugin-transform-typeof-symbol": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16637,8 +15086,6 @@ }, "@babel/plugin-transform-unicode-escapes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -16646,8 +15093,6 @@ }, "@babel/plugin-transform-unicode-property-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", @@ -16656,8 +15101,6 @@ }, "@babel/plugin-transform-unicode-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", @@ -16666,8 +15109,6 @@ }, "@babel/plugin-transform-unicode-sets-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", @@ -16676,8 +15117,6 @@ }, "@babel/preset-env": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", "dev": true, "requires": { "@babel/compat-data": "^7.22.5", @@ -16764,16 +15203,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 } } }, "@babel/preset-modules": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -16785,14 +15220,10 @@ }, "@babel/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, "@babel/runtime": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.11" @@ -16800,8 +15231,6 @@ }, "@babel/template": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "requires": { "@babel/code-frame": "^7.22.5", @@ -16840,8 +15269,6 @@ }, "@cypress/request": { "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -16866,8 +15293,6 @@ "dependencies": { "qs": { "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -16877,8 +15302,6 @@ }, "@cypress/xvfb": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", "dev": true, "requires": { "debug": "^3.1.0", @@ -16887,8 +15310,6 @@ "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" @@ -16900,164 +15321,13 @@ "version": "0.5.7", "dev": true }, - "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "dev": true, - "optional": true - }, "@esbuild/win32-x64": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "dev": true, "optional": true }, "@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "requires": { "eslint-visitor-keys": "^3.3.0" @@ -17065,14 +15335,10 @@ }, "@eslint-community/regexpp": { "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", "dev": true }, "@eslint/eslintrc": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -17088,8 +15354,6 @@ "dependencies": { "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -17100,14 +15364,10 @@ }, "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -17115,8 +15375,6 @@ }, "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -17124,28 +15382,20 @@ }, "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==", "dev": true }, "type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "@eslint/js": { "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", "dev": true }, "@humanwhocodes/config-array": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -17155,20 +15405,14 @@ }, "@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, "@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "requires": { "string-width": "^5.1.2", @@ -17181,26 +15425,18 @@ "dependencies": { "ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, "ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", @@ -17210,8 +15446,6 @@ }, "strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" @@ -17219,8 +15453,6 @@ }, "wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "requires": { "ansi-styles": "^6.1.0", @@ -17290,8 +15522,6 @@ }, "@leichtgewicht/ip-codec": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, "@messageformat/core": { @@ -17350,8 +15580,6 @@ }, "@ngtools/webpack": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.0.tgz", - "integrity": "sha512-rKPDqzaSsdXIuJAdldiOzDgDvCe4MHPjsBzrRmev+B0UcllIjSOwciREPDks9LyopppsDVTvn7EtUyhjfv1LBg==", "dev": true, "requires": {} }, @@ -17377,8 +15605,6 @@ }, "@npmcli/fs": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "requires": { "semver": "^7.3.5" @@ -17386,8 +15612,6 @@ }, "@npmcli/git": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, "requires": { "@npmcli/promise-spawn": "^6.0.0", @@ -17402,14 +15626,10 @@ "dependencies": { "lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true }, "which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -17419,8 +15639,6 @@ }, "@npmcli/installed-package-contents": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "requires": { "npm-bundled": "^3.0.0", @@ -17429,14 +15647,10 @@ }, "@npmcli/node-gyp": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true }, "@npmcli/promise-spawn": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "requires": { "which": "^3.0.0" @@ -17444,8 +15658,6 @@ "dependencies": { "which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -17455,8 +15667,6 @@ }, "@npmcli/run-script": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "requires": { "@npmcli/node-gyp": "^3.0.0", @@ -17468,8 +15678,6 @@ "dependencies": { "which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -17479,8 +15687,6 @@ }, "@nrwl/devkit": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", "dev": true, "requires": { "@nx/devkit": "16.2.2" @@ -17488,8 +15694,6 @@ }, "@nrwl/tao": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", - "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", "dev": true, "requires": { "nx": "16.2.2" @@ -17497,8 +15701,6 @@ }, "@nx/devkit": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", "dev": true, "requires": { "@nrwl/devkit": "16.2.2", @@ -17511,8 +15713,6 @@ "dependencies": { "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" @@ -17520,8 +15720,6 @@ }, "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" @@ -17529,8 +15727,6 @@ }, "tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" @@ -17538,79 +15734,17 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, - "@nx/nx-darwin-arm64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", - "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", - "dev": true, - "optional": true - }, - "@nx/nx-darwin-x64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", - "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm-gnueabihf": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", - "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", - "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-arm64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", - "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-x64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", - "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", - "dev": true, - "optional": true - }, - "@nx/nx-linux-x64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", - "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", - "dev": true, - "optional": true - }, - "@nx/nx-win32-arm64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", - "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", - "dev": true, - "optional": true - }, "@nx/nx-win32-x64-msvc": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", - "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", "dev": true, "optional": true }, "@parcel/watcher": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, "requires": { "node-addon-api": "^3.2.1", @@ -17619,15 +15753,11 @@ }, "@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true }, "@rollup/plugin-json": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", "dev": true, "requires": { "@rollup/pluginutils": "^5.0.1" @@ -17635,8 +15765,6 @@ }, "@rollup/plugin-node-resolve": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", - "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", "dev": true, "requires": { "@rollup/pluginutils": "^5.0.1", @@ -17649,8 +15777,6 @@ }, "@rollup/pluginutils": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "requires": { "@types/estree": "^1.0.0", @@ -17660,8 +15786,6 @@ }, "@schematics/angular": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.0.tgz", - "integrity": "sha512-K5ltzjy98POjJks6vOvSUEA5UEtX3xuf/CR3NA9UFjC44mvjcMz/3n69owZbXmt5aEKzW/qgj7tVIIHUR5z9Fg==", "dev": true, "requires": { "@angular-devkit/core": "16.1.0", @@ -17671,14 +15795,10 @@ }, "@sigstore/protobuf-specs": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", "dev": true }, "@sigstore/tuf": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.0.tgz", - "integrity": "sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==", "dev": true, "requires": { "@sigstore/protobuf-specs": "^0.1.0", @@ -17699,20 +15819,14 @@ }, "@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@tufjs/canonical-json": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", "dev": true }, "@tufjs/models": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, "requires": { "@tufjs/canonical-json": "1.0.0", @@ -17721,8 +15835,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -17730,8 +15842,6 @@ }, "minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -17741,8 +15851,6 @@ }, "@types/body-parser": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "requires": { "@types/connect": "*", @@ -17751,8 +15859,6 @@ }, "@types/bonjour": { "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, "requires": { "@types/node": "*" @@ -17760,8 +15866,6 @@ }, "@types/connect": { "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "requires": { "@types/node": "*" @@ -17769,8 +15873,6 @@ }, "@types/connect-history-api-fallback": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dev": true, "requires": { "@types/express-serve-static-core": "*", @@ -17810,8 +15912,6 @@ }, "@types/express": { "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, "requires": { "@types/body-parser": "*", @@ -17822,8 +15922,6 @@ }, "@types/express-serve-static-core": { "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", "dev": true, "requires": { "@types/node": "*", @@ -17838,8 +15936,6 @@ }, "@types/http-proxy": { "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", "dev": true, "requires": { "@types/node": "*" @@ -17859,8 +15955,6 @@ }, "@types/mime": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "@types/node": { @@ -17869,38 +15963,26 @@ }, "@types/qs": { "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, "@types/range-parser": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, "@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, "@types/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, "@types/semver": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", "dev": true }, "@types/send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", "dev": true, "requires": { "@types/mime": "^1", @@ -17909,8 +15991,6 @@ }, "@types/serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, "requires": { "@types/express": "*" @@ -17918,8 +15998,6 @@ }, "@types/serve-static": { "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", "dev": true, "requires": { "@types/mime": "*", @@ -17928,20 +16006,14 @@ }, "@types/sinonjs__fake-timers": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", "dev": true }, "@types/sizzle": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, "@types/sockjs": { "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, "requires": { "@types/node": "*" @@ -17949,8 +16021,6 @@ }, "@types/ws": { "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dev": true, "requires": { "@types/node": "*" @@ -17958,8 +16028,6 @@ }, "@types/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, "optional": true, "requires": { @@ -17968,8 +16036,6 @@ }, "@typescript-eslint/eslint-plugin": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", - "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.4.0", @@ -17986,8 +16052,6 @@ }, "@typescript-eslint/parser": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.59.7", @@ -17998,8 +16062,6 @@ }, "@typescript-eslint/scope-manager": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", "dev": true, "requires": { "@typescript-eslint/types": "5.59.7", @@ -18008,8 +16070,6 @@ }, "@typescript-eslint/type-utils": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", "dev": true, "requires": { "@typescript-eslint/typescript-estree": "5.59.7", @@ -18020,14 +16080,10 @@ }, "@typescript-eslint/types": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", "dev": true, "requires": { "@typescript-eslint/types": "5.59.7", @@ -18041,8 +16097,6 @@ "dependencies": { "globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -18055,16 +16109,12 @@ }, "slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true } } }, "@typescript-eslint/utils": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", @@ -18079,8 +16129,6 @@ }, "@typescript-eslint/visitor-keys": { "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", "dev": true, "requires": { "@typescript-eslint/types": "5.59.7", @@ -18222,8 +16270,6 @@ }, "@yarnpkg/parsers": { "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, "requires": { "js-yaml": "^3.10.0", @@ -18232,8 +16278,6 @@ }, "@zkochan/js-yaml": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -18241,8 +16285,6 @@ "dependencies": { "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true } } @@ -18253,8 +16295,6 @@ }, "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": { @@ -18271,15 +16311,11 @@ }, "acorn-import-assertions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, "requires": {} }, "acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, @@ -18311,8 +16347,6 @@ }, "agentkeepalive": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, "requires": { "debug": "^4.1.0", @@ -18322,8 +16356,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", @@ -18370,8 +16402,6 @@ }, "ansi-html-community": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { @@ -18393,20 +16423,14 @@ }, "aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "arch": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true }, "are-we-there-yet": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -18422,8 +16446,6 @@ }, "aria-query": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "requires": { "deep-equal": "^2.0.5" @@ -18431,8 +16453,6 @@ }, "array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -18441,20 +16461,14 @@ }, "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 }, "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 }, "asn1": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -18462,38 +16476,26 @@ }, "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "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": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "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 }, "autoprefixer": { "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "dev": true, "requires": { "browserslist": "^4.21.5", @@ -18506,26 +16508,18 @@ }, "available-typed-arrays": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, "aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true }, "aws4": { "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, "axios": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dev": true, "requires": { "follow-redirects": "^1.15.0", @@ -18535,8 +16529,6 @@ "dependencies": { "form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -18546,16 +16538,12 @@ }, "proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true } } }, "axobject-query": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", "dev": true, "requires": { "deep-equal": "^2.0.5" @@ -18582,8 +16570,6 @@ }, "babel-plugin-polyfill-corejs2": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", "dev": true, "requires": { "@babel/compat-data": "^7.17.7", @@ -18593,16 +16579,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 } } }, "babel-plugin-polyfill-corejs3": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.4.0", @@ -18611,8 +16593,6 @@ }, "babel-plugin-polyfill-regenerator": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.4.0" @@ -18630,14 +16610,10 @@ }, "batch": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "requires": { "tweetnacl": "^0.14.3" @@ -18661,14 +16637,10 @@ }, "blob-util": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", "dev": true }, "bluebird": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "body-parser": { @@ -18704,8 +16676,6 @@ }, "bonjour-service": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dev": true, "requires": { "array-flatten": "^2.1.2", @@ -18716,8 +16686,6 @@ }, "boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "brace-expansion": { @@ -18736,8 +16704,6 @@ }, "browserslist": { "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001489", @@ -18755,8 +16721,6 @@ }, "buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, "buffer-from": { @@ -18765,14 +16729,10 @@ }, "builtin-modules": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, "builtins": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "requires": { "semver": "^7.0.0" @@ -18784,8 +16744,6 @@ }, "cacache": { "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", "dev": true, "requires": { "@npmcli/fs": "^3.1.0", @@ -18804,8 +16762,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -18813,8 +16769,6 @@ }, "glob": { "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, "requires": { "foreground-child": "^3.1.0", @@ -18826,14 +16780,10 @@ }, "lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true }, "minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -18843,8 +16793,6 @@ }, "cachedir": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true }, "call-bind": { @@ -18856,9 +16804,7 @@ } }, "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==" + "version": "1.0.0" }, "callsites": { "version": "3.1.0" @@ -18869,14 +16815,10 @@ }, "caniuse-lite": { "version": "1.0.30001505", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", - "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", "dev": true }, "caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, "chalk": { @@ -18893,8 +16835,6 @@ }, "check-more-types": { "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true }, "chokidar": { @@ -18913,8 +16853,6 @@ }, "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": { @@ -18923,14 +16861,10 @@ }, "ci-info": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "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": { @@ -18944,8 +16878,6 @@ }, "cli-table3": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -18954,8 +16886,6 @@ }, "cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { "slice-ansi": "^3.0.0", @@ -18979,8 +16909,6 @@ }, "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", @@ -18999,20 +16927,14 @@ }, "color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "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" @@ -19020,14 +16942,10 @@ }, "commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true }, "common-tags": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true }, "commondir": { @@ -19036,8 +16954,6 @@ }, "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" @@ -19045,8 +16961,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", @@ -19060,14 +16974,10 @@ "dependencies": { "bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "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" @@ -19075,14 +16985,10 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "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 } } @@ -19115,20 +17021,14 @@ }, "connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "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": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { "safe-buffer": "5.2.1" @@ -19148,8 +17048,6 @@ }, "cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, "copy-anything": { @@ -19185,8 +17083,6 @@ }, "core-js-compat": { "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "dev": true, "requires": { "browserslist": "^4.21.5" @@ -19194,8 +17090,6 @@ }, "core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cors": { @@ -19228,8 +17122,6 @@ }, "critters": { "version": "0.0.18", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.18.tgz", - "integrity": "sha512-I7t/da29EIWXgxx2RSW1md1DvenEgEuLlki6nHE5+Nc0e3eib5AuGIGbPVuI8q+erCKkSP9T/NqYfvasAy7x7A==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -19243,8 +17135,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" @@ -19252,8 +17142,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -19262,8 +17150,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" @@ -19271,20 +17157,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" @@ -19294,8 +17174,6 @@ }, "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", @@ -19305,8 +17183,6 @@ "dependencies": { "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" @@ -19316,8 +17192,6 @@ }, "css-loader": { "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", "dev": true, "requires": { "icss-utils": "^5.1.0", @@ -19332,8 +17206,6 @@ }, "css-select": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, "requires": { "boolbase": "^1.0.0", @@ -19345,20 +17217,14 @@ }, "css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "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 }, "cuint": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", "dev": true }, "custom-event": { @@ -19367,8 +17233,6 @@ }, "cypress": { "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", "dev": true, "requires": { "@cypress/request": "^2.88.10", @@ -19417,14 +17281,10 @@ "dependencies": { "@types/node": { "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", "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" @@ -19432,8 +17292,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -19442,8 +17300,6 @@ "dependencies": { "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" @@ -19453,8 +17309,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" @@ -19462,20 +17316,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 }, "commander": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, "execa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -19491,8 +17339,6 @@ }, "fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", @@ -19503,8 +17349,6 @@ }, "get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -19512,20 +17356,14 @@ }, "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 }, "human-signals": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, "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", @@ -19534,8 +17372,6 @@ }, "supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -19543,8 +17379,6 @@ }, "tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" @@ -19552,16 +17386,12 @@ }, "universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } }, "dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -19573,8 +17403,6 @@ }, "dayjs": { "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==", "dev": true }, "debug": { @@ -19586,8 +17414,6 @@ }, "deep-equal": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", @@ -19612,28 +17438,20 @@ "dependencies": { "isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, "default-gateway": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "requires": { "execa": "^5.0.0" @@ -19651,8 +17469,6 @@ }, "define-properties": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "requires": { "has-property-descriptors": "^1.0.0", @@ -19661,14 +17477,10 @@ }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "depd": { @@ -19677,8 +17489,6 @@ }, "dependency-graph": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true }, "destroy": { @@ -19687,8 +17497,6 @@ }, "detect-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "di": { @@ -19704,14 +17512,10 @@ }, "dns-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, "dns-packet": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -19719,8 +17523,6 @@ }, "doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -19738,8 +17540,6 @@ }, "dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "requires": { "domelementtype": "^2.3.0", @@ -19749,14 +17549,10 @@ }, "domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, "domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "requires": { "domelementtype": "^2.3.0" @@ -19764,8 +17560,6 @@ }, "domutils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "requires": { "dom-serializer": "^2.0.0", @@ -19775,26 +17569,18 @@ }, "dotenv": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true }, "duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "requires": { "jsbn": "~0.1.0", @@ -19807,8 +17593,6 @@ }, "ejs": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, "requires": { "jake": "^10.8.5" @@ -19816,8 +17600,6 @@ }, "electron-to-chromium": { "version": "1.4.434", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.434.tgz", - "integrity": "sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==", "dev": true }, "emoji-regex": { @@ -19833,8 +17615,6 @@ }, "encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "optional": true, "requires": { "iconv-lite": "^0.6.2" @@ -19842,8 +17622,6 @@ "dependencies": { "iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -19853,8 +17631,6 @@ }, "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" @@ -19882,8 +17658,6 @@ }, "enhanced-resolve": { "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -19892,8 +17666,6 @@ }, "enquirer": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { "ansi-colors": "^4.1.1" @@ -19905,20 +17677,14 @@ }, "entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "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": "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 }, "errno": { @@ -19937,8 +17703,6 @@ }, "es-get-iterator": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -19954,8 +17718,6 @@ "dependencies": { "isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } @@ -19966,8 +17728,6 @@ }, "esbuild": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "requires": { "@esbuild/android-arm": "0.17.19", @@ -19996,8 +17756,6 @@ }, "esbuild-wasm": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", "dev": true }, "escalade": { @@ -20012,8 +17770,6 @@ }, "eslint": { "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", @@ -20059,8 +17815,6 @@ "dependencies": { "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -20071,8 +17825,6 @@ }, "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" @@ -20080,14 +17832,10 @@ }, "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -20096,8 +17844,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" @@ -20105,20 +17851,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 }, "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==", "dev": true }, "eslint-scope": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -20127,14 +17867,10 @@ }, "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "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==", "dev": true, "requires": { "locate-path": "^6.0.0", @@ -20143,8 +17879,6 @@ }, "glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" @@ -20152,8 +17886,6 @@ }, "globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -20161,14 +17893,10 @@ }, "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 }, "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -20176,14 +17904,10 @@ }, "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==", "dev": true }, "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==", "dev": true, "requires": { "p-locate": "^5.0.0" @@ -20191,8 +17915,6 @@ }, "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" @@ -20200,8 +17922,6 @@ }, "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==", "dev": true, "requires": { "p-limit": "^3.0.2" @@ -20209,8 +17929,6 @@ }, "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" @@ -20218,8 +17936,6 @@ }, "type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } @@ -20234,14 +17950,10 @@ }, "eslint-visitor-keys": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true }, "espree": { "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -20255,8 +17967,6 @@ }, "esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -20264,8 +17974,6 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -20289,32 +17997,22 @@ }, "estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, "eventemitter-asyncresource": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", "dev": true }, "eventemitter2": { "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", "dev": true }, "eventemitter3": { @@ -20327,8 +18025,6 @@ }, "execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -20344,8 +18040,6 @@ }, "executable": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, "requires": { "pify": "^2.2.0" @@ -20353,22 +18047,16 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true } } }, "exponential-backoff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", "dev": true }, "express": { "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, "requires": { "accepts": "~1.3.8", @@ -20406,14 +18094,10 @@ "dependencies": { "array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "body-parser": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, "requires": { "bytes": "3.1.2", @@ -20432,14 +18116,10 @@ }, "cookie": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "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" @@ -20447,8 +18127,6 @@ }, "finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "requires": { "debug": "2.6.9", @@ -20462,14 +18140,10 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { "bytes": "3.1.2", @@ -20480,8 +18154,6 @@ }, "statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } @@ -20501,8 +18173,6 @@ }, "extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "requires": { "@types/yauzl": "^2.9.1", @@ -20513,8 +18183,6 @@ "dependencies": { "get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -20524,8 +18192,6 @@ }, "extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true }, "fast-deep-equal": { @@ -20549,8 +18215,6 @@ }, "fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fastq": { @@ -20562,8 +18226,6 @@ }, "faye-websocket": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -20571,8 +18233,6 @@ }, "fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "requires": { "pend": "~1.2.0" @@ -20587,8 +18247,6 @@ }, "file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" @@ -20599,8 +18257,6 @@ }, "filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -20608,8 +18264,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -20617,8 +18271,6 @@ }, "minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -20688,8 +18340,6 @@ }, "flat-cache": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", @@ -20706,8 +18356,6 @@ }, "for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { "is-callable": "^1.1.3" @@ -20715,8 +18363,6 @@ }, "foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -20725,22 +18371,16 @@ "dependencies": { "signal-exit": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true } } }, "forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "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", @@ -20750,26 +18390,18 @@ }, "forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fraction.js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true }, "fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, "fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "fs-extra": { @@ -20783,8 +18415,6 @@ }, "fs-minipass": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", "dev": true, "requires": { "minipass": "^5.0.0" @@ -20792,8 +18422,6 @@ }, "fs-monkey": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", "dev": true }, "fs.realpath": { @@ -20805,14 +18433,10 @@ }, "functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "gauge": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -20847,14 +18471,10 @@ }, "get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "getos": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", "dev": true, "requires": { "async": "^3.2.0" @@ -20862,8 +18482,6 @@ }, "getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -20893,8 +18511,6 @@ }, "global-dirs": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "requires": { "ini": "2.0.0" @@ -20902,8 +18518,6 @@ "dependencies": { "ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true } } @@ -20925,8 +18539,6 @@ }, "gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "requires": { "get-intrinsic": "^1.1.3" @@ -20938,32 +18550,14 @@ }, "grapheme-splitter": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, "graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "guacamole-frontend-ext-lib": { - "version": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", - "requires": { - "tslib": "^2.3.0" - } - }, - "guacamole-frontend-lib": { - "version": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", - "requires": { - "tslib": "^2.3.0" - } - }, "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 }, "has": { @@ -20975,8 +18569,6 @@ }, "has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { @@ -20984,8 +18576,6 @@ }, "has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "requires": { "get-intrinsic": "^1.1.1" @@ -20997,8 +18587,6 @@ }, "has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -21006,14 +18594,10 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "hdr-histogram-js": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "dev": true, "requires": { "@assemblyscript/loader": "^0.10.1", @@ -21023,14 +18607,10 @@ }, "hdr-histogram-percentiles-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", "dev": true }, "hosted-git-info": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "requires": { "lru-cache": "^7.5.1" @@ -21038,16 +18618,12 @@ "dependencies": { "lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true } } }, "hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -21058,8 +18634,6 @@ "dependencies": { "readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -21073,14 +18647,10 @@ }, "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" @@ -21090,8 +18660,6 @@ }, "html-entities": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.6.tgz", - "integrity": "sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==", "dev": true }, "html-escaper": { @@ -21100,8 +18668,6 @@ }, "htmlparser2": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "requires": { "domelementtype": "^2.3.0", @@ -21112,14 +18678,10 @@ }, "http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "http-deceiver": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, "http-errors": { @@ -21141,8 +18703,6 @@ }, "http-parser-js": { "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "http-proxy": { @@ -21156,8 +18716,6 @@ }, "http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { "@tootallnate/once": "2", @@ -21167,8 +18725,6 @@ }, "http-proxy-middleware": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", @@ -21180,8 +18736,6 @@ }, "http-signature": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -21199,14 +18753,10 @@ }, "human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "requires": { "ms": "^2.0.0" @@ -21221,8 +18771,6 @@ }, "icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "requires": {} }, @@ -21235,8 +18783,6 @@ }, "ignore-walk": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", "dev": true, "requires": { "minimatch": "^9.0.0" @@ -21244,8 +18790,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -21253,8 +18797,6 @@ }, "minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -21285,14 +18827,10 @@ }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "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 }, "inflight": { @@ -21307,14 +18845,10 @@ }, "ini": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true }, "injection-js": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.4.0.tgz", - "integrity": "sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==", "dev": true, "requires": { "tslib": "^2.0.0" @@ -21382,8 +18916,6 @@ }, "internal-slot": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { "get-intrinsic": "^1.2.0", @@ -21393,20 +18925,14 @@ }, "ip": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "ipaddr.js": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true }, "is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -21415,8 +18941,6 @@ }, "is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -21429,8 +18953,6 @@ }, "is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -21445,8 +18967,6 @@ }, "is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -21455,8 +18975,6 @@ }, "is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "requires": { "builtin-modules": "^3.3.0" @@ -21464,14 +18982,10 @@ }, "is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { "ci-info": "^3.2.0" @@ -21486,8 +19000,6 @@ }, "is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -21513,8 +19025,6 @@ }, "is-installed-globally": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { "global-dirs": "^3.0.0", @@ -21526,20 +19036,14 @@ }, "is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "is-map": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, "is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, "is-number": { @@ -21548,8 +19052,6 @@ }, "is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -21557,20 +19059,14 @@ }, "is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, "is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true }, "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" @@ -21578,8 +19074,6 @@ }, "is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -21588,14 +19082,10 @@ }, "is-set": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true }, "is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "requires": { "call-bind": "^1.0.2" @@ -21603,14 +19093,10 @@ }, "is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -21618,8 +19104,6 @@ }, "is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -21627,8 +19111,6 @@ }, "is-typed-array": { "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", @@ -21640,8 +19122,6 @@ }, "is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "is-unicode-supported": { @@ -21649,14 +19129,10 @@ }, "is-weakmap": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, "is-weakset": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -21676,8 +19152,6 @@ }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "isbinaryfile": { @@ -21690,14 +19164,10 @@ }, "isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, "istanbul-lib-coverage": { @@ -21768,8 +19238,6 @@ }, "jackspeak": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", @@ -21778,8 +19246,6 @@ }, "jake": { "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, "requires": { "async": "^3.2.3", @@ -21790,8 +19256,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" @@ -21799,8 +19263,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -21809,8 +19271,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" @@ -21818,20 +19278,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" @@ -21867,8 +19321,6 @@ }, "jiti": { "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", "dev": true }, "js-tokens": { @@ -21884,8 +19336,6 @@ }, "jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, "jsesc": { @@ -21897,8 +19347,6 @@ }, "json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { @@ -21907,14 +19355,10 @@ }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "json5": { @@ -21934,14 +19378,10 @@ }, "jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, "jsprim": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -22036,8 +19476,6 @@ }, "karma-firefox-launcher": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", - "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", "dev": true, "requires": { "is-wsl": "^2.2.0", @@ -22046,8 +19484,6 @@ "dependencies": { "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" @@ -22076,8 +19512,6 @@ }, "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": { @@ -22086,8 +19520,6 @@ }, "launch-editor": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", "dev": true, "requires": { "picocolors": "^1.0.0", @@ -22096,8 +19528,6 @@ }, "lazy-ass": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true }, "less": { @@ -22151,8 +19581,6 @@ }, "levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", @@ -22171,8 +19599,6 @@ }, "listr2": { "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "requires": { "cli-truncate": "^2.1.0", @@ -22205,8 +19631,6 @@ }, "lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "lodash.kebabcase": { @@ -22214,14 +19638,10 @@ }, "lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, "log-symbols": { @@ -22266,8 +19686,6 @@ }, "log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { "ansi-escapes": "^4.3.0", @@ -22278,8 +19696,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" @@ -22287,8 +19703,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" @@ -22296,14 +19710,10 @@ }, "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 }, "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", @@ -22313,8 +19723,6 @@ }, "wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -22364,8 +19772,6 @@ }, "make-fetch-happen": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", @@ -22387,8 +19793,6 @@ "dependencies": { "lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true } } @@ -22402,8 +19806,6 @@ }, "memfs": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "requires": { "fs-monkey": "^1.0.4" @@ -22411,8 +19813,6 @@ }, "merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, "merge-stream": { @@ -22425,8 +19825,6 @@ }, "methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, "micromatch": { @@ -22457,8 +19855,6 @@ }, "mini-css-extract-plugin": { "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", "dev": true, "requires": { "schema-utils": "^4.0.0" @@ -22466,8 +19862,6 @@ }, "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 }, "minimatch": { @@ -22482,14 +19876,10 @@ }, "minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true }, "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" @@ -22497,8 +19887,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -22506,16 +19894,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "minipass-fetch": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, "requires": { "encoding": "^0.1.13", @@ -22526,8 +19910,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" @@ -22535,8 +19917,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -22544,16 +19924,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "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", @@ -22562,8 +19938,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -22571,16 +19945,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "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" @@ -22588,8 +19958,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -22597,16 +19965,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "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" @@ -22614,8 +19978,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -22623,16 +19985,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "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", @@ -22641,8 +19999,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -22650,8 +20006,6 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } @@ -22676,8 +20030,6 @@ }, "multicast-dns": { "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "requires": { "dns-packet": "^5.2.2", @@ -22697,14 +20049,10 @@ }, "natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "needle": { @@ -22745,8 +20093,6 @@ }, "ng-packagr": { "version": "16.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.1.0.tgz", - "integrity": "sha512-NbgzDRtRiYJi98Ssky7U5GoicZz7VkR3OW5qd9q3dt3H/JNqLh2PwB745NFG2cT00lEvfrY6LJ1NAcOjoWDibA==", "dev": true, "requires": { "@rollup/plugin-json": "^6.0.0", @@ -22778,16 +20124,12 @@ "dependencies": { "convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true } } }, "ngx-build-plus": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-16.0.0.tgz", - "integrity": "sha512-AXqBJoQGyptbHTK09yfuxS2Gm2+YnVCBnPWyORq79wbC2gdbkYLR34eLA5wi8HZbqWNXdaYdGc75MFAZmkho4Q==", "dev": true, "requires": { "@angular-devkit/build-angular": "^16.0.0", @@ -22795,41 +20137,22 @@ "webpack-merge": "^5.0.0" } }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, "node-addon-api": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, "node-fetch": { "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } }, "node-forge": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, "node-gyp": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -22847,8 +20170,6 @@ "dependencies": { "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" @@ -22858,20 +20179,14 @@ }, "node-gyp-build": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", "dev": true }, "node-releases": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, "nopt": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "requires": { "abbrev": "^1.0.0" @@ -22879,8 +20194,6 @@ }, "normalize-package-data": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "requires": { "hosted-git-info": "^6.0.0", @@ -22895,14 +20208,10 @@ }, "normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, "npm-bundled": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "requires": { "npm-normalize-package-bin": "^3.0.0" @@ -22910,8 +20219,6 @@ }, "npm-install-checks": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", "dev": true, "requires": { "semver": "^7.1.1" @@ -22919,14 +20226,10 @@ }, "npm-normalize-package-bin": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true }, "npm-package-arg": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "requires": { "hosted-git-info": "^6.0.0", @@ -22937,8 +20240,6 @@ }, "npm-packlist": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, "requires": { "ignore-walk": "^6.0.0" @@ -22946,8 +20247,6 @@ }, "npm-pick-manifest": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "requires": { "npm-install-checks": "^6.0.0", @@ -22958,8 +20257,6 @@ }, "npm-registry-fetch": { "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "requires": { "make-fetch-happen": "^11.0.0", @@ -22973,8 +20270,6 @@ }, "npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" @@ -22982,8 +20277,6 @@ }, "npmlog": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "requires": { "are-we-there-yet": "^3.0.0", @@ -22994,8 +20287,6 @@ }, "nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -23003,8 +20294,6 @@ }, "nx": { "version": "16.2.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", - "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", "dev": true, "requires": { "@nrwl/tao": "16.2.2", @@ -23054,8 +20343,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" @@ -23063,14 +20350,10 @@ }, "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -23079,14 +20362,10 @@ }, "cli-spinners": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true }, "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", @@ -23096,8 +20375,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" @@ -23105,14 +20382,10 @@ }, "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 }, "fast-glob": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -23124,8 +20397,6 @@ }, "fs-extra": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -23135,8 +20406,6 @@ }, "glob": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -23149,14 +20418,10 @@ }, "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 }, "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -23164,8 +20429,6 @@ }, "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", @@ -23174,14 +20437,10 @@ }, "lines-and-columns": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "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" @@ -23189,8 +20448,6 @@ }, "minimatch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -23198,8 +20455,6 @@ }, "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" @@ -23207,8 +20462,6 @@ }, "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" @@ -23216,8 +20469,6 @@ }, "tmp": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" @@ -23225,14 +20476,10 @@ }, "universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "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 } } @@ -23247,8 +20494,6 @@ }, "object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -23257,14 +20502,10 @@ }, "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.assign": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -23275,8 +20516,6 @@ }, "obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "on-finished": { @@ -23288,8 +20527,6 @@ }, "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": { @@ -23315,8 +20552,6 @@ }, "optionator": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -23380,8 +20615,6 @@ }, "ospath": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", "dev": true }, "p-limit": { @@ -23400,8 +20633,6 @@ }, "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" @@ -23409,8 +20640,6 @@ }, "p-retry": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "requires": { "@types/retry": "0.12.0", @@ -23419,8 +20648,6 @@ "dependencies": { "retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true } } @@ -23431,8 +20658,6 @@ }, "pacote": { "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", "dev": true, "requires": { "@npmcli/git": "^4.0.0", @@ -23457,8 +20682,6 @@ }, "pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parent-module": { @@ -23527,8 +20750,6 @@ }, "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 }, "path-parse": { @@ -23537,8 +20758,6 @@ }, "path-scurry": { "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", "dev": true, "requires": { "lru-cache": "^9.1.1", @@ -23547,16 +20766,12 @@ "dependencies": { "lru-cache": { "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, "path-type": { @@ -23564,14 +20779,10 @@ }, "pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, "picocolors": { @@ -23589,8 +20800,6 @@ }, "piscina": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", "dev": true, "requires": { "eventemitter-asyncresource": "^1.0.0", @@ -23608,8 +20817,6 @@ }, "postcss": { "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", "dev": true, "requires": { "nanoid": "^3.3.6", @@ -23619,8 +20826,6 @@ }, "postcss-loader": { "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", "dev": true, "requires": { "cosmiconfig": "^8.1.3", @@ -23631,15 +20836,11 @@ }, "postcss-modules-extract-imports": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dev": true, "requires": { "icss-utils": "^5.0.0", @@ -23649,8 +20850,6 @@ }, "postcss-modules-scope": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" @@ -23658,8 +20857,6 @@ }, "postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { "icss-utils": "^5.0.0" @@ -23667,8 +20864,6 @@ }, "postcss-selector-parser": { "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -23677,8 +20872,6 @@ }, "postcss-url": { "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", "dev": true, "requires": { "make-dir": "~3.1.0", @@ -23689,14 +20882,10 @@ "dependencies": { "mime": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, "minimatch": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -23706,44 +20895,30 @@ }, "postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "pretty-bytes": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, "proc-log": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "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": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "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", @@ -23752,8 +20927,6 @@ }, "proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { "forwarded": "0.2.0", @@ -23762,16 +20935,12 @@ "dependencies": { "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 } } }, "proxy-from-env": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", "dev": true }, "prr": { @@ -23781,14 +20950,10 @@ }, "psl": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "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", @@ -23837,8 +21002,6 @@ }, "read-package-json": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", "dev": true, "requires": { "glob": "^10.2.2", @@ -23849,8 +21012,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -23858,8 +21019,6 @@ }, "glob": { "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", "dev": true, "requires": { "foreground-child": "^3.1.0", @@ -23871,14 +21030,10 @@ }, "json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true }, "minimatch": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -23888,8 +21043,6 @@ }, "read-package-json-fast": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "requires": { "json-parse-even-better-errors": "^3.0.0", @@ -23898,8 +21051,6 @@ "dependencies": { "json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true } } @@ -23921,20 +21072,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": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -23942,14 +21087,10 @@ }, "regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "regenerator-transform": { "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" @@ -23961,8 +21102,6 @@ }, "regexp.prototype.flags": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -23972,8 +21111,6 @@ }, "regexpu-core": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "requires": { "@babel/regjsgen": "^0.8.0", @@ -23986,8 +21123,6 @@ }, "regjsparser": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -23995,8 +21130,6 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } @@ -24044,8 +21177,6 @@ }, "request-progress": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, "requires": { "throttleit": "^1.0.0" @@ -24110,8 +21241,6 @@ }, "retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true }, "reusify": { @@ -24165,8 +21294,6 @@ }, "sass": { "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -24176,8 +21303,6 @@ }, "sass-loader": { "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", "dev": true, "requires": { "klona": "^2.0.6", @@ -24201,14 +21326,10 @@ }, "select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, "selfsigned": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dev": true, "requires": { "node-forge": "^1" @@ -24233,8 +21354,6 @@ }, "send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { "debug": "2.6.9", @@ -24254,8 +21373,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" @@ -24263,28 +21380,20 @@ "dependencies": { "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "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 }, "ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } @@ -24298,8 +21407,6 @@ }, "serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -24313,8 +21420,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" @@ -24322,14 +21427,10 @@ }, "depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { "depd": "~1.1.2", @@ -24340,28 +21441,20 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "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.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { "encodeurl": "~1.0.2", @@ -24372,8 +21465,6 @@ }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "setprototypeof": { @@ -24382,8 +21473,6 @@ }, "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" @@ -24391,8 +21480,6 @@ }, "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" @@ -24400,14 +21487,10 @@ }, "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 }, "shell-quote": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, "side-channel": { @@ -24424,8 +21507,6 @@ }, "sigstore": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.6.0.tgz", - "integrity": "sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==", "dev": true, "requires": { "@sigstore/protobuf-specs": "^0.1.0", @@ -24440,8 +21521,6 @@ }, "slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -24451,8 +21530,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" @@ -24460,8 +21537,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" @@ -24469,16 +21544,12 @@ }, "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 } } }, "smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, "socket.io": { @@ -24510,8 +21581,6 @@ }, "sockjs": { "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { "faye-websocket": "^0.11.3", @@ -24521,8 +21590,6 @@ }, "socks": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "requires": { "ip": "^2.0.0", @@ -24531,8 +21598,6 @@ }, "socks-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "requires": { "agent-base": "^6.0.2", @@ -24542,8 +21607,6 @@ }, "source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true }, "source-map-js": { @@ -24584,8 +21647,6 @@ }, "spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -24594,14 +21655,10 @@ }, "spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -24610,14 +21667,10 @@ }, "spdx-license-ids": { "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "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", @@ -24629,8 +21682,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", @@ -24647,8 +21698,6 @@ }, "sshpk": { "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -24664,8 +21713,6 @@ }, "ssri": { "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "requires": { "minipass": "^5.0.0" @@ -24677,8 +21724,6 @@ }, "stop-iteration-iterator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, "requires": { "internal-slot": "^1.0.4" @@ -24709,8 +21754,6 @@ }, "string-width-cjs": { "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -24726,8 +21769,6 @@ }, "strip-ansi-cjs": { "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" @@ -24735,26 +21776,18 @@ }, "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "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==", "dev": true }, "strong-log-transformer": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, "requires": { "duplexer": "^0.1.1", @@ -24778,14 +21811,10 @@ }, "tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar": { "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -24798,8 +21827,6 @@ "dependencies": { "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" @@ -24807,8 +21834,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -24818,22 +21843,16 @@ }, "mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "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 } } }, "tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { "bl": "^4.0.3", @@ -24845,8 +21864,6 @@ }, "terser": { "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -24917,8 +21934,6 @@ }, "throttleit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", "dev": true }, "through": { @@ -24927,8 +21942,6 @@ }, "thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "tmp": { @@ -24955,8 +21968,6 @@ }, "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", @@ -24964,9 +21975,7 @@ } }, "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "version": "0.0.3" }, "tree-kill": { "version": "1.2.2", @@ -24974,8 +21983,6 @@ }, "tsconfig-paths": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "requires": { "json5": "^2.2.2", @@ -24984,14 +21991,10 @@ } }, "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + "version": "2.5.3" }, "tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -24999,16 +22002,12 @@ "dependencies": { "tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "tuf-js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, "requires": { "@tufjs/models": "1.0.4", @@ -25018,8 +22017,6 @@ }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -25027,14 +22024,10 @@ }, "tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, "type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" @@ -25058,8 +22051,6 @@ }, "typescript": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true }, "ua-parser-js": { @@ -25068,14 +22059,10 @@ }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -25084,20 +22071,14 @@ }, "unicode-match-property-value-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, "unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "requires": { "unique-slug": "^4.0.0" @@ -25105,8 +22086,6 @@ }, "unique-slug": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -25122,8 +22101,6 @@ }, "untildify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, "update-browserslist-db": { @@ -25150,20 +22127,14 @@ }, "uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-compile-cache": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -25172,8 +22143,6 @@ }, "validate-npm-package-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "requires": { "builtins": "^5.0.0" @@ -25185,8 +22154,6 @@ }, "verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -25196,8 +22163,6 @@ "dependencies": { "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true } } @@ -25226,8 +22191,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" @@ -25240,14 +22203,10 @@ } }, "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "version": "3.0.1" }, "webpack": { "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -25308,8 +22267,6 @@ }, "webpack-dev-middleware": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -25321,8 +22278,6 @@ }, "webpack-dev-server": { "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", "dev": true, "requires": { "@types/bonjour": "^3.5.9", @@ -25359,8 +22314,6 @@ "dependencies": { "webpack-dev-middleware": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -25372,8 +22325,6 @@ }, "ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "requires": {} } @@ -25381,8 +22332,6 @@ }, "webpack-merge": { "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -25402,8 +22351,6 @@ }, "websocket-driver": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { "http-parser-js": ">=0.5.1", @@ -25413,14 +22360,10 @@ }, "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-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -25428,8 +22371,6 @@ }, "which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -25441,8 +22382,6 @@ }, "which-collection": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "requires": { "is-map": "^2.0.1", @@ -25453,8 +22392,6 @@ }, "which-typed-array": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", @@ -25467,8 +22404,6 @@ }, "wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -25476,14 +22411,10 @@ }, "wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.3" }, "wrap-ansi": { "version": "7.0.0", @@ -25512,8 +22443,6 @@ }, "wrap-ansi-cjs": { "version": "npm:wrap-ansi@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", @@ -25523,8 +22452,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" @@ -25532,8 +22459,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" @@ -25541,8 +22466,6 @@ }, "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 } } @@ -25557,8 +22480,6 @@ }, "xxhashjs": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", "dev": true, "requires": { "cuint": "^0.2.2" @@ -25588,8 +22509,6 @@ }, "yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "requires": { "buffer-crc32": "~0.2.3", @@ -25598,8 +22517,6 @@ }, "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": { diff --git a/guacamole/src/main/guacamole-frontend/package.json b/guacamole/src/main/guacamole-frontend/package.json index 5856fff271..76d3686362 100644 --- a/guacamole/src/main/guacamole-frontend/package.json +++ b/guacamole/src/main/guacamole-frontend/package.json @@ -5,6 +5,7 @@ "ng": "ng", "start": "ng serve", "build": "ng build", + "build:app": "ng build guacamole-frontend --base-href /guacamole/", "test": "ng test", "lint": "ng lint", "run:all": "node node_modules/@angular-architects/module-federation/src/server/mf-dev-server.js" @@ -25,8 +26,6 @@ "@simonwep/pickr": "^1.8.2", "angular-expressions": "^1.1.9", "file-saver": "^2.0.5", - "guacamole-frontend-ext-lib": "file:../guacamole-frontend-ext-lib/dist/guacamole-frontend-ext-lib", - "guacamole-frontend-lib": "file:../guacamole-frontend-lib/dist/guacamole-frontend-lib", "jstz": "^2.1.1", "lodash": "^4.17.21", "rxjs": "~7.8.0", diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/.eslintrc.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/.eslintrc.json new file mode 100644 index 0000000000..161f9f25ab --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/.eslintrc.json @@ -0,0 +1,37 @@ +{ + "extends": "../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "guac", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "guac", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/README.md b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/README.md similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/README.md rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/README.md diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/ng-package.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/ng-package.json similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/ng-package.json rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/ng-package.json diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/package.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/package.json similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/package.json rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/package.json diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/lib/form/FormField.ts diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/lib/form/FormFieldComponentData.ts diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/lib/form/field-type.service.ts diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/public-api.ts similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/src/public-api.ts rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/src/public-api.ts diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/tsconfig.lib.json similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.json rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/tsconfig.lib.json diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/tsconfig.lib.prod.json diff --git a/guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.spec.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/tsconfig.spec.json similarity index 100% rename from guacamole/src/main/guacamole-frontend-ext-lib/projects/guacamole-frontend-ext-lib/tsconfig.spec.json rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-ext-lib/tsconfig.spec.json diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/.eslintrc.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/.eslintrc.json new file mode 100644 index 0000000000..161f9f25ab --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/.eslintrc.json @@ -0,0 +1,37 @@ +{ + "extends": "../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "guac", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "guac", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/README.md b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/README.md similarity index 100% rename from guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/README.md rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/README.md diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/karma.conf.js b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/karma.conf.js similarity index 100% rename from guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/karma.conf.js rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/karma.conf.js diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/ng-package.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/ng-package.json similarity index 100% rename from guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/ng-package.json rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/ng-package.json diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/package.json b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/package.json new file mode 100644 index 0000000000..e2cdcc7460 --- /dev/null +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/package.json @@ -0,0 +1,12 @@ +{ + "name": "guacamole-frontend-lib", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^16.1.0", + "@angular/core": "^16.1.0" + }, + "dependencies": { + "tslib": "^2.3.0" + }, + "sideEffects": false +} diff --git a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js similarity index 98% rename from guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js rename to guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js index ca4ab4d26b..ade20ca967 100644 --- a/guacamole/src/main/guacamole-frontend-lib/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/assets/guacamole-common-js.min.js @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + 'use strict';var Guacamole=Guacamole||{};Guacamole.ArrayBufferReader=function(b){var a=this;b.onblob=function(b){b=window.atob(b);for(var c=new ArrayBuffer(b.length),d=new Uint8Array(c),f=0;f Date: Fri, 23 Jun 2023 15:48:04 +0200 Subject: [PATCH 19/80] GUACAMOLE-1085: Prefer event emitter rather than functions as inputs --- .../lib/element/directives/guac-resize.directive.ts | 11 +++++------ .../src/lib/osk/components/osk/osk.component.html | 2 +- .../src/lib/osk/components/osk/osk.component.ts | 2 +- .../components/client-page/client-page.component.html | 6 +++--- .../components/guac-client/guac-client.component.html | 2 +- .../guac-thumbnail/guac-thumbnail.component.html | 2 +- .../player-display/player-display.component.html | 2 +- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts index d477163fcf..e724b9934d 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/element/directives/guac-resize.directive.ts @@ -17,7 +17,7 @@ * under the License. */ -import { Directive, ElementRef, Inject, Input } from '@angular/core'; +import { Directive, ElementRef, EventEmitter, Inject, Output } from '@angular/core'; import { DOCUMENT } from "@angular/common"; /** @@ -32,11 +32,10 @@ import { DOCUMENT } from "@angular/common"; export class GuacResizeDirective { /** - * The function to call whenever the associated element is - * resized. The function will be passed the width and height of - * the element, in pixels. + * Will emit an event including the width and height of the element, in pixels whenever the associated + * element is resized. */ - @Input({required: true}) guacResize!: (width: number, height: number) => void; + @Output() guacResize = new EventEmitter<{ width: number, height: number }>(); /** * The element which will monitored for size changes. @@ -100,7 +99,7 @@ export class GuacResizeDirective { || this.element.offsetHeight !== this.lastHeight) { // Call resize callback, if defined - this.guacResize(this.element.offsetWidth, this.element.offsetHeight); + this.guacResize.emit({width: this.element.offsetWidth, height: this.element.offsetHeight}); // Update stored size this.lastWidth = this.element.offsetWidth; diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html index 3b28ad449f..6e0e6411c5 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.html @@ -16,5 +16,5 @@ specific language governing permissions and limitations under the License. --> -
      +
      diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts index a3e1a23aaf..ca11223b33 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend-lib/src/lib/osk/components/osk/osk.component.ts @@ -99,7 +99,7 @@ export class OskComponent implements OnChanges { if (url) { // Retrieve layout JSON - this.http.get(url).subscribe( + this.http.get(url).subscribe( // Build OSK with retrieved layout (layout) => { diff --git a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html index f458bac483..0ab0e602ae 100644 --- a/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html +++ b/guacamole/src/main/guacamole-frontend/projects/guacamole-frontend/src/app/client/components/client-page/client-page.component.html @@ -23,7 +23,7 @@
      -
      +